summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/linux_builds.yml4
-rw-r--r--AUTHORS.md11
-rw-r--r--COPYRIGHT.txt6
-rw-r--r--DONORS.md63
-rw-r--r--SConstruct1
-rw-r--r--core/core_bind.cpp7
-rw-r--r--core/core_bind.h1
-rw-r--r--core/extension/gdnative_interface.h2
-rw-r--r--core/extension/native_extension.cpp4
-rw-r--r--core/extension/native_extension.h2
-rw-r--r--core/extension/native_extension_manager.cpp14
-rw-r--r--core/input/gamecontrollerdb.txt956
-rw-r--r--core/input/godotcontrollerdb.txt3
-rw-r--r--core/input/input.cpp1
-rw-r--r--core/input/input_map.cpp2
-rw-r--r--core/io/file_access_compressed.cpp18
-rw-r--r--core/io/marshalls.cpp28
-rw-r--r--core/io/pck_packer.cpp5
-rw-r--r--core/io/resource_format_binary.cpp14
-rw-r--r--core/io/resource_format_binary.h2
-rw-r--r--core/io/resource_loader.cpp24
-rw-r--r--core/math/basis.cpp28
-rw-r--r--core/math/bvh_cull.inc3
-rw-r--r--core/math/bvh_debug.inc6
-rw-r--r--core/math/camera_matrix.cpp12
-rw-r--r--core/math/camera_matrix.h1
-rw-r--r--core/math/color.h2
-rw-r--r--core/math/face3.cpp4
-rw-r--r--core/math/geometry_2d.cpp18
-rw-r--r--core/math/geometry_2d.h10
-rw-r--r--core/math/geometry_3d.cpp2
-rw-r--r--core/math/geometry_3d.h30
-rw-r--r--core/math/math_funcs.h24
-rw-r--r--core/math/octree.h10
-rw-r--r--core/math/plane.cpp4
-rw-r--r--core/math/quaternion.cpp2
-rw-r--r--core/math/quaternion.h2
-rw-r--r--core/math/random_pcg.h2
-rw-r--r--core/math/transform_2d.cpp4
-rw-r--r--core/math/vector2.cpp2
-rw-r--r--core/math/vector3.cpp34
-rw-r--r--core/math/vector3.h44
-rw-r--r--core/math/vector3i.cpp7
-rw-r--r--core/math/vector3i.h6
-rw-r--r--core/object/object.cpp13
-rw-r--r--core/object/object.h45
-rw-r--r--core/object/script_language.cpp10
-rw-r--r--core/object/undo_redo.cpp44
-rw-r--r--core/object/undo_redo.h2
-rw-r--r--core/os/os.cpp10
-rw-r--r--core/os/os.h1
-rw-r--r--core/os/spin_lock.h2
-rw-r--r--core/register_core_types.cpp11
-rw-r--r--core/register_core_types.h1
-rw-r--r--core/string/translation.cpp8
-rw-r--r--core/string/ustring.cpp83
-rw-r--r--core/templates/vmap.h3
-rw-r--r--core/typedefs.h2
-rw-r--r--core/variant/type_info.h3
-rw-r--r--doc/classes/@GlobalScope.xml2
-rw-r--r--doc/classes/AnimationNode.xml8
-rw-r--r--doc/classes/AudioServer.xml16
-rw-r--r--doc/classes/AudioStream.xml6
-rw-r--r--doc/classes/BaseMaterial3D.xml15
-rw-r--r--doc/classes/CharacterBody2D.xml19
-rw-r--r--doc/classes/CharacterBody3D.xml19
-rw-r--r--doc/classes/DisplayServer.xml33
-rw-r--r--doc/classes/FogVolume.xml1
-rw-r--r--doc/classes/Geometry2D.xml2
-rw-r--r--doc/classes/ItemList.xml2
-rw-r--r--doc/classes/Line2D.xml3
-rw-r--r--doc/classes/NativeExtension.xml4
-rw-r--r--doc/classes/Node.xml25
-rw-r--r--doc/classes/OS.xml9
-rw-r--r--doc/classes/Popup.xml6
-rw-r--r--doc/classes/ProjectSettings.xml29
-rw-r--r--doc/classes/RenderingServer.xml12
-rw-r--r--doc/classes/RichTextLabel.xml14
-rw-r--r--doc/classes/SceneTree.xml7
-rw-r--r--doc/classes/Sky.xml2
-rw-r--r--doc/classes/SpriteBase3D.xml2
-rw-r--r--doc/classes/String.xml45
-rw-r--r--doc/classes/SubViewportContainer.xml1
-rw-r--r--doc/classes/SurfaceTool.xml4
-rw-r--r--doc/classes/TileMap.xml10
-rw-r--r--doc/classes/TreeItem.xml4
-rw-r--r--doc/classes/VoxelGI.xml1
-rw-r--r--doc/classes/Window.xml7
-rw-r--r--doc/classes/XRController3D.xml6
-rw-r--r--doc/classes/XRPositionalTracker.xml3
-rw-r--r--doc/translations/ar.po1795
-rw-r--r--doc/translations/ca.po1730
-rw-r--r--doc/translations/classes.pot1446
-rw-r--r--doc/translations/cs.po1673
-rw-r--r--doc/translations/de.po1926
-rw-r--r--doc/translations/el.po1810
-rw-r--r--doc/translations/es.po2063
-rw-r--r--doc/translations/fa.po1781
-rw-r--r--doc/translations/fi.po1671
-rw-r--r--doc/translations/fil.po1781
-rw-r--r--doc/translations/fr.po3768
-rw-r--r--doc/translations/gl.po1450
-rw-r--r--doc/translations/hi.po1463
-rw-r--r--doc/translations/hu.po1459
-rw-r--r--doc/translations/id.po1789
-rw-r--r--doc/translations/is.po1450
-rw-r--r--doc/translations/it.po1844
-rw-r--r--doc/translations/ja.po2338
-rw-r--r--doc/translations/ko.po1796
-rw-r--r--doc/translations/lv.po1781
-rw-r--r--doc/translations/mr.po1462
-rw-r--r--doc/translations/nb.po1459
-rw-r--r--doc/translations/ne.po1450
-rw-r--r--doc/translations/nl.po1781
-rw-r--r--doc/translations/pl.po1820
-rw-r--r--doc/translations/pt.po1492
-rw-r--r--doc/translations/pt_BR.po1892
-rw-r--r--doc/translations/ro.po1781
-rw-r--r--doc/translations/ru.po1913
-rw-r--r--doc/translations/sk.po1781
-rw-r--r--doc/translations/sr_Cyrl.po1785
-rw-r--r--doc/translations/sv.po1450
-rw-r--r--doc/translations/th.po1814
-rw-r--r--doc/translations/tl.po1453
-rw-r--r--doc/translations/tr.po1800
-rw-r--r--doc/translations/uk.po1891
-rw-r--r--doc/translations/vi.po1468
-rw-r--r--doc/translations/zh_CN.po3353
-rw-r--r--doc/translations/zh_TW.po1797
-rw-r--r--drivers/coreaudio/audio_driver_coreaudio.cpp26
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp1
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp12
-rw-r--r--drivers/gles3/shader_gles3.cpp1
-rw-r--r--drivers/gles3/shaders/scene.glsl8
-rw-r--r--drivers/gles3/texture_loader_gles3.cpp1
-rw-r--r--drivers/png/resource_saver_png.cpp4
-rw-r--r--drivers/unix/dir_access_unix.cpp12
-rw-r--r--drivers/unix/file_access_unix.cpp9
-rw-r--r--drivers/unix/ip_unix.cpp29
-rw-r--r--drivers/unix/net_socket_posix.cpp16
-rw-r--r--drivers/unix/os_unix.cpp9
-rw-r--r--drivers/unix/syslog_logger.cpp2
-rw-r--r--drivers/vulkan/SCsub3
-rw-r--r--drivers/vulkan/rendering_device_vulkan.cpp231
-rw-r--r--drivers/vulkan/rendering_device_vulkan.h4
-rw-r--r--drivers/vulkan/vulkan_context.cpp388
-rw-r--r--drivers/vulkan/vulkan_context.h10
-rw-r--r--drivers/vulkan/vulkan_hooks.h48
-rw-r--r--drivers/wasapi/audio_driver_wasapi.cpp6
-rw-r--r--drivers/windows/file_access_windows.cpp7
-rw-r--r--editor/action_map_editor.cpp4
-rw-r--r--editor/animation_bezier_editor.cpp638
-rw-r--r--editor/animation_track_editor.cpp852
-rw-r--r--editor/audio_stream_preview.cpp34
-rw-r--r--editor/code_editor.cpp89
-rw-r--r--editor/code_editor.h2
-rw-r--r--editor/connections_dialog.cpp7
-rw-r--r--editor/create_dialog.cpp25
-rw-r--r--editor/debugger/debug_adapter/debug_adapter_server.cpp11
-rw-r--r--editor/debugger/editor_debugger_inspector.cpp11
-rw-r--r--editor/debugger/editor_debugger_node.cpp193
-rw-r--r--editor/debugger/editor_debugger_tree.cpp10
-rw-r--r--editor/debugger/editor_network_profiler.cpp21
-rw-r--r--editor/debugger/editor_profiler.cpp10
-rw-r--r--editor/debugger/editor_visual_profiler.cpp32
-rw-r--r--editor/debugger/script_editor_debugger.cpp3
-rw-r--r--editor/doc_tools.cpp5
-rw-r--r--editor/editor_atlas_packer.cpp62
-rw-r--r--editor/editor_atlas_packer.h2
-rw-r--r--editor/editor_audio_buses.cpp9
-rw-r--r--editor/editor_autoload_settings.cpp34
-rw-r--r--editor/editor_data.cpp5
-rw-r--r--editor/editor_dir_dialog.cpp44
-rw-r--r--editor/editor_export.cpp1
-rw-r--r--editor/editor_feature_profile.cpp24
-rw-r--r--editor/editor_file_dialog.cpp86
-rw-r--r--editor/editor_file_system.cpp3
-rw-r--r--editor/editor_help.cpp9
-rw-r--r--editor/editor_help_search.cpp2
-rw-r--r--editor/editor_inspector.cpp616
-rw-r--r--editor/editor_log.cpp3
-rw-r--r--editor/editor_node.cpp6
-rw-r--r--editor/editor_plugin.cpp13
-rw-r--r--editor/editor_plugin_settings.cpp14
-rw-r--r--editor/editor_properties.cpp195
-rw-r--r--editor/editor_properties_array_dict.cpp76
-rw-r--r--editor/editor_run_native.cpp96
-rw-r--r--editor/editor_settings_dialog.cpp8
-rw-r--r--editor/editor_spin_slider.cpp30
-rw-r--r--editor/editor_toaster.cpp4
-rw-r--r--editor/editor_translation.cpp6
-rw-r--r--editor/editor_zoom_widget.cpp6
-rw-r--r--editor/find_in_files.cpp60
-rw-r--r--editor/find_in_files.h2
-rw-r--r--editor/import/collada.cpp26
-rw-r--r--editor/import/dynamic_font_import_settings.cpp23
-rw-r--r--editor/import/editor_import_collada.cpp2
-rw-r--r--editor/import/resource_importer_obj.cpp2
-rw-r--r--editor/import/resource_importer_scene.cpp16
-rw-r--r--editor/import/resource_importer_texture_atlas.cpp9
-rw-r--r--editor/import/resource_importer_wav.h40
-rw-r--r--editor/import/scene_import_settings.cpp11
-rw-r--r--editor/import_defaults_editor.cpp6
-rw-r--r--editor/localization_editor.cpp36
-rw-r--r--editor/node_dock.cpp9
-rw-r--r--editor/plugin_config_dialog.cpp1
-rw-r--r--editor/plugins/abstract_polygon_2d_editor.cpp1
-rw-r--r--editor/plugins/animation_blend_space_1d_editor.cpp63
-rw-r--r--editor/plugins/animation_blend_space_2d_editor.cpp83
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp129
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.h3
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp3
-rw-r--r--editor/plugins/animation_state_machine_editor.cpp283
-rw-r--r--editor/plugins/animation_tree_editor_plugin.cpp24
-rw-r--r--editor/plugins/asset_library_editor_plugin.cpp17
-rw-r--r--editor/plugins/audio_stream_editor_plugin.cpp49
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp324
-rw-r--r--editor/plugins/canvas_item_editor_plugin.h3
-rw-r--r--editor/plugins/control_editor_plugin.cpp8
-rw-r--r--editor/plugins/cpu_particles_2d_editor_plugin.cpp10
-rw-r--r--editor/plugins/cpu_particles_3d_editor_plugin.cpp6
-rw-r--r--editor/plugins/curve_editor_plugin.cpp6
-rw-r--r--editor/plugins/debugger_editor_plugin.cpp6
-rw-r--r--editor/plugins/font_editor_plugin.cpp18
-rw-r--r--editor/plugins/gpu_particles_2d_editor_plugin.cpp12
-rw-r--r--editor/plugins/gpu_particles_3d_editor_plugin.cpp8
-rw-r--r--editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp58
-rw-r--r--editor/plugins/gradient_editor_plugin.cpp16
-rw-r--r--editor/plugins/material_editor_plugin.cpp40
-rw-r--r--editor/plugins/mesh_editor_plugin.cpp26
-rw-r--r--editor/plugins/node_3d_editor_gizmos.cpp6
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp915
-rw-r--r--editor/plugins/node_3d_editor_plugin.h5
-rw-r--r--editor/plugins/ot_features_plugin.cpp26
-rw-r--r--editor/plugins/polygon_2d_editor_plugin.cpp4
-rw-r--r--editor/plugins/polygon_3d_editor_plugin.cpp1
-rw-r--r--editor/plugins/replication_editor_plugin.cpp29
-rw-r--r--editor/plugins/resource_preloader_editor_plugin.cpp13
-rw-r--r--editor/plugins/root_motion_editor_plugin.cpp9
-rw-r--r--editor/plugins/script_editor_plugin.cpp9
-rw-r--r--editor/plugins/script_text_editor.cpp2
-rw-r--r--editor/plugins/shader_editor_plugin.cpp8
-rw-r--r--editor/plugins/shader_file_editor_plugin.cpp10
-rw-r--r--editor/plugins/skeleton_3d_editor_plugin.cpp3
-rw-r--r--editor/plugins/text_control_editor_plugin.cpp7
-rw-r--r--editor/plugins/text_control_editor_plugin.h2
-rw-r--r--editor/plugins/texture_3d_editor_plugin.cpp19
-rw-r--r--editor/plugins/texture_layered_editor_plugin.cpp19
-rw-r--r--editor/plugins/theme_editor_preview.cpp1
-rw-r--r--editor/plugins/tiles/tile_atlas_view.cpp8
-rw-r--r--editor/plugins/tiles/tile_data_editors.cpp30
-rw-r--r--editor/plugins/tiles/tile_map_editor.cpp43
-rw-r--r--editor/plugins/tiles/tile_set_atlas_source_editor.cpp13
-rw-r--r--editor/plugins/tiles/tile_set_editor.cpp11
-rw-r--r--editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp16
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp213
-rw-r--r--editor/plugins/voxel_gi_editor_plugin.cpp58
-rw-r--r--editor/project_export.cpp1
-rw-r--r--editor/project_manager.cpp38
-rw-r--r--editor/project_settings_editor.cpp2
-rw-r--r--editor/property_editor.cpp6
-rw-r--r--editor/property_selector.cpp12
-rw-r--r--editor/quick_open.cpp1
-rw-r--r--editor/reparent_dialog.cpp14
-rw-r--r--editor/scene_tree_dock.cpp3
-rw-r--r--editor/scene_tree_editor.cpp5
-rw-r--r--editor/script_create_dialog.cpp83
-rw-r--r--editor/script_create_dialog.h1
-rw-r--r--editor/shader_create_dialog.cpp1
-rw-r--r--editor/shader_globals_editor.cpp17
-rw-r--r--editor/translations/af.po322
-rw-r--r--editor/translations/ar.po790
-rw-r--r--editor/translations/az.po308
-rw-r--r--editor/translations/bg.po1205
-rw-r--r--editor/translations/bn.po323
-rw-r--r--editor/translations/br.po307
-rw-r--r--editor/translations/ca.po337
-rw-r--r--editor/translations/cs.po361
-rw-r--r--editor/translations/da.po323
-rw-r--r--editor/translations/de.po656
-rw-r--r--editor/translations/editor.pot307
-rw-r--r--editor/translations/el.po348
-rw-r--r--editor/translations/eo.po330
-rw-r--r--editor/translations/es.po770
-rw-r--r--editor/translations/es_AR.po355
-rw-r--r--editor/translations/et.po326
-rw-r--r--editor/translations/eu.po313
-rw-r--r--editor/translations/fa.po321
-rw-r--r--editor/translations/fi.po639
-rw-r--r--editor/translations/fil.po308
-rw-r--r--editor/translations/fr.po703
-rw-r--r--editor/translations/ga.po307
-rw-r--r--editor/translations/gl.po335
-rw-r--r--editor/translations/he.po359
-rw-r--r--editor/translations/hi.po320
-rw-r--r--editor/translations/hr.po321
-rw-r--r--editor/translations/hu.po323
-rw-r--r--editor/translations/id.po328
-rw-r--r--editor/translations/is.po307
-rw-r--r--editor/translations/it.po481
-rw-r--r--editor/translations/ja.po612
-rw-r--r--editor/translations/ka.po320
-rw-r--r--editor/translations/km.po307
-rw-r--r--editor/translations/ko.po361
-rw-r--r--editor/translations/lt.po324
-rw-r--r--editor/translations/lv.po505
-rw-r--r--editor/translations/mi.po307
-rw-r--r--editor/translations/mk.po307
-rw-r--r--editor/translations/ml.po307
-rw-r--r--editor/translations/mr.po307
-rw-r--r--editor/translations/ms.po992
-rw-r--r--editor/translations/nb.po357
-rw-r--r--editor/translations/nl.po437
-rw-r--r--editor/translations/or.po307
-rw-r--r--editor/translations/pl.po468
-rw-r--r--editor/translations/pr.po318
-rw-r--r--editor/translations/pt.po714
-rw-r--r--editor/translations/pt_BR.po609
-rw-r--r--editor/translations/ro.po323
-rw-r--r--editor/translations/ru.po643
-rw-r--r--editor/translations/si.po307
-rw-r--r--editor/translations/sk.po323
-rw-r--r--editor/translations/sl.po334
-rw-r--r--editor/translations/sq.po324
-rw-r--r--editor/translations/sr_Cyrl.po337
-rw-r--r--editor/translations/sr_Latn.po316
-rw-r--r--editor/translations/sv.po321
-rw-r--r--editor/translations/ta.po307
-rw-r--r--editor/translations/te.po307
-rw-r--r--editor/translations/th.po332
-rw-r--r--editor/translations/tl.po321
-rw-r--r--editor/translations/tr.po669
-rw-r--r--editor/translations/tt.po307
-rw-r--r--editor/translations/tzm.po307
-rw-r--r--editor/translations/uk.po644
-rw-r--r--editor/translations/ur_PK.po314
-rw-r--r--editor/translations/vi.po329
-rw-r--r--editor/translations/zh_CN.po649
-rw-r--r--editor/translations/zh_HK.po323
-rw-r--r--editor/translations/zh_TW.po340
-rw-r--r--main/main.cpp26
-rw-r--r--main/main.h1
-rw-r--r--modules/basis_universal/register_types.cpp2
-rw-r--r--modules/basis_universal/texture_basisu.cpp218
-rw-r--r--modules/bullet/slider_joint_bullet.cpp1
-rw-r--r--modules/csg/csg_shape.cpp96
-rw-r--r--modules/fbx/data/fbx_material.cpp2
-rw-r--r--modules/fbx/fbx_parser/FBXMeshGeometry.cpp26
-rw-r--r--modules/gdnative/gdnative/aabb.cpp1
-rw-r--r--modules/gdnative/gdnative/plane.cpp1
-rw-r--r--modules/gdnative/gdnative/vector3.cpp2
-rw-r--r--modules/gdnative/gdnative_library_singleton_editor.cpp10
-rw-r--r--modules/gdnative/nativescript/nativescript.cpp21
-rw-r--r--modules/gdnative/nativescript/nativescript.h2
-rw-r--r--modules/gdscript/editor_templates/CharacterBody2D/basic_movement.gd8
-rw-r--r--modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd12
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp66
-rw-r--r--modules/gdscript/gdscript_editor.cpp29
-rw-r--r--modules/gdscript/gdscript_function.h2
-rw-r--r--modules/gdscript/gdscript_parser.cpp3
-rw-r--r--modules/gdscript/gdscript_vm.cpp39
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.cpp11
-rw-r--r--modules/gltf/gltf_document.cpp78
-rw-r--r--modules/gridmap/doc_classes/GridMap.xml16
-rw-r--r--modules/gridmap/grid_map.cpp42
-rw-r--r--modules/gridmap/grid_map.h9
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp50
-rw-r--r--modules/gridmap/grid_map_editor_plugin.h11
-rw-r--r--modules/mono/csharp_script.h3
-rw-r--r--modules/mono/editor/bindings_generator.cpp3
-rw-r--r--modules/mono/editor_templates/CharacterBody2D/basic_movement.cs12
-rw-r--r--modules/mono/editor_templates/CharacterBody3D/basic_movement.cs16
-rw-r--r--modules/mono/mono_gd/gd_mono.cpp9
-rw-r--r--modules/mono/mono_gd/support/android_support.cpp89
-rw-r--r--modules/mono/mono_gd/support/ios_support.mm3
-rw-r--r--modules/mono/utils/mono_reg_utils.cpp38
-rw-r--r--modules/mono/utils/path_utils.cpp9
-rw-r--r--modules/navigation/nav_utils.h1
-rw-r--r--modules/navigation/navigation_mesh_editor_plugin.cpp10
-rw-r--r--modules/navigation/navigation_mesh_editor_plugin.h2
-rw-r--r--modules/ogg/ogg_packet_sequence.cpp4
-rw-r--r--modules/openxr/SCsub87
-rw-r--r--modules/openxr/action_map/openxr_action.cpp91
-rw-r--r--modules/openxr/action_map/openxr_action.h74
-rw-r--r--modules/openxr/action_map/openxr_action_map.cpp261
-rw-r--r--modules/openxr/action_map/openxr_action_map.h (renamed from modules/basis_universal/texture_basisu.h)60
-rw-r--r--modules/openxr/action_map/openxr_action_set.cpp111
-rw-r--r--modules/openxr/action_map/openxr_action_set.h70
-rw-r--r--modules/openxr/action_map/openxr_interaction_profile.cpp136
-rw-r--r--modules/openxr/action_map/openxr_interaction_profile.h89
-rw-r--r--modules/openxr/config.py27
-rw-r--r--modules/openxr/doc_classes/OpenXRAction.xml38
-rw-r--r--modules/openxr/doc_classes/OpenXRActionMap.xml55
-rw-r--r--modules/openxr/doc_classes/OpenXRActionSet.xml40
-rw-r--r--modules/openxr/doc_classes/OpenXRIPBinding.xml19
-rw-r--r--modules/openxr/doc_classes/OpenXRInteractionProfile.xml20
-rw-r--r--modules/openxr/doc_classes/OpenXRInterface.xml13
-rw-r--r--modules/openxr/extensions/openxr_android_extension.cpp71
-rw-r--r--modules/openxr/extensions/openxr_android_extension.h47
-rw-r--r--modules/openxr/extensions/openxr_composition_layer_provider.h45
-rw-r--r--modules/openxr/extensions/openxr_extension_wrapper.h106
-rw-r--r--modules/openxr/extensions/openxr_vulkan_extension.cpp750
-rw-r--r--modules/openxr/extensions/openxr_vulkan_extension.h93
-rw-r--r--modules/openxr/openxr_api.cpp2171
-rw-r--r--modules/openxr/openxr_api.h261
-rw-r--r--modules/openxr/openxr_interface.cpp663
-rw-r--r--modules/openxr/openxr_interface.h129
-rw-r--r--modules/openxr/openxr_util.cpp291
-rw-r--r--modules/openxr/openxr_util.h46
-rw-r--r--modules/openxr/register_types.cpp91
-rw-r--r--modules/openxr/register_types.h40
-rw-r--r--modules/text_server_adv/SCsub1
-rw-r--r--modules/visual_script/editor/visual_script_editor.cpp7
-rw-r--r--modules/visual_script/editor/visual_script_property_selector.cpp2
-rw-r--r--modules/visual_script/visual_script.cpp2
-rw-r--r--modules/visual_script/visual_script_nodes.cpp5
-rw-r--r--modules/webrtc/webrtc_data_channel_js.cpp4
-rw-r--r--modules/websocket/emws_client.cpp10
-rw-r--r--modules/websocket/emws_peer.cpp6
-rw-r--r--modules/webxr/webxr_interface_js.cpp3
-rw-r--r--modules/xatlas_unwrap/register_types.cpp2
-rw-r--r--platform/android/android_input_handler.cpp5
-rw-r--r--platform/android/api/jni_singleton.h22
-rw-r--r--platform/android/audio_driver_opensl.cpp9
-rw-r--r--platform/android/dir_access_jandroid.cpp50
-rw-r--r--platform/android/file_access_android.cpp25
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java5
-rw-r--r--platform/android/java_class_wrapper.cpp90
-rw-r--r--platform/android/java_godot_io_wrapper.cpp1
-rw-r--r--platform/android/java_godot_lib_jni.cpp46
-rw-r--r--platform/android/java_godot_wrapper.cpp12
-rw-r--r--platform/android/jni_utils.cpp44
-rw-r--r--platform/android/net_socket_android.cpp21
-rw-r--r--platform/android/os_android.cpp30
-rw-r--r--platform/iphone/app_delegate.mm11
-rw-r--r--platform/iphone/display_layer.mm12
-rw-r--r--platform/iphone/display_server_iphone.mm23
-rw-r--r--platform/iphone/godot_iphone.mm12
-rw-r--r--platform/iphone/godot_view.mm8
-rw-r--r--platform/iphone/godot_view_gesture_recognizer.mm3
-rw-r--r--platform/iphone/godot_view_renderer.mm3
-rw-r--r--platform/iphone/ios.mm5
-rw-r--r--platform/iphone/joypad_iphone.mm27
-rw-r--r--platform/iphone/os_iphone.h1
-rw-r--r--platform/iphone/os_iphone.mm22
-rw-r--r--platform/iphone/view_controller.mm2
-rw-r--r--platform/javascript/display_server_javascript.cpp11
-rw-r--r--platform/javascript/javascript_main.cpp3
-rw-r--r--platform/javascript/javascript_singleton.cpp1
-rw-r--r--platform/javascript/os_javascript.cpp2
-rw-r--r--platform/linuxbsd/display_server_x11.cpp187
-rw-r--r--platform/linuxbsd/display_server_x11.h18
-rw-r--r--platform/linuxbsd/joypad_linux.cpp6
-rw-r--r--platform/linuxbsd/os_linuxbsd.cpp16
-rw-r--r--platform/linuxbsd/os_linuxbsd.h1
-rw-r--r--platform/linuxbsd/vulkan_context_x11.cpp1
-rw-r--r--platform/osx/crash_handler_osx.mm9
-rw-r--r--platform/osx/display_server_osx.h13
-rw-r--r--platform/osx/display_server_osx.mm165
-rw-r--r--platform/osx/export/export_plugin.cpp18
-rw-r--r--platform/osx/godot_application_delegate.mm4
-rw-r--r--platform/osx/godot_content_view.mm2
-rw-r--r--platform/osx/godot_main_osx.mm4
-rw-r--r--platform/osx/godot_window.mm4
-rw-r--r--platform/osx/godot_window_delegate.mm2
-rw-r--r--platform/osx/joypad_osx.cpp14
-rw-r--r--platform/osx/os_osx.h1
-rw-r--r--platform/osx/os_osx.mm13
-rw-r--r--platform/osx/osx_terminal_logger.mm5
-rw-r--r--platform/uwp/app_uwp.cpp15
-rw-r--r--platform/uwp/context_egl_uwp.cpp20
-rw-r--r--platform/uwp/joypad_uwp.cpp10
-rw-r--r--platform/uwp/os_uwp.cpp66
-rw-r--r--platform/windows/crash_handler_windows.cpp23
-rw-r--r--platform/windows/display_server_windows.cpp287
-rw-r--r--platform/windows/display_server_windows.h14
-rw-r--r--platform/windows/gl_manager_windows.cpp39
-rw-r--r--platform/windows/godot_windows.cpp5
-rw-r--r--platform/windows/joypad_windows.cpp46
-rw-r--r--platform/windows/joypad_windows.h3
-rw-r--r--platform/windows/os_windows.cpp74
-rw-r--r--platform/windows/os_windows.h1
-rw-r--r--platform/windows/windows_terminal_logger.cpp14
-rw-r--r--scene/2d/animated_sprite_2d.cpp10
-rw-r--r--scene/2d/joint_2d.cpp17
-rw-r--r--scene/2d/line_2d.cpp7
-rw-r--r--scene/2d/physics_body_2d.cpp56
-rw-r--r--scene/2d/physics_body_2d.h6
-rw-r--r--scene/2d/polygon_2d.cpp9
-rw-r--r--scene/2d/tile_map.cpp7
-rw-r--r--scene/2d/tile_map.h3
-rw-r--r--scene/3d/camera_3d.cpp6
-rw-r--r--scene/3d/joint_3d.cpp17
-rw-r--r--scene/3d/occluder_instance_3d.cpp2
-rw-r--r--scene/3d/physics_body_3d.cpp60
-rw-r--r--scene/3d/physics_body_3d.h6
-rw-r--r--scene/3d/sprite_3d.cpp14
-rw-r--r--scene/3d/vehicle_body_3d.cpp10
-rw-r--r--scene/3d/xr_nodes.cpp21
-rw-r--r--scene/3d/xr_nodes.h3
-rw-r--r--scene/animation/animation_player.cpp6
-rw-r--r--scene/gui/item_list.cpp6
-rw-r--r--scene/gui/item_list.h2
-rw-r--r--scene/gui/line_edit.cpp3
-rw-r--r--scene/gui/nine_patch_rect.cpp4
-rw-r--r--scene/gui/popup.cpp47
-rw-r--r--scene/gui/popup.h4
-rw-r--r--scene/gui/popup_menu.cpp6
-rw-r--r--scene/gui/rich_text_label.cpp27
-rw-r--r--scene/gui/rich_text_label.h3
-rw-r--r--scene/gui/scroll_bar.cpp5
-rw-r--r--scene/gui/subviewport_container.cpp18
-rw-r--r--scene/gui/subviewport_container.h1
-rw-r--r--scene/gui/text_edit.cpp35
-rw-r--r--scene/gui/tree.cpp27
-rw-r--r--scene/gui/video_stream_player.cpp42
-rw-r--r--scene/main/canvas_item.cpp66
-rw-r--r--scene/main/canvas_item.h5
-rw-r--r--scene/main/canvas_layer.cpp6
-rw-r--r--scene/main/node.cpp41
-rw-r--r--scene/main/node.h4
-rw-r--r--scene/main/scene_tree.cpp2
-rw-r--r--scene/main/viewport.cpp20
-rw-r--r--scene/main/viewport.h2
-rw-r--r--scene/main/window.cpp24
-rw-r--r--scene/main/window.h1
-rw-r--r--scene/multiplayer/scene_cache_interface.cpp122
-rw-r--r--scene/multiplayer/scene_cache_interface.h2
-rw-r--r--scene/multiplayer/scene_replication_interface.cpp3
-rw-r--r--scene/resources/animation.cpp14
-rw-r--r--scene/resources/box_shape_3d.cpp1
-rw-r--r--scene/resources/capsule_shape_2d.cpp2
-rw-r--r--scene/resources/capsule_shape_3d.cpp2
-rw-r--r--scene/resources/circle_shape_2d.cpp1
-rw-r--r--scene/resources/cylinder_shape_3d.cpp2
-rw-r--r--scene/resources/importer_mesh.cpp10
-rw-r--r--scene/resources/material.cpp34
-rw-r--r--scene/resources/material.h10
-rw-r--r--scene/resources/mesh.cpp1
-rw-r--r--scene/resources/packed_scene.cpp4
-rw-r--r--scene/resources/rectangle_shape_2d.cpp1
-rw-r--r--scene/resources/resource_format_text.cpp8
-rw-r--r--scene/resources/sky.cpp2
-rw-r--r--scene/resources/sky.h2
-rw-r--r--scene/resources/sphere_shape_3d.cpp1
-rw-r--r--scene/resources/surface_tool.cpp27
-rw-r--r--scene/resources/tile_set.cpp4
-rw-r--r--scene/resources/visual_shader.cpp2
-rw-r--r--scene/resources/visual_shader_nodes.cpp3
-rw-r--r--scene/resources/visual_shader_particle_nodes.cpp4
-rw-r--r--servers/audio/audio_stream.cpp1
-rw-r--r--servers/audio/effects/audio_effect_delay.cpp3
-rw-r--r--servers/audio/effects/audio_effect_pitch_shift.cpp96
-rw-r--r--servers/audio/effects/audio_effect_pitch_shift.h41
-rw-r--r--servers/audio/effects/audio_effect_stereo_enhance.cpp1
-rw-r--r--servers/audio_server.cpp4
-rw-r--r--servers/display_server.cpp6
-rw-r--r--servers/display_server.h8
-rw-r--r--servers/physics_2d/godot_body_pair_2d.cpp5
-rw-r--r--servers/physics_2d/godot_collision_solver_2d_sat.cpp4
-rw-r--r--servers/physics_2d/godot_physics_server_2d.cpp13
-rw-r--r--servers/physics_2d/godot_shape_2d.cpp6
-rw-r--r--servers/physics_2d/godot_space_2d.cpp7
-rw-r--r--servers/physics_3d/gjk_epa.cpp2
-rw-r--r--servers/physics_3d/godot_collision_solver_3d_sat.cpp4
-rw-r--r--servers/physics_3d/godot_physics_server_3d.cpp13
-rw-r--r--servers/physics_3d/godot_shape_3d.cpp6
-rw-r--r--servers/physics_3d/godot_space_3d.cpp7
-rw-r--r--servers/physics_3d/joints/godot_hinge_joint_3d.cpp6
-rw-r--r--servers/rendering/renderer_compositor.cpp2
-rw-r--r--servers/rendering/renderer_rd/effects_rd.cpp41
-rw-r--r--servers/rendering/renderer_rd/effects_rd.h5
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp14
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp13
-rw-r--r--servers/rendering/renderer_rd/renderer_compositor_rd.cpp3
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp1
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.cpp4
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.h2
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp44
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.cpp15
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.h2
-rw-r--r--servers/rendering/renderer_rd/shaders/copy_to_fb.glsl62
-rw-r--r--servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl26
-rw-r--r--servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl21
-rw-r--r--servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl24
-rw-r--r--servers/rendering/renderer_rd/shaders/particles_copy.glsl8
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl73
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl2
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl131
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl67
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl2
-rw-r--r--servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl1
-rw-r--r--servers/rendering/renderer_viewport.cpp1
-rw-r--r--servers/rendering/rendering_device.h1
-rw-r--r--servers/rendering/shader_compiler.cpp180
-rw-r--r--servers/rendering/shader_language.cpp3
-rw-r--r--servers/rendering/shader_types.cpp4
-rw-r--r--servers/rendering_server.cpp22
-rw-r--r--servers/rendering_server.h8
-rw-r--r--servers/xr/xr_positional_tracker.cpp17
-rw-r--r--servers/xr/xr_positional_tracker.h8
-rw-r--r--servers/xr_server.cpp5
-rw-r--r--tests/core/string/test_string.h2
-rw-r--r--tests/servers/test_physics_2d.cpp30
-rw-r--r--thirdparty/README.md33
-rw-r--r--thirdparty/harfbuzz/src/hb-algs.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer-verify.cc422
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.h64
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.hh18
-rw-r--r--thirdparty/harfbuzz/src/hb-common.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-common.h16
-rw-r--r--thirdparty/harfbuzz/src/hb-config.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.cc376
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.h285
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.hh246
-rw-r--r--thirdparty/harfbuzz/src/hb-font.cc163
-rw-r--r--thirdparty/harfbuzz/src/hb-font.h45
-rw-r--r--thirdparty/harfbuzz/src/hb-font.hh16
-rw-r--r--thirdparty/harfbuzz/src/hb-ft.cc82
-rw-r--r--thirdparty/harfbuzz/src/hb-gobject-structs.cc1
-rw-r--r--thirdparty/harfbuzz/src/hb-gobject-structs.h4
-rw-r--r--thirdparty/harfbuzz/src/hb-machinery.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff1-table.cc34
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff1-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff2-table.cc22
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff2-table.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-deprecated.h15
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-face-table-list.hh13
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-face.hh3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-font.cc21
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-glyf-table.hh55
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh159
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.cc301
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.h62
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math-table.hh78
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math.cc45
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math.h36
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-metrics.cc139
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-metrics.h5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc6
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-tag.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-shape.cc18
-rw-r--r--thirdparty/harfbuzz/src/hb-static.cc37
-rw-r--r--thirdparty/harfbuzz/src/hb-style.cc7
-rw-r--r--thirdparty/harfbuzz/src/hb-style.h4
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.cc143
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.cc37
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.h46
-rw-r--r--thirdparty/harfbuzz/src/hb-version.h8
-rw-r--r--thirdparty/misc/patches/polypartition-godot-types.patch2
-rw-r--r--thirdparty/misc/polypartition.cpp2
-rw-r--r--thirdparty/misc/stb_rect_pack.h35
-rw-r--r--thirdparty/openxr/COPYING.adoc123
-rw-r--r--thirdparty/openxr/LICENSE202
-rw-r--r--thirdparty/openxr/include/openxr/openxr.h3925
-rw-r--r--thirdparty/openxr/include/openxr/openxr_platform.h675
-rw-r--r--thirdparty/openxr/include/openxr/openxr_platform_defines.h110
-rw-r--r--thirdparty/openxr/include/openxr/openxr_reflection.h2746
-rw-r--r--thirdparty/openxr/src/.clang-format10
-rw-r--r--thirdparty/openxr/src/common/extra_algorithms.h47
-rw-r--r--thirdparty/openxr/src/common/filesystem_utils.cpp322
-rw-r--r--thirdparty/openxr/src/common/filesystem_utils.hpp46
-rw-r--r--thirdparty/openxr/src/common/hex_and_handles.h108
-rw-r--r--thirdparty/openxr/src/common/loader_interfaces.h114
-rw-r--r--thirdparty/openxr/src/common/object_info.cpp276
-rw-r--r--thirdparty/openxr/src/common/object_info.h229
-rw-r--r--thirdparty/openxr/src/common/platform_utils.hpp345
-rw-r--r--thirdparty/openxr/src/common/stdfs_conditions.h45
-rw-r--r--thirdparty/openxr/src/common/xr_dependencies.h89
-rw-r--r--thirdparty/openxr/src/common/xr_linear.h787
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/AUTHORS115
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/LICENSE55
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h88
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h61
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/config.h150
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h43
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/json.h15
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h61
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/reader.h405
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/value.h935
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/version.h28
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/writer.h369
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp1992
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h138
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp1634
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl156
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp1259
-rw-r--r--thirdparty/openxr/src/loader/.gitignore5
-rw-r--r--thirdparty/openxr/src/loader/android_utilities.cpp319
-rw-r--r--thirdparty/openxr/src/loader/android_utilities.h32
-rw-r--r--thirdparty/openxr/src/loader/api_layer_interface.cpp399
-rw-r--r--thirdparty/openxr/src/loader/api_layer_interface.hpp54
-rw-r--r--thirdparty/openxr/src/loader/exception_handling.hpp40
-rw-r--r--thirdparty/openxr/src/loader/loader_core.cpp847
-rw-r--r--thirdparty/openxr/src/loader/loader_instance.cpp303
-rw-r--r--thirdparty/openxr/src/loader/loader_instance.hpp77
-rw-r--r--thirdparty/openxr/src/loader/loader_logger.cpp239
-rw-r--r--thirdparty/openxr/src/loader/loader_logger.hpp194
-rw-r--r--thirdparty/openxr/src/loader/loader_logger_recorders.cpp291
-rw-r--r--thirdparty/openxr/src/loader/loader_logger_recorders.hpp40
-rw-r--r--thirdparty/openxr/src/loader/loader_platform.hpp204
-rw-r--r--thirdparty/openxr/src/loader/manifest_file.cpp845
-rw-r--r--thirdparty/openxr/src/loader/manifest_file.hpp103
-rw-r--r--thirdparty/openxr/src/loader/runtime_interface.cpp493
-rw-r--r--thirdparty/openxr/src/loader/runtime_interface.hpp84
-rw-r--r--thirdparty/openxr/src/loader/xr_generated_loader.cpp700
-rw-r--r--thirdparty/openxr/src/loader/xr_generated_loader.hpp252
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.c347
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.h355
-rw-r--r--thirdparty/volk/volk.c175
-rw-r--r--thirdparty/volk/volk.h117
-rw-r--r--thirdparty/vulkan/patches/01-VMA-fix-nullability.patch80
-rw-r--r--thirdparty/vulkan/patches/03-VMA-universal-pools.patch567
-rw-r--r--thirdparty/vulkan/patches/VMA-use-volk.patch (renamed from thirdparty/vulkan/patches/02-VMA-use-volk.patch)0
-rw-r--r--thirdparty/vulkan/vk_mem_alloc.h6523
720 files changed, 106174 insertions, 47634 deletions
diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml
index eeca57a22e..bb3416743b 100644
--- a/.github/workflows/linux_builds.yml
+++ b/.github/workflows/linux_builds.yml
@@ -23,7 +23,7 @@ jobs:
target: release_debug
tools: true
tests: false # Disabled due freeze caused by mix Mono build and CI
- sconsflags: module_mono_enabled=yes mono_glue=no
+ sconsflags: module_mono_enabled=yes mono_static=yes mono_glue=no
doc-test: true
bin: "./bin/godot.linuxbsd.opt.tools.64.mono"
build-mono: true
@@ -47,7 +47,7 @@ jobs:
target: release
tools: false
tests: false
- sconsflags: module_mono_enabled=yes mono_glue=no debug_symbols=no
+ sconsflags: module_mono_enabled=yes mono_static=yes mono_glue=no debug_symbols=no
build-mono: false
artifact: true
diff --git a/AUTHORS.md b/AUTHORS.md
index 430596e611..07a67de77b 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -46,7 +46,7 @@ name is available.
Bastiaan Olij (BastiaanOlij)
Ben Brookshire (sheepandshepherd)
Benjamin Larsson (Nallebeorn)
- Bernard Liebl (poke1024)
+ Bernhard Liebl (poke1024)
Bhuvan Vemula (Bhu1-V)
Błażej Szczygieł (zaps166)
Bojidar Marinov (bojidar-bg)
@@ -121,6 +121,7 @@ name is available.
Joan Fons Sanchez (JFonS)
Johannes Witt (HaSa1002)
Johan Manuel (29jm)
+ Jordan Schidlowsky (winterpixelgames)
Joshua Grams (JoshuaGrams)
Juan Linietsky (reduz)
Julian Murgia (StraToN)
@@ -149,6 +150,7 @@ name is available.
Mariano Javier Suligoy (MarianoGnu)
Mario Schlack (hurikhan)
Marios Staikopoulos (marstaik)
+ Markus Sauermann (Sauermann)
Martin Capitanio (capnm)
Martin Liška (marxin)
Martin Sjursen (binbitten)
@@ -164,6 +166,7 @@ name is available.
MichiRecRoom (LikeLakers2)
Morris "Tabor" Arroad (mortarroad)
mrezai
+ Muhammad Huri (CakHuri)
muiroc
Nathan Franke (nathanfranke)
Nathan Lovato (NathanLovato)
@@ -180,14 +183,16 @@ name is available.
Paul Joannon (paulloz)
Paul Trojahn (ptrojahn)
Pawel Kowal (pkowal1982)
+ Pawel Lampe (Scony)
Pedro J. Estébanez (RandomShaper)
Pieter-Jan Briers (PJB3005)
Poommetee Ketson (Noshyaar)
Przemysław Gołąb (n-pigeon)
+ Rafael M. G. (rafallus)
Rafał Mikrut (qarmin)
Ralf Hölzemer (rollenrolm)
Ramesh Ravone (RameshRavone)
- raphael10241024
+ Raphael2048
Raul Santos (raulsntos)
Ray Koopa (RayKoopa)
Rémi Verschelde (akien-mga)
@@ -208,12 +213,14 @@ name is available.
Simon Wenner (swenner)
Stijn Hinlopen (hinlopen)
Swarnim Arun (minraws)
+ TC (floppyhammer)
Thakee Nathees (ThakeeNathees)
thebestnom
Theo Hallenius (TheoXD)
Timo Schwarzer (timoschwarzer)
Timo (toger5)
Tomasz Chabora (KoBeWi)
+ trollodel
Twarit Waikar (IronicallySerious)
Umang Kalra (theoway)
Vinzenz Feenstra (vinzenz)
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index 368e321a2d..df1ab0c849 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -361,12 +361,16 @@ Comment: Multi-channel signed distance field generator
Copyright: 2016, Viktor Chlumsky
License: MIT
-
Files: ./thirdparty/oidn/
Comment: Intel Open Image Denoise
Copyright: 2009-2019, Intel Corporation
License: Apache-2.0
+Files: ./thirdparty/openxr/
+Comment: OpenXR Loader
+Copyright: 2020-2022, The Khronos Group Inc.
+License: Apache-2.0
+
Files: ./thirdparty/pcre2/
Comment: PCRE2
Copyright: 1997-2021, University of Cambridge
diff --git a/DONORS.md b/DONORS.md
index 9fdd603e58..815ad49958 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -46,10 +46,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Andrew Bowen
Andrew Dunai
anti666
- blurp
Christian Baune
Christopher Montesano
Christopher Shifflett
+ CodeLikeCammy
Daniel Edwards
Darrin Massena
David Mydlarz
@@ -73,6 +73,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Maxim Karsten
Michael
Mike King
+ Nassor Paulino da Silva
Nathan Warden
Neal Gompa (Conan Kudo)
Ninja_5tyl3
@@ -81,11 +82,13 @@ generous deed immortalized in the next stable release of Godot Engine.
Rami
Relintai
Ronnie Cheng
+ ShikadiGum
Slobodan Milnovic
Stephan Lanfermann
Steve
Thomas Krampl
Violin Iliev
+ Vladimír Chvátil
## Gold donors
@@ -99,11 +102,11 @@ generous deed immortalized in the next stable release of Godot Engine.
Carlo Cabanilla
Daniel James
David Gehrig
+ David Hubber
David Snopek
Ed Morley
First Last
Florian Rämisch
- Gamejunkey
Hunter Jones
Jacobus Dens
Jakub Grzesik
@@ -112,6 +115,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jonathan Wright
Jon Woodward
Karl Werf
+ Kevin Vu
Klavdij Voncina
Maciej Pendolski
Manuele Finocchiaro
@@ -141,7 +145,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Victor
Xeno Coliseum
- Adam McLaughlin
Adam Nakonieczny
Adam Nelson
Adrian Adamiak
@@ -159,6 +162,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Arthur S. Muszynski
Brandon Hawkinson
Cameron Connolly
+ Carl Kryschi
Charlie Whitfield
Chase Taranto
Chris Petrich
@@ -170,6 +174,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Cristopher
CzechBlueBear
D
+ DagobertDick
dan didenko
Daniel
Daniel Hernández Alcojor
@@ -179,6 +184,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Dev To be curious
Dima Fedotov
Dimitri Nüscheler
+ Dmitriy Khudorozhkov
Donn Eddy
Douglas Hammond
Eric Brand
@@ -196,35 +202,34 @@ generous deed immortalized in the next stable release of Godot Engine.
Geoffroy Warin
GGGames.org
gisora
- GlassBrick
GrayDwarf
Guilherme Felipe de C. G. da Silva
+ Harry Tumber
Harvey Fong
- Hayden Whitehead
Heath Hayes
Horváth Péter
Hu Hund
Hunter Barabas
HurrieCrane
- Jake Burga
Jamal Bencharki
James Couzens
Jan Sælid
Jared
Jared White
+ Jean-Sébastien Ross
Jennifer Wilcox
Jeremi Biernacki
- Jesús Chicharro
Joel Fivat
Johnathan Kupferer
- Jose Fernando Alexandre
Josef Stumpfegger
Jose Malheiro
Jose Manuel Muñoz Perez
Joshie Sparks
Joshua Flores
Joshua Lesperance
+ Juan Velandia
Judd
+ Julián Absatz
Julian Todd
Juraj Móza
JUSTIN CARROLL
@@ -245,6 +250,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Marcus Richter
Mark Barrett
Martin Eigel
+ Martin Gulliksson
Martin Kotz
Martin Soucek
matt
@@ -259,6 +265,7 @@ generous deed immortalized in the next stable release of Godot Engine.
nate etan
Nick Abousselam
Nicola Cocchiaro
+ Nicolás Carrasco
Nicole Barovic
Oliver Dick
Oscar Campos
@@ -269,7 +276,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Peter Richmond
Petr Malac
PhaineOfCatz
- Piotr Wyszyński
Rafał Michno
Raymond Harris
Reilt
@@ -285,6 +291,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Romeo Disca
Ronnie Ashlock
Ronny Mühle
+ Ryan Breaker
Ryan Heath
Ryan Scott
Samuel Hummerstone
@@ -317,8 +324,6 @@ generous deed immortalized in the next stable release of Godot Engine.
toto bibi
Troy Kinsella
Turntsnaco
- tweaklab
- Tyler Chase
Valryia
Vincent Cloutier
Vlad Ceru Opran
@@ -328,7 +333,6 @@ generous deed immortalized in the next stable release of Godot Engine.
xzibiting
Yifan Lai
Yuancheng Zhang
- Zie Weaver
Ðртём Равбецкий
## Silver donors
@@ -357,7 +361,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Ales Jelovcan
Alessandro Senese
Alexander Ravenheart
- Alexander Walter (SilvanuZ)
Alex Chan
Alex Clavelle
alex raeside
@@ -383,12 +386,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Aubrey Falconer
Auré Franky
aurelien condomines
- Avner
AzulCrescent
b110110
Balázs Batári
Bálint Horváth
- bcat
Beau Seymour
Benedikt
Benoit Jauvin-Girard
@@ -409,7 +410,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Brian Klein
Brodie Fairhall
Bronson Zgeb
- Bruno Hurth
Burney Waring
c64cosmin
Caleb Gartner
@@ -437,6 +437,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Corchari
Craig Maloney
Craig Post
+ Dakota Watkins
damucz
Daniel Cheney
Daren Scot Wilson
@@ -460,6 +461,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Duodecimal
Eduardo Teixeira
Edward Herbert
+ Edward L
Edward Swartz
Egon Elbre
Elgenzay
@@ -471,6 +473,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Eric Williams
Erika Sanders
Erkki Seppälä
+ Ewan Holmes
Faisal Alkubaisi
Fault Boy
fby
@@ -497,16 +500,18 @@ generous deed immortalized in the next stable release of Godot Engine.
Grominet
Guillaume Pham Ngoc
Guldoman
+ gurehamu
Hal A
Haplo
Hayden Foley
Heribert Hirth
- Hillel Taub-Tabib
Hinken
Houdini Blueprints
Ian ORourke
Ian Williams
+ Idilio Alfaro
IndustrialRobot
+ Ivan Nikolaev
iveks
izzy neuhaus
Jackson Harmer
@@ -529,6 +534,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jason Bolton
Jason Evans
Jason Uechi
+ Jason Yundt
Jeff Hungerford
Jeffrey Berube
Jennifer Graves
@@ -539,7 +545,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Joel Höglund
John Bruce
John Gabriel
- John Szevin
Jonas
Jonas Arndt
Jonas Bernemann
@@ -556,6 +561,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jordy Goodridge
Jorge Antunes
Jorge Araya Navarro
+ Jose Francisco 'Yiro' Vera Girona
Joseph Catrambone
Josh P
Josh Taylor
@@ -583,12 +589,11 @@ generous deed immortalized in the next stable release of Godot Engine.
Kent Jofur
Kerotasma
Ketafuki
- Kevin van Rooijen
Kiri Jolly
Kodera Software
Kolandrious
- Konstantin Goncharov
Kquona
+ Krishna Nadoor
Kristian Nygaard Jensen
KR McGinley
Kronarq
@@ -606,6 +611,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Leonardo Dimano
Linus Lind Lundgren
Logan Apple
+ Luca Poli
Ludovic DELVAL
Luigi Renna
Luis Gaemperle
@@ -619,6 +625,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Markus Martin
Markus Michael Egger
Markus Ort
+ Markus Strompen
Martin FIbik
Martin Holas
Martin Liška
@@ -636,7 +643,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Melissa Mears
Merlyn Morgan-Graham
Metal Demon 2000
- mewin
mhilbrunner
Michael
Michael Bruce-Lockhart
@@ -657,6 +663,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Molly Jameson
MoltenGears
Moowool
+ moulefrite
MrAZIE
Mrjemandem
Nathan Fish
@@ -676,17 +683,18 @@ generous deed immortalized in the next stable release of Godot Engine.
Nils Nordmark
Nima Farid
Noel Billig
- NZ
oceoh
Okatima
Oleg Reva
+ Oliver Ambrose
Oriol Muñoz Princep
- Orionis
oscar1000108
Oscar Domingo
+ p
Pascal
Patrick Indermühle
Patrick Nafarrete
+ Patrick Wuttke
Paul E Hansen
Paul Gieske
Paweł Kowal
@@ -709,8 +717,9 @@ generous deed immortalized in the next stable release of Godot Engine.
Rainer Amler
Rami Hanano
Rammeow
- Ramunas Leknickas
+ RAMupgrade
red1939
+ Relintai
Remi Rampin
Reneator
René Habermann
@@ -725,6 +734,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Roger Smith
Roglozor
Roland RzÄ…sa
+ Roman Papush
Ronald Ho Hip (CrimsonZA)
Ronan
Roy Scayged
@@ -742,6 +752,7 @@ generous deed immortalized in the next stable release of Godot Engine.
SeungJong k
Shaidak
Shane
+ Shane Abraham
Shane Sicienski
Shane Spoor
Silver1063
@@ -755,6 +766,7 @@ generous deed immortalized in the next stable release of Godot Engine.
slavfox
smbe19
smo1704
+ Soheib El-Harrache
Solene Waked
Sophie Winter
Spencer Everhart
@@ -785,6 +797,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Tim Gleason
Tim Klein
Timothy B. MacDonald
+ tinyBigGAMES LLC
Title Plinsut
TMoney
Toadile
@@ -812,7 +825,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Vitaliy Sapronenko
Vi Watch
Vladimir Savin
- VoxelVisions.com
Wapiti .
Watchinofoye
Wiley Thompson
@@ -826,6 +838,7 @@ generous deed immortalized in the next stable release of Godot Engine.
yakcyll
Yan Shi
Yegor Smirnov
+ Zach H.
Zak Stephens
Zher Huei Lee
蕭惟å…
diff --git a/SConstruct b/SConstruct
index a27e5490a5..233a79f635 100644
--- a/SConstruct
+++ b/SConstruct
@@ -173,6 +173,7 @@ opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", Tru
opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
opts.Add(BoolVariable("vulkan", "Enable the vulkan video driver", True))
opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 video driver", True))
+opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True))
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursively for each specified path.", True))
opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
diff --git a/core/core_bind.cpp b/core/core_bind.cpp
index b31cc18b7a..bb4b49d9cd 100644
--- a/core/core_bind.cpp
+++ b/core/core_bind.cpp
@@ -362,6 +362,10 @@ int OS::get_processor_count() const {
return ::OS::get_singleton()->get_processor_count();
}
+String OS::get_processor_name() const {
+ return ::OS::get_singleton()->get_processor_name();
+}
+
bool OS::is_stdout_verbose() const {
return ::OS::get_singleton()->is_stdout_verbose();
}
@@ -554,6 +558,7 @@ void OS::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_low_processor_usage_mode_sleep_usec"), &OS::get_low_processor_usage_mode_sleep_usec);
ClassDB::bind_method(D_METHOD("get_processor_count"), &OS::get_processor_count);
+ ClassDB::bind_method(D_METHOD("get_processor_name"), &OS::get_processor_name);
ClassDB::bind_method(D_METHOD("get_executable_path"), &OS::get_executable_path);
ClassDB::bind_method(D_METHOD("execute", "path", "arguments", "output", "read_stderr", "open_console"), &OS::execute, DEFVAL(Array()), DEFVAL(false), DEFVAL(false));
@@ -2286,8 +2291,8 @@ void Engine::register_singleton(const StringName &p_name, Object *p_object) {
s.ptr = p_object;
s.user_created = true;
::Engine::get_singleton()->add_singleton(s);
- ;
}
+
void Engine::unregister_singleton(const StringName &p_name) {
ERR_FAIL_COND_MSG(!has_singleton(p_name), "Attempt to remove unregistered singleton: " + String(p_name));
ERR_FAIL_COND_MSG(!::Engine::get_singleton()->is_singleton_user_created(p_name), "Attempt to remove non-user created singleton: " + String(p_name));
diff --git a/core/core_bind.h b/core/core_bind.h
index 21a1fc2077..1ed243206b 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -218,6 +218,7 @@ public:
bool is_stdout_verbose() const;
int get_processor_count() const;
+ String get_processor_name() const;
enum SystemDir {
SYSTEM_DIR_DESKTOP,
diff --git a/core/extension/gdnative_interface.h b/core/extension/gdnative_interface.h
index a2e0c7cc73..62934d1d73 100644
--- a/core/extension/gdnative_interface.h
+++ b/core/extension/gdnative_interface.h
@@ -460,8 +460,8 @@ typedef enum {
GDNATIVE_INITIALIZATION_CORE,
GDNATIVE_INITIALIZATION_SERVERS,
GDNATIVE_INITIALIZATION_SCENE,
- GDNATIVE_INITIALIZATION_EDITOR,
GDNATIVE_INITIALIZATION_DRIVER,
+ GDNATIVE_INITIALIZATION_EDITOR,
GDNATIVE_MAX_INITIALIZATION_LEVEL,
} GDNativeInitializationLevel;
diff --git a/core/extension/native_extension.cpp b/core/extension/native_extension.cpp
index 1512852234..325ccec6c4 100644
--- a/core/extension/native_extension.cpp
+++ b/core/extension/native_extension.cpp
@@ -295,9 +295,10 @@ NativeExtension::InitializationLevel NativeExtension::get_minimum_library_initia
ERR_FAIL_COND_V(library == nullptr, INITIALIZATION_LEVEL_CORE);
return InitializationLevel(initialization.minimum_initialization_level);
}
+
void NativeExtension::initialize_library(InitializationLevel p_level) {
ERR_FAIL_COND(library == nullptr);
- ERR_FAIL_COND(p_level <= int32_t(level_initialized));
+ ERR_FAIL_COND_MSG(p_level <= int32_t(level_initialized), vformat("Level '%d' must be higher than the current level '%d'", p_level, level_initialized));
level_initialized = int32_t(p_level);
@@ -324,6 +325,7 @@ void NativeExtension::_bind_methods() {
BIND_ENUM_CONSTANT(INITIALIZATION_LEVEL_CORE);
BIND_ENUM_CONSTANT(INITIALIZATION_LEVEL_SERVERS);
BIND_ENUM_CONSTANT(INITIALIZATION_LEVEL_SCENE);
+ BIND_ENUM_CONSTANT(INITIALIZATION_LEVEL_DRIVER);
BIND_ENUM_CONSTANT(INITIALIZATION_LEVEL_EDITOR);
}
diff --git a/core/extension/native_extension.h b/core/extension/native_extension.h
index b98e4925d2..ebfedfb29a 100644
--- a/core/extension/native_extension.h
+++ b/core/extension/native_extension.h
@@ -71,8 +71,8 @@ public:
INITIALIZATION_LEVEL_CORE,
INITIALIZATION_LEVEL_SERVERS,
INITIALIZATION_LEVEL_SCENE,
- INITIALIZATION_LEVEL_EDITOR,
INITIALIZATION_LEVEL_DRIVER,
+ INITIALIZATION_LEVEL_EDITOR,
};
bool is_library_open() const;
diff --git a/core/extension/native_extension_manager.cpp b/core/extension/native_extension_manager.cpp
index 87737858a8..509405494b 100644
--- a/core/extension/native_extension_manager.cpp
+++ b/core/extension/native_extension_manager.cpp
@@ -40,14 +40,14 @@ NativeExtensionManager::LoadStatus NativeExtensionManager::load_extension(const
return LOAD_STATUS_FAILED;
}
- if (level >= 0) { //already initialized up to some level
+ if (level >= 0) { // Already initialized up to some level.
int32_t minimum_level = extension->get_minimum_library_initialization_level();
if (minimum_level < MIN(level, NativeExtension::INITIALIZATION_LEVEL_SCENE)) {
return LOAD_STATUS_NEEDS_RESTART;
}
- //initialize up to current level
- for (int32_t i = minimum_level; i < level; i++) {
- extension->initialize_library(NativeExtension::InitializationLevel(level));
+ // Initialize up to current level.
+ for (int32_t i = minimum_level; i <= level; i++) {
+ extension->initialize_library(NativeExtension::InitializationLevel(i));
}
}
native_extension_map[p_path] = extension;
@@ -64,14 +64,14 @@ NativeExtensionManager::LoadStatus NativeExtensionManager::unload_extension(cons
Ref<NativeExtension> extension = native_extension_map[p_path];
- if (level >= 0) { //already initialized up to some level
+ if (level >= 0) { // Already initialized up to some level.
int32_t minimum_level = extension->get_minimum_library_initialization_level();
if (minimum_level < MIN(level, NativeExtension::INITIALIZATION_LEVEL_SCENE)) {
return LOAD_STATUS_NEEDS_RESTART;
}
- //initialize up to current level
+ // Deinitialize down to current level.
for (int32_t i = level; i >= minimum_level; i--) {
- extension->deinitialize_library(NativeExtension::InitializationLevel(level));
+ extension->deinitialize_library(NativeExtension::InitializationLevel(i));
}
}
native_extension_map.erase(p_path);
diff --git a/core/input/gamecontrollerdb.txt b/core/input/gamecontrollerdb.txt
index 58014e976e..f2cbaa3698 100644
--- a/core/input/gamecontrollerdb.txt
+++ b/core/input/gamecontrollerdb.txt
@@ -2,12 +2,14 @@
# Source: https://github.com/gabomdq/SDL_GameControllerDB
# Windows
-03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,
-03000000d0160000040d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
-03000000d0160000050d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
-03000000d0160000060d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
-03000000d0160000070d000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
-03000000d0160000600a000000000000,4Play,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000fa2d00000100000000000000,3dRudder Foot Motion Controller,leftx:a0,lefty:a1,rightx:a5,righty:a2,platform:Windows,
+03000000d0160000040d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000050d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000060d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000070d000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000d0160000600a000000000000,4Play Adapter,a:b1,b:b3,back:b4,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b6,leftstick:b14,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b15,righttrigger:b9,rightx:a3,righty:a4,start:b5,x:b0,y:b2,platform:Windows,
+03000000c82d00000031000000000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00000531000000000000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000951000000000000,8BitDo Dogbone Modkit,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,
03000000008000000210000000000000,8BitDo F30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000003512000011ab000000000000,8BitDo F30 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -16,9 +18,9 @@
03000000801000000900000000000000,8BitDo F30 Arcade Stick,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001038000000000000,8BitDo F30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
-03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,guide:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
-03000000c82d00005106000000000000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Windows,
-03000000c82d00000151000000000000,8BitDo M30 ModKit,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00000650000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00005106000000000000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,guide:b2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
+03000000c82d00000151000000000000,8BitDo M30 Modkit,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000310000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00002028000000000000,8BitDo N30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00008010000000000000,8BitDo N30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
@@ -35,13 +37,15 @@
03000000c82d00002038000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000751000000000000,8BitDo P30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000360000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000361000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00000660000000000000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00002867000000000000,8BitDo S30 Modkit,a:b0,b:b1,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b8,lefttrigger:b9,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000130000000000000,8BitDo SF30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
+03000000102800000900000000000000,8Bitdo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d000021ab000000000000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
-03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
-03000000c82d00003028000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
+03000000c82d00003028000000000000,8Bitdo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000030000000000000,8BitDo SN30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00001290000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d000020ab000000000000,8BitDo SN30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Windows,
@@ -54,15 +58,14 @@
03000000c82d00000121000000000000,8BitDo SN30 Pro for Android,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00000260000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00000261000000000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
-03000000c82d00000031000000000000,8BitDo Wireless Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000a00500003232000000000000,8Bitdo Zero,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000c82d00001890000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Windows,
03000000c82d00003032000000000000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Windows,
-03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Windows,
03000000d81d00000e00000000000000,AC02,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,rightx:a2,righty:a5,start:b8,x:b4,y:b5,platform:Windows,
030000008f0e00001200000000000000,Acme GA02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000c01100000355000000000000,Acrux,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000fa190000f0ff000000000000,Acteck AGJ 3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-030000006d0400000bc2000000000000,Action Pad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows,
+030000006d0400000bc2000000000000,Action,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:a5~,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:a2~,start:b8,x:b3,y:b4,platform:Windows,
03000000d1180000402c000000000000,ADT1,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a3,rightx:a2,righty:a5,x:b3,y:b4,platform:Windows,
030000006f0e00001301000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e00001302000000000000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -78,17 +81,20 @@
030000006f0e00001402000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000100000008200000000000000,Akishop Customs PS360,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000007c1800000006000000000000,Alienware Dual Compatible PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows,
03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows,
03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
03000000869800002500000000000000,Astro C40 TR PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000a30c00002700000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000a30c00002800000000000000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000ef0500000300000000000000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
03000000fd0500000230000000000000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows,
-03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000e4150000103f000000000000,Batarang,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000d6200000e557000000000000,Batarang PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,platform:Windows,
030000006f0e00003201000000000000,Battlefield 4 PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000ad1b000001f9000000000000,BB 070,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -96,7 +102,7 @@
03000000bc2000005250000000000000,Beitong G3,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a3,righty:a4,start:b15,x:b3,y:b4,platform:Windows,
030000000d0500000208000000000000,Belkin Nostromo N40,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000bc2000006012000000000000,Betop 2126F,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000bc2000000055000000000000,Betop BFM Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
+03000000bc2000000055000000000000,Betop BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000bc2000006312000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006321000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000bc2000006412000000000000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
@@ -109,11 +115,9 @@
030000006b1400000209000000000000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b1400000055000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000006b1400000103000000000000,Bigben PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
-03000000380700008232000000000000,Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000200e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000210e000000000000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-0300000066f700000500000000000000,BrutalLegendTest,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
-03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
+03000000d81d00000b00000000000000,Buffalo BSGP1601 Series,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,platform:Windows,
030000006d04000042c2000000000000,ChillStream,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000e82000006058000000000000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000457500000401000000000000,Cobra,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -123,29 +127,28 @@
03000000d8140000cefa000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000260900008888000000000000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a4,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Windows,
030000003807000002cb000000000000,Cyborg,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-03000000a306000022f6000000000000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000a306000022f6000000000000,Cyborg V.3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000f806000000a3000000000000,DA Leader,a:b7,b:b6,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b8,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:b3,rightx:a2,righty:a3,start:b12,x:b4,y:b5,platform:Windows,
030000001a1c00000001000000000000,Datel,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000451300000830000000000000,Defender Game Racer X7,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000007d0400000840000000000000,Destroyer Tiltpad,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b1,b:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,x:b0,y:b3,platform:Windows,
-03000000c0160000e105000000000000,Dual,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000791d00000103000000000000,Dual Box WII,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-030000007c1800000006000000000000,Dual Compat,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
+03000000791d00000103000000000000,Dual Box Wii,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000c0160000e105000000000000,Dual Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
030000004f040000070f000000000000,Dual Power,a:b8,b:b9,back:b4,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,leftshoulder:b13,leftstick:b6,lefttrigger:b14,leftx:a0,lefty:a1,rightshoulder:b12,rightstick:b7,righttrigger:b15,start:b5,x:b10,y:b11,platform:Windows,
030000004f04000012b3000000000000,Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
030000004f04000020b3000000000000,Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
-03000000bd12000002e0000000000000,Dual USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
+03000000bd12000002e0000000000000,Dual Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
03000000ff1100003133000000000000,DualForce,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b1,platform:Windows,
030000008f0e00000910000000000000,DualShock 2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
03000000317300000100000000000000,DualShock 3,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000006f0e00003001000000000000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000fc0400000250000000000000,Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
-030000006e0500000a20000000000000,Elecom DUX60 MMO Gamepad,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
+030000006e0500000a20000000000000,Elecom DUX60 MMO,a:b2,b:b3,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b14,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b15,righttrigger:b13,rightx:a3,righty:a4,start:b20,x:b0,y:b1,platform:Windows,
03000000b80500000410000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
-030000006e0500000520000000000000,Elecom P301U,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000520000000000000,Elecom P301U PlayStation Controller Adapter,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
03000000411200004450000000000000,Elecom U1012,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
-030000006e0500000320000000000000,Elecom U3613M (DInput),a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
+030000006e0500000320000000000000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
030000006e0500000e20000000000000,Elecom U3912T,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
030000006e0500000f20000000000000,Elecom U4013S,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Windows,
030000006e0500001320000000000000,Elecom U4113,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -156,52 +159,42 @@
03000000242f000000b7000000000000,ESM 9110,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Windows,
03000000101c0000181c000000000000,Essential,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b4,leftx:a1,lefty:a0,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000008f0e00000f31000000000000,EXEQ,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
-03000000341a00000108000000000000,EXEQ RF USB Gamepad 8206,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000341a00000108000000000000,EXEQ RF Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000790000003018000000000000,F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000242f00003900000000000000,F300 Elite,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000006f0e00008401000000000000,Faceoff Deluxe Audio Wired Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000006f0e00008001000000000000,Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00008401000000000000,Faceoff Deluxe Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00008001000000000000,Faceoff Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000021000000090000000000000,FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Windows,
0300000011040000c600000000000000,FC801,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
-030000004f04000008d0000000000000,Ferrari 150,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000852100000201000000000000,FF GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
-030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700002847000000000000,FightPad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700002847000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000ad1b000028f0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000ad1b00002ef0000000000000,Fightpad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000ad1b000038f0000000000000,Fightpad TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
-03000000380700001847000000000000,FightStick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
-03000000380700008031000000000000,FightStick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008731000000000000,FightStick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000003807000038b7000000000000,FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
-78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700001847000000000000,Fightstick,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700008031000000000000,Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000f806000001a3000000000000,Firestorm,a:b9,b:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b0,leftstick:b10,lefttrigger:b1,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b12,x:b8,y:b4,platform:Windows,
03000000b50700000399000000000000,Firestorm 2,a:b2,b:b4,back:b10,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,righttrigger:b9,start:b11,x:b3,y:b5,platform:Windows,
03000000b50700001302000000000000,Firestorm D3,a:b0,b:b2,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,x:b1,y:b3,platform:Windows,
03000000b40400001024000000000000,Flydigi Apex,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000151900004000000000000000,Flydigi Vader 2,a:b11,b:b10,back:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,leftstick:b1,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b0,righttrigger:b4,rightx:a3,righty:a4,start:b2,x:b9,y:b8,platform:Windows,
03000000b40400001124000000000000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b4,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b2,y:b3,platform:Windows,
+03000000b40400001224000000000000,Flydigi Vader 2 Pro,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,paddle3:b17,paddle4:b18,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
030000008305000000a0000000000000,G08XU,a:b0,b:b1,back:b4,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b5,x:b2,y:b3,platform:Windows,
03000000ac0500002d02000000000000,G2U,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
-03000000790000002201000000000000,Game Controller for PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
0300000066f700000100000000000000,Game VIB Joystick,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Windows,
-03000000341a000005f7000000000000,GameCube,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows,
-03000000430b00000500000000000000,GameCube,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows,
-03000000790000004718000000000000,GameCube,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
-03000000260900002625000000000000,Gamecube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,
+03000000260900002625000000000000,GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,lefttrigger:a4,leftx:a0,lefty:a1,righttrigger:a5,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Windows,
+03000000341a000005f7000000000000,GameCube Controller,a:b2,b:b3,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b1,y:b0,platform:Windows,
+03000000430b00000500000000000000,GameCube Controller,a:b0,b:b2,dpdown:b10,dpleft:b8,dpright:b9,dpup:b11,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a3,rightx:a5,righty:a2,start:b7,x:b1,y:b3,platform:Windows,
+03000000790000004718000000000000,GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
03000000790000004618000000000000,GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
030000008f0e00000d31000000000000,Gamepad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000280400000140000000000000,GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000280400000140000000000000,GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000ac0500003d03000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000ac0500004d04000000000000,GameSir,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
-030000000d0f00001110000000000000,GameStick Bluetooth Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000ffff00000000000000000000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000c01100000140000000000000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000b62500000100000000000000,Gametel GT004 01,a:b3,b:b0,dpdown:b10,dpleft:b9,dpright:b8,dpup:b11,leftshoulder:b4,rightshoulder:b5,start:b7,x:b1,y:b2,platform:Windows,
030000008f0e00001411000000000000,Gamo2 Divaller PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -211,15 +204,15 @@
030000008305000031b0000000000000,Genius Maxfire Blaze 3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000451300000010000000000000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000005c1a00003330000000000000,Genius MaxFire Grandias 12V,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
-03000000300f00000b01000000000000,GGE909 Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-03000000f0250000c283000000000000,Gioteck,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000300f00000b01000000000000,GGE909 Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c283000000000000,Gioteck PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000f025000021c1000000000000,Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000f0250000c383000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c383000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000f0250000c483000000000000,Gioteck VX2 PlayStation Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000004f04000026b3000000000000,GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
0300000079000000d418000000000000,GPD Win,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c6240000025b000000000000,GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000007d0400000540000000000000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000007d0400000540000000000000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000007d0400000340000000000000,Gravis G44011 Xterminator,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a2,start:b9,x:b3,y:b4,platform:Windows,
030000008f0e00000610000000000000,GreenAsia,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a5,righty:a2,start:b11,x:b3,y:b0,platform:Windows,
03000000ac0500006b05000000000000,GT2a,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
@@ -227,33 +220,40 @@
03000000fd0500003902000000000000,Hammerhead,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,rightshoulder:b7,rightstick:b5,righttrigger:b9,start:b10,x:b0,y:b1,platform:Windows,
03000000fd0500002a26000000000000,Hammerhead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b0,y:b1,platform:Windows,
03000000fd0500002f26000000000000,Hammerhead FX,a:b4,b:b5,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b1,y:b2,platform:Windows,
-030000000d0f00004900000000000000,Hatsune Miku Sho Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00004900000000000000,Hatsune Miku Sho PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000001008000001e1000000000000,Havit HV G60,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b0,platform:Windows,
030000000d0f00000c00000000000000,HEXT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d81400000862000000000000,HitBox Edition Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
03000000632500002605000000000000,HJD X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
030000000d0f00000a00000000000000,Hori DOA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00005100000000000000,Hori Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00008600000000000000,Hori Fighting Commander,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f0000ba00000000000000,Hori Fighting Commander,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00008500000000000000,Hori Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002500000000000000,Hori Fighting Commander 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00002d00000000000000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00005100000000000000,Hori Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00001000000000000000,Hori Fighting Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000f0d00000010000000000000,Hori Fighting Stick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00003200000000000000,Hori Fighting Stick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f0000c000000000000000,Hori Fighting Stick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000000d0f00000d00000000000000,Hori Fighting Stick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
-030000000d0f00003701000000000000,Hori Fighting Stick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows,
-030000000d0f00004000000000000000,Hori Fighting Stick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00002100000000000000,Hori Fighting Stick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008400000000000000,Hori Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00001000000000000000,Hori Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000f0d00000010000000000000,Hori Fightstick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00003200000000000000,Hori Fightstick 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000c000000000000000,Hori Fightstick 4,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000000d0f00000d00000000000000,Hori Fightstick EX2,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
+030000000d0f00003701000000000000,Hori Fightstick Mini,a:b1,b:b0,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Windows,
+030000000d0f00004000000000000000,Hori Fightstick Mini 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b4,rightshoulder:b7,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008700000000000000,Hori Fightstick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00008800000000000000,Hori Fightstick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,platform:Windows,
+030000000d0f00002100000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002700000000000000,Hori Fightstick V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f0000a000000000000000,Hori Grip TAC4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b13,x:b0,y:b3,platform:Windows,
030000000d0f00000101000000000000,Hori Mini Hatsune Miku FT,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00005400000000000000,Hori Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00000900000000000000,Hori Pad 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00004d00000000000000,Hori Pad A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00003801000000000000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Windows,
-030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00009200000000000000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f00002301000000000000,Hori PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000000d0f00001100000000000000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,rightstick:b11,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00002600000000000000,Hori Real Arcade Pro 3P,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00004b00000000000000,Hori Real Arcade Pro 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -276,7 +276,6 @@
03000000ad1b000002f5000000000000,Hori Real Arcade Pro VX,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b07,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b08,righttrigger:b11,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Windows,
030000000d0f00009c00000000000000,Hori TAC Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f0000c900000000000000,Hori Taiko Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f00002301000000000000,Hori Wired PS4 Controller Light,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000000d0f0000c100000000000000,Horipad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00006400000000000000,Horipad 3TP,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000000d0f00001300000000000000,Horipad 3W,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -290,24 +289,25 @@
030000000d0f00006700000000000000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000000d0f0000dc00000000000000,Horipad Switch,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000008f0e00001330000000000000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Windows,
-03000000d81d00000f00000000000000,iBUFFALO BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000d81d00001000000000000000,iBUFFALO BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000790000004e95000000000000,Hyperkin N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b7,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a5,righty:a2,start:b9,platform:Windows,
+03000000d81d00000f00000000000000,iBuffalo BSGP1204 Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000d81d00001000000000000000,iBuffalo BSGP1204P Series,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000005c0a00000285000000000000,iDroidCon,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b6,platform:Windows,
-03000000696400006964000000000000,iDroidCon Bluetooth Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000696400006964000000000000,iDroidCon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000b50700001403000000000000,Impact Black,a:b2,b:b3,back:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
-030000006f0e00002401000000000000,Injustice FightStick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00002401000000000000,Injustice Fightstick PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000830500005130000000000000,InterAct ActionPad,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
03000000fd0500005302000000000000,InterAct ProPad,a:b3,b:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,x:b0,y:b1,platform:Windows,
03000000ac0500002c02000000000000,Ipega Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000491900000204000000000000,Ipega PG9023,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000491900000304000000000000,Ipega PG9087 - Bluetooth Gamepad,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
+03000000491900000304000000000000,Ipega PG9087,+righty:+a5,-righty:-a4,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,start:b11,x:b3,y:b4,platform:Windows,
030000007e0500000620000000000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Windows,
030000007e0500000720000000000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Windows,
03000000bd12000003c0000000000000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000250900000017000000000000,Joypad to USB Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,
+03000000250900000017000000000000,Joypad to Adapter,a:b2,b:b1,back:b9,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b8,x:b3,y:b0,platform:Windows,
03000000ff1100004033000000000000,JPD FFB,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a2,start:b15,x:b3,y:b0,platform:Windows,
-03000000242f00002d00000000000000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000242f00008a00000000000000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
+03000000242f00002d00000000000000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
+03000000242f00008a00000000000000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
03000000c4100000c082000000000000,KADE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000828200000180000000000000,Keio,a:b4,b:b5,back:b8,leftshoulder:b2,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b1,platform:Windows,
03000000790000000200000000000000,King PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
@@ -320,11 +320,11 @@
030000006d04000011c2000000000000,Logitech Cordless Wingman,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b5,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b2,righttrigger:b7,rightx:a3,righty:a4,x:b4,platform:Windows,
030000006d04000016c2000000000000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d0400001dc2000000000000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d0400001ec2000000000000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000006d04000018c2000000000000,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000006d04000019c2000000000000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000006d0400001ac2000000000000,Logitech Precision Gamepad,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006d0400001ac2000000000000,Logitech Precision,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
030000006d04000009c2000000000000,Logitech WingMan,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
030000006d0400000ac2000000000000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows,
03000000380700005645000000000000,Lynx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -333,15 +333,20 @@
03000000380700008532000000000000,Mad Catz Arcade Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000380700006352000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000380700006652000000000000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700005032000000000000,Mad Catz FightPad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700005082000000000000,Mad Catz FightPad PRO PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008433000000000000,Mad Catz FightStick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008483000000000000,Mad Catz FightStick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008134000000000000,Mad Catz FightStick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700008184000000000000,Mad Catz FightStick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005032000000000000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700005082000000000000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000003807000038b7000000000000,Mad Catz Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700008433000000000000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008483000000000000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008134000000000000,Mad Catz Fightstick TE2 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b4,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008184000000000000,Mad Catz Fightstick TE2 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,leftstick:b10,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+78696e70757403000000000000000000,Mad Catz Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000380700006252000000000000,Mad Catz Micro CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000380700001888000000000000,Mad Catz SFIV FightStick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000380700008081000000000000,Mad Catz SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008232000000000000,Mad Catz PlayStation Brawlpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700008731000000000000,Mad Catz PlayStation Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000003807000056a8000000000000,Mad Catz PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000380700001888000000000000,Mad Catz SFIV Fightstick PS3,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000380700008081000000000000,Mad Catz SFV Arcade Fightstick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000380700008034000000000000,Mad Catz TE2 PS3 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
@@ -352,12 +357,13 @@
03000000242f00007300000000000000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
0300000079000000d218000000000000,Mayflash Magic NS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d620000010a7000000000000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000008f0e00001030000000000000,Mayflash USB Adapter for original Sega Saturn controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows,
+030000008f0e00001030000000000000,Mayflash Sega Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,rightshoulder:b2,righttrigger:b7,start:b9,x:b3,y:b4,platform:Windows,
0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
-03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000790000002418000000000000,Mega Drive,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows,
-0300000079000000ae18000000000000,Mega Drive,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
-03000000c0160000990a000000000000,Mega Drive,a:b0,b:b1,leftx:a0,lefty:a1,righttrigger:b2,start:b3,platform:Windows,
+03000000790000000018000000000000,Mayflash WiiU Pro Adapter,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000002418000000000000,Mega Drive Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b2,start:b9,x:b3,y:b4,platform:Windows,
+0300000079000000ae18000000000000,Mega Drive Controller,a:b0,b:b1,back:b7,dpdown:b14,dpleft:b15,dpright:b13,dpup:b2,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
+03000000c0160000990a000000000000,Mega Drive Controller,a:b0,b:b1,leftx:a0,lefty:a1,righttrigger:b2,start:b3,platform:Windows,
+030000005e0400002800000000000000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Windows,
030000005e0400000300000000000000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
030000005e0400000700000000000000,Microsoft SideWinder,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
030000005e0400000e00000000000000,Microsoft SideWinder Freestyle Pro,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b8,x:b3,y:b4,platform:Windows,
@@ -365,8 +371,9 @@
03000000280d00000202000000000000,Miller Lite Cantroller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b5,x:b2,y:b3,platform:Windows,
030000005b1c00002500000000000000,Mini,a:b3,b:b4,back:b7,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b6,x:b0,y:b1,platform:Windows,
03000000ad1b000023f0000000000000,MLG,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a6,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
-03000000ad1b00003ef0000000000000,MLG FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
-03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ad1b00003ef0000000000000,MLG Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b8,rightshoulder:b5,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700006382000000000000,MLG PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000ffff00000000000000000000,Mocute M053,a:b3,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b11,leftstick:b7,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b6,righttrigger:b4,rightx:a3,righty:a4,start:b8,x:b1,y:b0,platform:Windows,
03000000d6200000e589000000000000,Moga 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000007162000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000d6200000ad0d000000000000,Moga Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -382,7 +389,8 @@
030000006b140000100d000000000000,Nacon Revolution Infinity PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b140000080d000000000000,Nacon Revolution Unlimited Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000bd12000001c0000000000000,Nebular,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-03000000eb0300000000000000000000,NeGcon USB Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows,
+03000000eb0300000000000000000000,NeGcon Adapter,a:a2,b:b13,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,lefttrigger:a4,leftx:a1,righttrigger:b11,start:b3,x:a3,y:b12,platform:Windows,
+0300000092120000474e000000000000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Windows,
0300000038070000efbe000000000000,NEO SE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000921200004b46000000000000,NES 2 port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Windows,
03000000000f00000100000000000000,NES Controller,a:b1,b:b0,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
@@ -392,48 +400,51 @@
030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Windows,
03000000050b00000045000000000000,Nexus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Windows,
03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
-030000007e0500001920000000000000,Nintendo Switch N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows,
+030000007e0500001920000000000000,Nintendo Switch N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Windows,
030000007e0500001720000000000000,Nintendo Switch Online Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000000d0500000308000000000000,Nostromo N45,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Windows,
-03000000d620000013a7000000000000,NSW wired controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000550900001472000000000000,NVIDIA Controller v01.04,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
+03000000550900001472000000000000,NVIDIA Controller,a:b11,b:b10,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b7,leftstick:b5,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b4,righttrigger:a5,rightx:a3,righty:a6,start:b3,x:b9,y:b8,platform:Windows,
03000000550900001072000000000000,NVIDIA Shield,a:b9,b:b8,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b3,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b2,righttrigger:a4,rightx:a2,righty:a5,start:b0,x:b7,y:b6,platform:Windows,
-030000005509000000b4000000000000,NVIDIA Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005509000000b4000000000000,NVIDIA Virtual,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000120c00000288000000000000,Nyko Air Flo Xbox Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
030000004b120000014d000000000000,Nyko Airflo,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,platform:Windows,
03000000d62000001d57000000000000,Nyko Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,
+03000000791d00000900000000000000,Nyko Playpad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000782300000a10000000000000,Onlive Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,platform:Windows,
030000000d0f00000401000000000000,Onyx,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000008916000001fd000000000000,Onza CE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a3,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000008916000000fd000000000000,Onza TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000006d57000000000000,OPP PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Windows,
-03000000362800000100000000000000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
-03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+03000000362800000100000000000000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,x:b1,y:b2,platform:Windows,
+03000000120c0000f60e000000000000,P4 Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,platform:Windows,
+03000000790000002201000000000000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000006f0e00008501000000000000,PDP Fightpad Pro,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b0,platform:Windows,
-030000006f0e00000901000000000000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000901000000000000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+03000000e30500009605000000000000,PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
030000004c050000da0c000000000000,PlayStation Classic Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
-03000000d9040000160f000000000000,Playstation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000632500002306000000000000,PlayStation Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
+03000000f0250000c183000000000000,PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d9040000160f000000000000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000004c0500003713000000000000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000d620000013a7000000000000,PowerA Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d04000084ca000000000000,Precision,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
03000000d62000009557000000000000,Pro Elite PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000c62400001a53000000000000,Pro Ex Mini,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000d62000009f31000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d6200000c757000000000000,Pro Ex mini PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000110e000000000000,Pro5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
-03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
030000008f0e00007530000000000000,PS1 Controller,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b1,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000100800000300000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000250900000088000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000250900006888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000250900008888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000666600006706000000000000,PS2 Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Windows,
030000006b1400000303000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000009d0d00001330000000000000,PS2 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000250900000088000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
-03000000250900006888000000000000,PS2 Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b6,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
03000000120a00000100000000000000,PS3 Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000120c00001307000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000120c00001cf1000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -449,8 +460,6 @@
030000008f0e00000300000000000000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
030000008f0e00001431000000000000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000ba2200002010000000000000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Windows,
-030000003807000056a8000000000000,PS3 RF pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000100000008200000000000000,PS360 v1.66,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:h0.4,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
03000000120c00000807000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000111e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000120c0000121e000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -474,8 +483,7 @@
030000004c050000a00b000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows,
030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000ff000000cb01000000000000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
+030000004c050000e60c000000000000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows,
03000000830500005020000000000000,PSX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Windows,
03000000300f00000111000000000000,Qanba 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000300f00000211000000000000,Qanba 2P,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
@@ -489,23 +497,23 @@
03000000222c00000023000000000000,Qanba Obsidian Arcade Stick PS4,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000008a2400006682000000000000,R1 Mobile Controller,a:b3,b:b1,back:b7,leftx:a0,lefty:a1,start:b6,x:b4,y:b0,platform:Windows,
03000000086700006626000000000000,RadioShack,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
-030000009b2800002300000000000000,Raphnet Technologies 3DO USB Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
-030000009b2800006900000000000000,Raphnet Technologies 3DO USB Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
-030000009b2800000800000000000000,Raphnet Technologies Dreamcast USB Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows,
-030000009b2800003200000000000000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
-030000009b2800006000000000000000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
-030000009b2800001800000000000000,Raphnet Technologies Jaguar USB Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows,
-030000009b2800000200000000000000,Raphnet Technologies NES USB Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows,
-030000009b2800004300000000000000,Raphnet Technologies Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
-030000009b2800000500000000000000,Raphnet Technologies Saturn Adapter 2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
-030000009b2800000300000000000000,Raphnet Technologies SNES USB Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
-030000009b2800005600000000000000,Raphnet Technologies SNES USB Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
-030000009b2800005700000000000000,Raphnet Technologies SNES USB Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
-030000009b2800001e00000000000000,Raphnet Technologies Vectrex USB Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows,
-030000009b2800002b00000000000000,Raphnet Technologies Wii Classic USB Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
-030000009b2800002c00000000000000,Raphnet Technologies Wii Classic USB Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800002300000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
+030000009b2800006900000000000000,Raphnet 3DO Adapter,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b2,start:b3,platform:Windows,
+030000009b2800000800000000000000,Raphnet Dreamcast Adapter,a:b2,b:b1,dpdown:b5,dpleft:b6,dpright:b7,dpup:b4,lefttrigger:a2,leftx:a0,righttrigger:a3,righty:a1,start:b3,x:b10,y:b9,platform:Windows,
+030000009b2800003200000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000009b2800006000000000000000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:+a5,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:+a2,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Windows,
+030000009b2800001800000000000000,Raphnet Jaguar Adapter,a:b2,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b0,righttrigger:b10,start:b3,x:b11,y:b12,platform:Windows,
+030000009b2800000200000000000000,Raphnet NES Adapter,a:b7,b:b6,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,start:b4,platform:Windows,
+030000009b2800004300000000000000,Raphnet Saturn,a:b0,b:b1,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
+030000009b2800000500000000000000,Raphnet Saturn Adapter 2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+030000009b2800000300000000000000,Raphnet SNES Adapter,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+030000009b2800005600000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800005700000000000000,Raphnet SNES Adapter,a:b1,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800001e00000000000000,Raphnet Vectrex Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a1,lefty:a2,x:b2,y:b3,platform:Windows,
+030000009b2800002b00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
+030000009b2800002c00000000000000,Raphnet Wii Classic Adapter,a:b1,b:b4,back:b2,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a3,righty:a4,start:b3,x:b0,y:b5,platform:Windows,
03000000321500000003000000000000,Razer Hydra,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-03000000321500000204000000000000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000204000000000000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000104000000000000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000010000000000000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
@@ -514,14 +522,14 @@
03000000321500000a10000000000000,Razer Raiju TE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000410000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000910000000000000,Razer Raiju UE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-03000000321500000011000000000000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000321500000011000000000000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000790000001100000000000000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
03000000830500006020000000000000,Retro Controller,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b8,righttrigger:b9,start:b7,x:b2,y:b3,platform:Windows,
-03000000bd12000013d0000000000000,Retrolink USB Sega Saturn Classic,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,
-03000000bd12000015d0000000000000,Retrolink USB Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
-0300000000f000000300000000000000,RetroUSB.com RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
-0300000000f00000f100000000000000,RetroUSB.com Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
+03000000bd12000013d0000000000000,Retrolink Sega Saturn Classic Controller,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,lefttrigger:b6,rightshoulder:b2,righttrigger:b7,start:b8,x:b3,y:b4,platform:Windows,
+03000000bd12000015d0000000000000,Retrolink Super SNES Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
+0300000000f000000300000000000000,RetroUSB RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
+0300000000f00000f100000000000000,RetroUSB Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Windows,
03000000830500000960000000000000,Revenger,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b5,platform:Windows,
030000006b140000010d000000000000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000006b140000020d000000000000,Revolution Pro Controller 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -533,25 +541,23 @@
030000006f0e00002801000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000004f04000001d0000000000000,Rumble Force,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
-030000004f04000003d0000000000000,Run N Drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000004f04000009d0000000000000,Run N Drive,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000008916000000fe000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c6240000045d000000000000,Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000a30600001af5000000000000,Saitek Cyborg,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000a306000023f6000000000000,Saitek Cyborg V.1 Game pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000300f00001201000000000000,Saitek Dual Analog Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000a306000023f6000000000000,Saitek Cyborg V.1 Game,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001201000000000000,Saitek Dual Analog,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
03000000a30600000701000000000000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Windows,
-03000000a30600000cff000000000000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows,
+03000000a30600000cff000000000000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b0,y:b1,platform:Windows,
03000000a30600000d5f000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
03000000a30600000dff000000000000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b8,x:b0,y:b3,platform:Windows,
03000000a30600000c04000000000000,Saitek P2900,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
03000000a306000018f5000000000000,Saitek P3200,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000300f00001001000000000000,Saitek P480 Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000300f00001001000000000000,Saitek P480 Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
03000000a30600000901000000000000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b8,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b5,rightx:a3,righty:a2,x:b0,y:b1,platform:Windows,
03000000a30600000b04000000000000,Saitek P990,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
-03000000a30600002106000000000000,Saitek PS1000,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000a306000020f6000000000000,Saitek PS2700,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
-03000000300f00001101000000000000,Saitek Rumble Pad,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000a30600002106000000000000,Saitek PS1000 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000a306000020f6000000000000,Saitek PS2700 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Windows,
+03000000300f00001101000000000000,Saitek Rumble,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
03000000e804000000a0000000000000,Samsung EIGP20,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000c01100000252000000000000,Sanwa Easy Grip,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
03000000c01100004350000000000000,Sanwa Micro Grip P3,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,x:b3,y:b2,platform:Windows,
@@ -560,25 +566,27 @@
03000000c01100004450000000000000,Sanwa Online Grip,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b11,righttrigger:b9,rightx:a3,righty:a2,start:b14,x:b3,y:b4,platform:Windows,
03000000730700000401000000000000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Windows,
03000000830500006120000000000000,Sanwa Smart Grip II,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,x:b1,y:b3,platform:Windows,
-03000000c01100000051000000000000,Satechi Bluetooth Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000c01100000051000000000000,Satechi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
030000004f04000028b3000000000000,Score A,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000952e00002577000000000000,Scuf PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000a30c00002500000000000000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Windows,
03000000a30c00002400000000000000,Sega Mega Drive Mini 6B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Windows,
-0300000000050000289b000000000000,Sega Saturn Adapter 2,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
+0300000000050000289b000000000000,Sega Saturn Adapter,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,platform:Windows,
0300000000f000000800000000000000,Sega Saturn Controller,a:b1,b:b2,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b3,start:b0,x:b5,y:b6,platform:Windows,
03000000730700000601000000000000,Sega Saturn Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
03000000b40400000a01000000000000,Sega Saturn Controller,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Windows,
030000003b07000004a1000000000000,SFX,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Windows,
-03000000120c00001c1e000000000000,SnakeByte GamePad 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c00001c1e000000000000,SnakeByte 4S PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
0300000003040000c197000000000000,SNES Controller,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
03000000571d00002000000000000000,SNES Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
0300000081170000960a000000000000,SNES Controller,a:b4,b:b0,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b5,y:b1,platform:Windows,
03000000811700009d0a000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
030000008b2800000300000000000000,SNES Controller,a:b0,b:b4,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
03000000921200004653000000000000,SNES Controller,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Windows,
+03000000ff000000cb01000000000000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
03000000341a00000208000000000000,Speedlink 6555,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,platform:Windows,
03000000341a00000908000000000000,Speedlink 6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000380700001722000000000000,Speedlink Competition Pro,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,x:b2,y:b3,platform:Windows,
030000008f0e00000800000000000000,Speedlink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
@@ -592,11 +600,11 @@
03000000790000001c18000000000000,STK 7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000381000003014000000000000,Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000381000003114000000000000,Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-03000000380700003847000000000000,Street Fighter Fighting Stick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows,
+03000000380700003847000000000000,Street Fighter Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows,
030000001f08000001e4000000000000,Super Famicom Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Windows,
03000000790000000418000000000000,Super Famicom Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b33,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
-03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-030000000d0f0000f600000000000000,Switch Hori Pad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000d620000011a7000000000000,Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+030000000d0f0000f600000000000000,Switch Hori,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
03000000457500002211000000000000,Szmy Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000004f0400000ab1000000000000,T16000M,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b10,x:b2,y:b3,platform:Windows,
030000000d0f00007b00000000000000,TAC GEAR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
@@ -607,45 +615,46 @@
03000000c61100001000000000000000,Tencent Xianyou Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,x:b3,y:b4,platform:Windows,
03000000790000002601000000000000,TGZ,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
030000004f04000015b3000000000000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
-030000004f04000023b3000000000000,Thrustmaster Dual Trigger 3 in 1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
-030000004f0400000ed0000000000000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000023b3000000000000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f0400000ed0000000000000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000008d0000000000000,ThrustMaster Ferrari 150 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Windows,
030000004f04000004b3000000000000,Thrustmaster Firestorm Dual Power 3,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Windows,
+030000004f04000003d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b7,leftshoulder:a3,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:a4,rightstick:b11,righttrigger:b5,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+030000004f04000009d0000000000000,ThrustMaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
030000006d04000088ca000000000000,Thunderpad,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
-03000000666600000488000000000000,TigerGame PS/PS2 Game Controller Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
-030000004f04000007d0000000000000,TMini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
+03000000666600000488000000000000,TigerGame PlayStation Adapter,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+030000004f04000007d0000000000000,TMini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d62000006000000000000000,Tournament PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000c01100000055000000000000,Tronsmart,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000005f140000c501000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000b80500000210000000000000,Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
030000004f04000087b6000000000000,TWCS Throttle,dpdown:b8,dpleft:b9,dpright:b7,dpup:b6,leftstick:b5,lefttrigger:-a5,leftx:a0,lefty:a1,righttrigger:+a5,platform:Windows,
03000000411200000450000000000000,Twin Shock,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a4,start:b11,x:b3,y:b0,platform:Windows,
-03000000d90400000200000000000000,TwinShock PS2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000d90400000200000000000000,TwinShock PS2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-030000000b0400003065000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
-03000000242f00006e00000000000000,USB Game Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows,
-03000000300f00000701000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
-03000000341a00002308000000000000,USB Game Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000666600000188000000000000,USB Game Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
-03000000666600000288000000000000,USB Game Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
-030000006b1400000203000000000000,USB Game Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000790000000a00000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
-03000000b404000081c6000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
-03000000b50700001503000000000000,USB Game Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
-03000000bd12000012d0000000000000,USB Game Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
-03000000f0250000c183000000000000,USB Game Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
-03000000ff1100004133000000000000,USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+030000000b0400003065000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+03000000242f00006e00000000000000,USB Controller,a:b1,b:b4,back:b10,leftshoulder:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b7,rightx:a2,righty:a5,start:b11,x:b0,y:b3,platform:Windows,
+03000000300f00000701000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
+03000000341a00002308000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000666600000188000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+03000000666600000288000000000000,USB Controller,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
+030000006b1400000203000000000000,USB Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000790000000a00000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,platform:Windows,
+03000000b404000081c6000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b3,y:b0,platform:Windows,
+03000000b50700001503000000000000,USB Controller,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b0,y:b1,platform:Windows,
+03000000bd12000012d0000000000000,USB Controller,a:b0,b:b1,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Windows,
+03000000ff1100004133000000000000,USB Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
03000000632500002305000000000000,USB Vibration Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
03000000790000001a18000000000000,Venom,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000006f0e00000302000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
-030000006f0e00000702000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000302000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
+030000006f0e00000702000000000000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
0300000034120000adbe000000000000,vJoy Device,a:b0,b:b1,back:b15,dpdown:b6,dpleft:b7,dpright:b8,dpup:b5,guide:b16,leftshoulder:b9,leftstick:b13,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b14,righttrigger:b12,rightx:a3,righty:a4,start:b4,x:b2,y:b3,platform:Windows,
03000000120c0000ab57000000000000,Warrior Joypad JS083,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
030000007e0500003003000000000000,WiiU Pro,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,leftshoulder:b6,leftstick:b11,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b12,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
0300000032150000030a000000000000,Wildcat,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000ff02000000000000,Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
-030000005e040000ea02000000000000,Wireless Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
0300000032150000140a000000000000,Wolverine,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000002e160000efbe000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b10,rightshoulder:b5,righttrigger:b11,start:b7,x:b2,y:b3,platform:Windows,
03000000380700001647000000000000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
@@ -683,47 +692,51 @@
030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
+030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:-a2,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000fd02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e0000a802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000006f0e0000c802000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000c62400003a54000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
030000005e040000130b000000000000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
-03000000450c00002043000000000000,Xeox Gamepad SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
+03000000450c00002043000000000000,Xeox SL6556BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
030000006f0e00000300000000000000,XGear,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Windows,
03000000ac0500005b05000000000000,Xiaoji Gamesir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Windows,
-03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
+03000000172700004431000000000000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000786901006e70000000000000,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
03000000790000004f18000000000000,ZDT Android Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
-03000000120c0000101e000000000000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
+03000000120c0000101e000000000000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
# Mac OS X
-030000008f0e00000300000009010000,2In1 USB Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000008f0e00000300000009010000,2In1 Joystick,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000c82d00000031000001000000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c82d00000531000000020000,8BitDo Adapter 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000650000001000000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000c82d00005106000000010000,8BitDo M30 Gamepad,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00005106000000010000,8BitDo M30,a:b1,b:b0,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00001590000001000000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+030000003512000012ab000001000000,8BitDo NES30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d000012ab000001000000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00002028000000010000,8BitDo NES30,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
-030000003512000012ab000001000000,8BitDo NES30 Gamepad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000190000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000c82d00001290000001000000,8BitDo SN30 Gamepad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000c82d00004028000000010000,8Bitdo SN30 GamePad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00000660000000020000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000102800000900000000000000,8Bitdo SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00001290000001000000,8BitDo SN30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
+03000000c82d00004028000000010000,8Bitdo SN30,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000161000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a5,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000260000001000000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000c82d00000031000001000000,8BitDo Wireless Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000a00500003232000008010000,8Bitdo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000a00500003232000009010000,8Bitdo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c82d00001890000001000000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a31,start:b11,x:b4,y:b3,platform:Mac OS X,
-03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,
03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
@@ -738,7 +751,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000d8140000cecf000000000000,Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Mac OS X,
-03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000a306000022f6000001030000,Cyborg V3 Rumble Pad PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00008400000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00008500000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
@@ -747,17 +760,17 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000ad1b000001f9000000000000,Gamestop BB070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000c01100000140000000010000,GameStop PS4 Fun Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006f0e00000102000000000000,GameStop Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000007d0400000540000001010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006f0e00000102000000000000,GameStop Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000007d0400000540000001010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000280400000140000000020000,Gravis Gamepad Pro,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000008f0e00000300000007010000,GreenAsia USB Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X,
+030000008f0e00000300000007010000,GreenAsia Joystick,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Mac OS X,
030000000d0f00002d00000000100000,Hori Fighting Commander 3 Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00005f00000000000000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00005f00000000010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00005e00000000000000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00005e00000000010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00004d00000000000000,Hori Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000000d0f00009200000000010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00006e00000000010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00006600000000010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000000d0f00006600000000000000,Horipad FPS Plus 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
@@ -766,20 +779,20 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000830500006020000000000000,iBuffalo Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Mac OS X,
030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Mac OS X,
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Mac OS X,
-03000000242f00002d00000007010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000242f00002d00000007010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000006d04000019c2000000000000,Logitech Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000000020000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000000030000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006d04000016c2000014040000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d04000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d04000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d04000019c2000005030000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000006d04000018c2000000010000,Logitech RumblePad 2 USB,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000380700008483000000010000,Mad Catz FightStick TE S+ (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000016c2000000000000,Logitech F310,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000018c2000000000000,Logitech F510,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d04000019c2000005030000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006d0400001fc2000000000000,Logitech F710,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000006d04000018c2000000010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3~,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700005032000000010000,Mad Catz PS3 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700008433000000010000,Mad Catz PS3 Fightstick TE S+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700005082000000010000,Mad Catz PS4 Fightpad Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000380700008483000000010000,Mad Catz PS4 Fightstick TE S+,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000790000000600000007010000,Marvo GT-004,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000790000004418000000010000,Mayflash GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000242f00007300000000020000,Mayflash Magic NS,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Mac OS X,
@@ -787,22 +800,23 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000d620000010a7000003010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Mac OS X,
03000000790000000018000000010000,Mayflash Wii U Pro Controller Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
-03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
+03000000790000000018000000000000,Mayflash WiiU Pro Adapter,a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,platform:Mac OS X,
+030000005e0400002800000002010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Mac OS X,
030000005e0400002700000001010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Mac OS X,
-03000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
+03000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
03000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000c62400002b89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000632500007505000000020000,NEOGEO mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,
+03000000632500007505000000020000,NeoGeo mini PAD Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Mac OS X,
03000000921200004b46000003020000,NES 2-port Adapter,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b11,platform:Mac OS X,
030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Mac OS X,
-03000000d620000011a7000000020000,Nintendo Switch Core Plus Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000d620000011a7000010050000,Nintendo Switch PowerA Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000d620000011a7000000020000,Nintendo Switch Core Plus Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000d620000011a7000010050000,Nintendo Switch PowerA Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
030000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
-03000000550900001472000025050000,NVIDIA Controller v01.04,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
-030000006f0e00000901000002010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000550900001472000025050000,NVIDIA Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Mac OS X,
+030000006f0e00000901000002010000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
030000008f0e00000300000000000000,Piranha Xtreme PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Mac OS X,
-030000004c050000da0c000000010000,Playstation Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+030000004c050000da0c000000010000,PlayStation Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
030000004c0500003713000000010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000d62000006dca000000010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000100800000300000006010000,PS2 Adapter,a:b2,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
@@ -812,13 +826,13 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000004c050000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Mac OS X,
030000008916000000fd000000000000,Razer Onza TE,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-03000000321500000204000000010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000204000000010000,Razer Panthera PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000104000000010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000010000000010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000321500000011000000010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000321500000011000000010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
030000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
@@ -828,15 +842,15 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
030000006b140000010d000000010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000006b140000130d000000010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000c6240000fefa000000000000,Rock Candy Gamepad for PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000c6240000fefa000000000000,Rock Candy PS3,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
03000000730700000401000000010000,Sanwa PlayOnline Mobile,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Mac OS X,
03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,platform:Mac OS X,
-03000000b40400000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,
+03000000b40400000a01000000000000,Sega Saturn,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Mac OS X,
030000003512000021ab000000000000,SFC30 Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Mac OS X,
0300000000f00000f100000000000000,SNES RetroPort,a:b2,b:b3,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b5,rightshoulder:b7,start:b6,x:b0,y:b1,platform:Mac OS X,
030000004c050000e60c000000010000,Sony DualSense,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004c050000a00b000000000000,Sony DualShock 4 Adapter,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Mac OS X,
030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Mac OS X,
@@ -844,46 +858,51 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000381000002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,platform:Mac OS X,
05000000484944204465766963650000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
050000004e696d6275732b0000000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
+050000004e696d6275732b008b000000,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
05000000556e6b6e6f776e2048494400,SteelSeries Nimbus Plus,a:b0,b:b1,back:b15,dpdown:b11,dpleft:b13,dpright:b12,dpup:b10,guide:b16,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3~,start:b14,x:b2,y:b3,platform:Mac OS X,
03000000110100001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
03000000110100001714000020010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,start:b12,x:b2,y:b3,platform:Mac OS X,
03000000457500002211000000010000,SZMY Power PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004f04000015b3000000000000,Thrustmaster Dual Analog 3.2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Mac OS X,
-030000004f0400000ed0000000020000,ThrustMaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000004f0400000ed0000000020000,ThrustMaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
030000004f04000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Mac OS X,
-03000000bd12000015d0000000000000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000bd12000015d0000000010000,Tomee Retro Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
+03000000bd12000015d0000000000000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,platform:Mac OS X,
-030000006f0e00000302000025040000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
-030000006f0e00000702000003060000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006f0e00000302000025040000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
+030000006f0e00000702000003060000,Victrix PS4 Pro Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Mac OS X,
03000000791d00000103000009010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Mac OS X,
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,platform:Mac OS X,
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,platform:Mac OS X,
030000005e0400008e02000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000006f0e00000104000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000006f0e00000104000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+03000000c6240000045d000000000000,Xbox 360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e0400000a0b000000000000,Xbox Adaptive Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000005e040000050b000003090000,Xbox Elite Wireless Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000c62400003a54000000000000,Xbox One PowerA Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000050b000003090000,Xbox Elite Controller Series 2,a:b0,b:b1,back:b31,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b53,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000130b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000200b000011050000,Xbox One Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000d102000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000dd02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000e002000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
+030000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+030000005e040000e302000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
+030000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000c62400003a54000000000000,Xbox One PowerA Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
030000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
030000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-030000005e040000200b000011050000,Xbox Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-030000005e040000e002000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Mac OS X,
-030000005e040000e002000003090000,Xbox Wireless Controller,a:b0,b:b1,x:b3,y:b4,back:b16,guide:b15,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Mac OS X,
-030000005e040000ea02000000000000,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
-030000005e040000fd02000003090000,Xbox Wireless Controller,a:b0,b:b1,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
-03000000120c0000100e000000010000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
-03000000120c0000101e000000010000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
+03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
+03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
# Linux
+030000005e0400008e02000020010000,8BitDo Adapter,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000021000000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00001038000000010000,8Bitdo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000650000011010000,8BitDo M30,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,platform:Linux,
05000000c82d00005106000000010000,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:b7,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00001590000011010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00006528000000010000,8BitDo N30 Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
@@ -894,13 +913,15 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000c82d00000190000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+03000000c82d00000660000011010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00000660000000010000,8BitDo Pro 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00000060000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
+030000003512000012ab000010010000,8Bitdo SFC30,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux,
030000003512000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d000021ab000010010000,8BitDo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
-030000003512000012ab000010010000,8Bitdo SFC30 GamePad,a:b2,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b3,y:b0,platform:Linux,
-05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
-05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+05000000102800000900000000010000,8Bitdo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+05000000c82d00003028000000010000,8Bitdo SFC30,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000161000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,platform:Linux,
@@ -909,22 +930,20 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000c82d00006228000000010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
03000000c82d00000260000011010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
05000000c82d00000261000000010000,8BitDo SN30 Pro+,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
-05000000202800000900000000010000,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
-03000000c82d00000031000011010000,8BitDo Wireless Adapter (DInput),a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e0400008e02000020010000,8BitDo Wireless Adapter (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+05000000202800000900000000010000,8BitDo SNES30,a:b1,b:b0,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+05000000a00500003232000001000000,8Bitdo Zero,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
+05000000a00500003232000008010000,8Bitdo Zero,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
03000000c82d00001890000011010000,8BitDo Zero 2,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,platform:Linux,
+050000005e040000e002000030110000,8BitDo Zero 2,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
05000000c82d00003032000000010000,8BitDo Zero 2,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a2,righty:a3,start:b11,x:b4,y:b3,platform:Linux,
-050000005e040000e002000030110000,8BitDo Zero 2 (XInput),a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
-05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
-05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,platform:Linux,
03000000c01100000355000011010000,Acrux Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e00003901000013020000,Afterglow Prismatic Wired Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000100000008200000011010000,Akishop Customs PS360 v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000007c1800000006000010010000,Alienware Dual Compatible Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
-05000000491900000204000021000000,Amazon Fire Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000006f0e00003901000013020000,Afterglow Prismatic Controller 048-007-NA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00001302000000010000,Afterglow Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e00003901000020060000,Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000100000008200000011010000,Akishop Customs PS360,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000007c1800000006000010010000,Alienware Dual Compatible Game PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+05000000491900000204000021000000,Amazon Fire Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
@@ -933,17 +952,24 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000050b00000045000031000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
05000000050b00000045000040000000,Asus Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,platform:Linux,
03000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
+03000000503200000110000011010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
05000000503200000110000000000000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
-03000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux,
-05000000503200000210000000000000,Atari Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
+05000000503200000110000044010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
+05000000503200000110000046010000,Atari Classic Controller,a:b0,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b4,start:b3,x:b1,platform:Linux,
+03000000503200000210000000000000,Atari Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a2,righty:a3,start:b8,x:b2,y:b3,platform:Linux,
+03000000503200000210000011010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
+05000000503200000210000000000000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
+05000000503200000210000045010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
+05000000503200000210000046010000,Atari Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b2,platform:Linux,
03000000120c00000500000010010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
03000000ef0500000300000000010000,AxisPad,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b11,x:b0,y:b1,platform:Linux,
03000000c62400001b89000011010000,BDA MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000c21100000791000011010000,Be1 GC101 Controller 1.03,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000c31100000791000011010000,Be1 GC101 GAMEPAD 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000c31100000791000011010000,Be1 GC101 Controller 1.03,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000005e0400008e02000003030000,Be1 GC101 Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
05000000bc2000000055000001000000,BETOP AX1 BFM,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000bc2000006412000011010000,Betop Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b30,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000006b1400000209000011010000,Bigben,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000666600006706000000010000,Boom PSX to PC Converter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a2,righty:a3,start:b11,x:b3,y:b0,platform:Linux,
03000000120c0000200e000011010000,Brook Mars PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
@@ -952,11 +978,12 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000000b0400003365000000010000,Competition Pro,a:b0,b:b1,back:b2,leftx:a0,lefty:a1,start:b3,platform:Linux,
03000000260900008888000000010000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,platform:Linux,
-03000000a306000022f6000011010000,Cyborg V3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a306000022f6000011010000,Cyborg V3 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
030000004f04000004b3000010010000,Dual Power 2,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
030000006f0e00003001000001010000,EA Sports PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000c11100000191000011010000,EasySMX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000006e0500000320000010010000,Elecom U3613M,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
+030000006e0500000720000010010000,Elecom W01U,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Linux,
03000000430b00000300000000010000,EMS Production PS2 Adapter,a:b2,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a5,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000b40400001124000011010000,Flydigi Vader 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b12,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,paddle4:b17,rightshoulder:b7,rightstick:b13,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000151900004000000001000000,Flydigi Vader 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
@@ -969,26 +996,29 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000451300000010000010010000,Genius Maxfire Grandias 12,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000f0250000c183000010010000,Goodbetterbest Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
0300000079000000d418000000010000,GPD Win 2 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000007d0400000540000000010000,Gravis Eliminator GamePad Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-03000000280400000140000000010000,Gravis GamePad Pro USB,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000007d0400000540000000010000,Gravis Eliminator Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000280400000140000000010000,Gravis Pro,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000008f0e00000610000000010000,GreenAsia Electronics Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b9,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b10,righttrigger:b5,rightx:a3,righty:a2,start:b11,x:b3,y:b0,platform:Linux,
-030000008f0e00001200000010010000,GreenAsia USB Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
+030000008f0e00001200000010010000,GreenAsia Joystick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
0500000047532067616d657061640000,GS gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000f0250000c383000010010000,GT VX2,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-06000000adde0000efbe000002010000,Hidromancer Game Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+06000000adde0000efbe000002010000,Hidromancer Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d81400000862000011010000,HitBox PS3 PC Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,platform:Linux,
-03000000c9110000f055000011010000,HJC Game Gamepqd,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000c9110000f055000011010000,HJC Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000632500002605000010010000,HJDX,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000000d0f00000d00000000010000,Hori,a:b0,b:b6,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,rightshoulder:b7,start:b9,x:b1,y:b2,platform:Linux,
+030000000d0f00006d00000020010000,Hori EDGE 301,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:+a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:+a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000000d0f00008500000010010000,Hori Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f00008600000002010000,Hori Fighting Commander,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000000d0f00005f00000011010000,Hori Fighting Commander 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f00005e00000011010000,Hori Fighting Commander 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000000d0f00005001000009040000,Hori Fighting Commander OCTA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000000d0f00001000000011010000,Hori Fighting Stick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00005001000009040000,Hori Fighting Commander OCTA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000000d0f00001000000011010000,Hori Fightstick 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000ad1b000003f5000033050000,Hori Fightstick VX,+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b8,guide:b10,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
+030000000d0f00004d00000011010000,HORI Gem Pad 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000000d0f00003801000011010000,Hori PC Engine Mini Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,platform:Linux,
-030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000000d0f00009200000011010000,Hori Pokken Tournament DX Pro,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f0000aa00000011010000,Hori Real Arcade Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000000d0f00002200000011010000,Hori Real Arcade Pro 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f00006a00000011010000,Hori Real Arcade Pro 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
@@ -999,53 +1029,56 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000000d0f0000c100000011010000,Horipad S,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000341a000005f7000010010000,HuiJia GameCube Controller Adpater,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
+050000000d0f0000f600000001000000,HORIPAD Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000341a000005f7000010010000,HuiJia GameCube Controller Adapter,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,platform:Linux,
03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000006964726f69643a636f6e0000,idroidcon Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000b50700001503000010010000,Impact,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
-03000000d80400008200000003000000,IMS PCU0 Gamepad,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
+03000000d80400008200000003000000,IMS PCU0,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,platform:Linux,
03000000fd0500000030000000010000,InterAct GoPad I73000,a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,platform:Linux,
-0500000049190000020400001b010000,Ipega PG 9069 Bluetooth Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000632500007505000011010000,Ipega PG 9099 Bluetooth Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000fd0500002a26000000010000,InterAct HammerHead FX,a:b3,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b2,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b5,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b1,platform:Linux,
+0500000049190000020400001b010000,Ipega PG 9069,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b161,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000632500007505000011010000,Ipega PG 9099,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
0500000049190000030400001b010000,Ipega PG9099,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000491900000204000000000000,Ipega PG9118,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
-03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil Pad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
-03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000300f00001001000010010000,Jess Tech Dual Analog Rumble,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
+03000000300f00000b01000010010000,Jess Tech GGE909 PC Recoil,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000ba2200002010000001010000,Jess Technology Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
030000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
050000007e0500000620000001000000,Joy-Con (L),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b13,leftshoulder:b4,leftstick:b10,rightshoulder:b5,start:b8,x:b2,y:b3,platform:Linux,
030000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
050000007e0500000720000001000000,Joy-Con (R),+leftx:h0.2,+lefty:h0.4,-leftx:h0.8,-lefty:h0.1,a:b0,b:b1,back:b12,leftshoulder:b4,leftstick:b11,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
03000000bd12000003c0000010010000,Joypad Alpha Shock,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000242f00002d00000011010000,JYS Wireless Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000242f00008a00000011010000,JYS Wireless Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,
+03000000242f00002d00000011010000,JYS Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000242f00008a00000011010000,JYS Adapter,a:b1,b:b4,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b0,y:b3,platform:Linux,
030000006f0e00000103000000020000,Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d040000d1ca000000000000,Logitech Chillstream,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000016c2000010010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000016c2000011010000,Logitech Dual Action,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006d0400001ec2000019200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400001dc2000014400000,Logitech F310,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400001ec2000019200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d0400001ec2000020200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006d04000019c2000011010000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006d0400001fc2000005030000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,platform:Linux,
030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,
05000000380700006652000025010000,Mad Catz CTRLR,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700005032000011010000,Mad Catz FightPad PRO PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700005082000011010000,Mad Catz FightPad PRO PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008532000010010000,Mad Catz Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005032000011010000,Mad Catz Fightpad Pro PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700005082000011010000,Mad Catz Fightpad Pro PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,platform:Linux,
-03000000380700008034000011010000,Mad Catz fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008084000011010000,Mad Catz fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008433000011010000,Mad Catz FightStick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700008483000011010000,Mad Catz FightStick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000380700003847000090040000,Mad Catz Wired Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+03000000380700008034000011010000,Mad Catz Fightstick PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008084000011010000,Mad Catz Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008433000011010000,Mad Catz Fightstick TE S PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700008483000011010000,Mad Catz Fightstick TE S PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700001888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700003888000010010000,Mad Catz Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000380700001647000010040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000380700003847000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000380700001888000010010000,MadCatz PC USB Wired Stick 8818,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000380700003888000010010000,MadCatz PC USB Wired Stick 8838,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:a0,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000120c00000500000000010000,Manta Dualshock 2,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000790000004418000010010000,Mayflash GameCube Controller,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000790000004318000010010000,Mayflash GameCube Controller Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,platform:Linux,
@@ -1054,52 +1087,59 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000d620000010a7000011010000,Mayflash Magic NS,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000242f0000f700000001010000,Mayflash Magic S Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
0300000025090000e803000001010000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
-03000000780000000600000010010000,Microntek USB Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000780000000600000010010000,Microntek Joystick,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+030000005e0400002800000000010000,Microsoft Dual Strike,a:b3,b:b2,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,rightx:a0,righty:a1~,start:b5,x:b1,y:b0,platform:Linux,
030000005e0400000e00000000010000,Microsoft SideWinder,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,rightshoulder:b7,start:b8,x:b3,y:b4,platform:Linux,
-030000005e0400000700000000010000,Microsoft SideWinder Game Pad USB,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux,
+030000005e0400000700000000010000,Microsoft SideWinder Gamepad,a:b0,b:b1,back:b8,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Linux,
030000005e0400002700000000010000,Microsoft SideWinder Plug and Play,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,lefttrigger:b4,righttrigger:b5,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000056210000,Microsoft X-Box 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000004010000,Microsoft Xbox 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000062230000,Microsoft Xbox 360 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000000b000008040000,Microsoft Xbox One Elite 2 pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-050000005e040000050b000003090000,Microsoft Xbox One Elite 2 pad,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e040000e302000003020000,Microsoft Xbox One Elite pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000d102000001010000,Microsoft Xbox One pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000dd02000003020000,Microsoft Xbox One pad 2015,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000d102000003020000,Microsoft Xbox One pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000ea02000008040000,Microsoft Xbox One S pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008502000000010000,Microsoft Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e0400008502000000010000,Microsoft Xbox,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+030000005e0400008e02000001000000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.1,dpleft:h0.2,dpright:h0.8,dpup:h0.4,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000004010000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000056210000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000062230000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000001010000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000d102000003020000,Microsoft Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000dd02000003020000,Microsoft Xbox One 2015,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000e302000003020000,Microsoft Xbox One Elite,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000000b000008040000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000050b000003090000,Microsoft Xbox One Elite 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005e040000ea02000008040000,Microsoft Xbox One S,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400008902000021010000,Microsoft Xbox pad v2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
03000000030000000300000002000000,Miroof,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,platform:Linux,
050000004d4f435554452d3035335800,Mocute 053X,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
050000004d4f435554452d3035305800,Mocute 054X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000d6200000e589000001000000,Moga 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+05000000d6200000e589000001000000,Moga 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
-05000000d62000007162000001000000,Moga Pro 2 HID,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
+05000000d62000007162000001000000,Moga Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
03000000c62400002b89000011010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000c62400002a89000000010000,MOGA XP5A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000c62400001a89000000010000,MOGA XP5X Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000250900006688000000010000,MP8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
030000006b140000010c000010010000,Nacon GC 400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000000d0f00000900000010010000,Natec Genesis P44,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000004f1f00000800000011010000,Neogeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000004f1f00000800000011010000,NeoGeo PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+0300000092120000474e000000010000,NeoGeo X Arcade Stick,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b3,y:b2,platform:Linux,
03000000790000004518000010010000,Nexilux GameCube Controller Adapter,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Linux,
+050000004e696d6275732b0000000000,Nimbus Plus,a:b0,b:b1,back:b10,guide:b11,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,platform:Linux,
060000007e0500003713000000000000,Nintendo 3DS,a:b0,b:b1,back:b8,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
-060000007e0500000820000000000000,Nintendo Combined Joy-Cons (joycond),a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,platform:Linux,
03000000790000004618000010010000,Nintendo GameCube Controller Adapter,a:b1,b:b0,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a5~,righty:a2~,start:b9,x:b2,y:b3,platform:Linux,
+060000007e0500000620000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
+060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,a:b0,b:b1,back:b9,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
050000004c69632050726f20436f6e00,Nintendo Switch Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b9,b:b8,back:b5,leftshoulder:b2,leftstick:b6,leftx:a1,lefty:a0~,rightshoulder:b4,start:b0,x:b7,y:b10,platform:Linux,
-03000000d620000013a7000011010000,Nintendo Switch PowerA Wired Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+050000007e0500000620000001800000,Nintendo Switch Left Joy-Con,a:b16,b:b15,back:b4,leftshoulder:b6,leftstick:b12,leftx:a1,lefty:a0~,rightshoulder:b8,start:b9,x:b14,y:b17,platform:Linux,
+050000007e0500001920000001000000,Nintendo Switch N64 Controller,+rightx:b8,+righty:b2,-rightx:b3,-righty:b7,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux,
+050000007e0500001720000001000000,Nintendo Switch Online Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
+03000000d620000013a7000011010000,Nintendo Switch PowerA Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+03000000d620000011a7000011010000,Nintendo Switch PowerA Core Plus Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000007e0500000920000011810000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
050000007e0500000920000001800000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b12,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b13,righttrigger:b8,rightx:a2,righty:a3,start:b10,x:b3,y:b2,platform:Linux,
-050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0~,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,
-050000007e0500001720000001000000,Nintendo Switch SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b2,y:b3,platform:Linux,
+050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,
050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-030000000d0500000308000010010000,Nostromo n45 Dual Analog Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
+030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
05000000550900001472000001000000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
@@ -1107,33 +1147,35 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
19000000010000000100000001010000,odroidgo2 joypad,a:b1,b:b0,dpdown:b7,dpleft:b8,dpright:b9,dpup:b6,guide:b10,leftshoulder:b4,leftstick:b12,lefttrigger:b11,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b13,righttrigger:b14,start:b15,x:b2,y:b3,platform:Linux,
19000000010000000200000011000000,odroidgo2 joypad v11,a:b1,b:b0,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b12,leftshoulder:b4,leftstick:b14,lefttrigger:b13,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b15,righttrigger:b16,start:b17,x:b2,y:b3,platform:Linux,
03000000c0160000dc27000001010000,OnyxSoft Dual JoyDivision,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,platform:Linux,
-05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
-05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
-03000000830500005020000010010000,Padix Co. Ltd. Rockfire PSX/USB Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux,
-03000000790000001c18000011010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000006f0e0000b802000001010000,PDP Afterglow Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e0000b802000013020000,PDP Afterglow Wired Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+05000000362800000100000002010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
+05000000362800000100000003010000,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,platform:Linux,
+05000000362800000100000004010000,OUYA Controller,a:b0,b:b3,back:b14,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a3,righty:a4,start:b16,x:b1,y:b2,platform:Linux,
+03000000830500005020000010010000,Padix Rockfire PlayStation Bridge,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b2,y:b3,platform:Linux,
+03000000790000001c18000011010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000ff1100003133000010010000,PC Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e0000b802000001010000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000006f0e0000b802000013020000,PDP Afterglow Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00003101000000010000,PDP EA Sports Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e00008001000011010000,PDP Faceoff Wired Pro Controller for Nintendo Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00008001000011010000,PDP Faceoff Nintendo Switch Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e0000c802000012010000,PDP Kingdom Hearts Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000006f0e00008701000011010000,PDP Rock Candy Wired Controller for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000006f0e00000901000011010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000006f0e0000a802000023020000,PDP Wired Controller for Xbox One,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
-030000006f0e00008501000011010000,PDP Wired Fight Pad Pro for Nintendo Switch,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00008501000011010000,PDP Nintendo Switch Fightpad Pro,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00002801000011010000,PDP PS3 Rock Candy Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00008701000011010000,PDP Rock Nintendo Switch Candy Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+030000006f0e00000901000011010000,PDP Versus Fighting,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e0000a802000023020000,PDP Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000006f0e0000a702000023020000,PDP Xbox One Raven Black,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000004c050000da0c000011010000,Playstation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
-03000000d9040000160f000000010000,Playstation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+030000004c050000da0c000011010000,PlayStation Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
+03000000d9040000160f000000010000,PlayStation Controller Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
030000004c0500003713000011010000,PlayStation Vita,a:b1,b:b2,back:b8,dpdown:b13,dpleft:b15,dpright:b14,dpup:b12,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000c62400000053000000010000,PowerA,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c62400003a54000001010000,PowerA 1428124-01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c62400001a53000000010000,PowerA Mini Pro Ex,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d62000006dca000011010000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-03000000d62000000228000001010000,PowerA Wired Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000d62000000220000001010000,PowerA Wired Controller for Xbox One and Xbox Series S and X,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
03000000c62400001a58000001010000,PowerA Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000c62400001a54000001010000,PowerA Xbox One Mini Wired Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000d62000000220000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
+03000000d62000000228000001010000,PowerA Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c62400001a54000001010000,PowerA Xbox One Mini Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d040000d2ca000011010000,Precision Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
@@ -1141,6 +1183,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
+030000005f1400003102000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
050000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
@@ -1163,25 +1206,23 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000004c050000cc09000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
050000004c050000cc09000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
050000004c050000cc09000001800000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
-030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000ff000000cb01000010010000,PSP,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
+030000004c050000e60c000011010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
+050000004c050000e60c000000010000,PS5 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
03000000300f00001211000011010000,Qanba Arcade Joystick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,platform:Linux,
03000000300f00001210000010010000,Qanba Joystick Plus,a:b0,b:b1,back:b8,leftshoulder:b5,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b6,start:b9,x:b2,y:b3,platform:Linux,
-030000009b2800004200000001010000,Raphnet Technologies Dual NES to USB v2.0,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux,
-030000009b2800003200000001010000,Raphnet Technologies GC/N64 to USB v3.4,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
-030000009b2800006000000001010000,Raphnet Technologies GC/N64 to USB v3.6,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
-030000009b2800000300000001010000,raphnet.net 4nes4snes v1.5,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,
+030000009b2800000300000001010000,Raphnet 4nes4snes,a:b0,b:b4,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b1,y:b5,platform:Linux,
+030000009b2800004200000001010000,Raphnet Dual NES Adapter,a:b0,b:b1,back:b2,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b3,platform:Linux,
+030000009b2800003200000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
+030000009b2800006000000001010000,Raphnet GC and N64 Adapter,a:b0,b:b7,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,rightx:a3,righty:a4,start:b3,x:b1,y:b8,platform:Linux,
030000008916000001fd000024010000,Razer Onza Classic Edition,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000008916000000fd000024010000,Razer Onza Tournament Edition,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000321500000810000011010000,Razer Panthera Evo Arcade Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000204000011010000,Razer Panthera PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000104000011010000,Razer Panthera PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000810000011010000,Razer Panthera PS4 Evo Arcade Stick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000010000011010000,Razer Raiju,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000321500000710000000010000,Razer Raiju Tournament Edition Wired,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000321500000010000011010000,Razer Rainu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000321500000011000011010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+05000000321500000a10000001000000,Razer Raiju Tournament Edition,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000321500000011000011010000,Razer Raion PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
@@ -1191,42 +1232,48 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000790000001100000010010000,Retro Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,start:b9,x:b0,y:b3,platform:Linux,
0300000081170000990a000001010000,Retronic Adapter,a:b0,leftx:a0,lefty:a1,platform:Linux,
0300000000f000000300000000010000,RetroPad,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
+00000000526574726f53746f6e653200,RetroStone 2 Controller,a:b1,b:b0,back:b10,dpdown:b15,dpleft:b16,dpright:b17,dpup:b14,leftshoulder:b6,lefttrigger:b8,rightshoulder:b7,righttrigger:b9,start:b11,x:b4,y:b3,platform:Linux,
030000006b140000010d000011010000,Revolution Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
030000006b140000130d000011010000,Revolution Pro Controller 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
030000006f0e00001f01000000010000,Rock Candy,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00001e01000011010000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000c6240000fefa000000010000,Rock Candy Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006f0e00004601000001010000,Rock Candy Xbox One Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a306000023f6000011010000,Saitek Cyborg V1 PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux,
03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux,
-03000000a30600000cff000010010000,Saitek P2500 Force Rumble Pad,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux,
-03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,
-03000000a306000018f5000010010000,Saitek P3200 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a30600000cff000010010000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux,
+03000000a30600000c04000011010000,Saitek P2900,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,
+03000000a306000018f5000010010000,Saitek P3200 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,x:b0,y:b1,platform:Linux,
-03000000a30600000b04000000010000,Saitek P990 Dual Analog Pad,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,
-03000000a306000020f6000011010000,Saitek PS2700 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
+03000000a30600000b04000000010000,Saitek P990 Dual Analog,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,
+03000000a306000020f6000011010000,Saitek PS2700 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
03000000d81d00000e00000010010000,Savior,a:b0,b:b1,back:b8,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b11,righttrigger:b3,start:b9,x:b4,y:b5,platform:Linux,
-03000000a30c00002500000011010000,Sega Genesis Mini 3B controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux,
+03000000a30c00002500000011010000,Sega Genesis Mini 3B Controller,a:b2,b:b1,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,righttrigger:b5,start:b9,platform:Linux,
+03000000790000001100000011010000,Sega Saturn,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux,
+03000000790000002201000011010000,Sega Saturn,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
+03000000b40400000a01000000010000,Sega Saturn,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux,
030000001f08000001e4000010010000,SFC Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
-03000000f025000021c1000010010000,Shanwan Gioteck PS3 Wired Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000632500007505000010010000,Shanwan PS3 PC Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000bc2000000055000010010000,Shanwan PS3 PC Wired GamePad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005f140000c501000010010000,Shanwan Trust Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000632500002305000010010000,ShanWan USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000632500002305000010010000,ShanWan Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000f025000021c1000010010000,Shanwan Gioteck PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000632500007505000010010000,Shanwan PS3 PC,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
+03000000bc2000000055000010010000,Shanwan PS3 PC ,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+030000005f140000c501000010010000,Shanwan Trust,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
03000000341a00000908000010010000,SL6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
030000004c050000e60c000011810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
050000004c050000e60c000000810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
-03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
-030000005e0400008e02000073050000,Speedlink Torid Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000004c050000cc09000001000000,Sony DualShock 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000ff000000cb01000010010000,Sony PlayStation Portable,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
+03000000250900000500000000010000,Sony PS2 pad with SmartJoy Adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
+030000005e0400008e02000073050000,Speedlink Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000020200000,SpeedLink Xeox Pro Analog,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
-03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
+03000000de2800000211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
-03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b15,paddle2:b16,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
+03000000de2800004211000011010000,Steam Controller,a:b2,b:b3,back:b10,dpdown:b18,dpleft:b19,dpright:b20,dpup:b17,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b16,paddle2:b15,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b5,platform:Linux,
03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b10,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Linux,
@@ -1236,118 +1283,128 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000381000003114000075010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
05000000110100001914000009010000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000ad1b000038f0000090040000,Street Fighter IV FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000003b07000004a1000000010000,Suncom SFX Plus for USB,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux,
+03000000ad1b000038f0000090040000,Street Fighter IV Fightstick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000003b07000004a1000000010000,Suncom SFX Plus,a:b0,b:b2,back:b7,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b5,start:b8,x:b1,y:b3,platform:Linux,
03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Linux,
0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,platform:Linux,
030000008f0e00000d31000010010000,SZMY Power 3 Turbo,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000457500002211000010010000,SZMY Power Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-030000008f0e00001431000010010000,SZMY Power PS3 gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000008f0e00001431000010010000,SZMY Power PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
03000000ba2200000701000001010000,Technology Innovation PS2 Adapter,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a5,righty:a2,start:b9,x:b3,y:b2,platform:Linux,
-030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
-030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3 in 1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000004f0400000ed0000011010000,Thrustmaster eSwap PRO Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000020b3000010010000,Thrustmaster Dual Trigger,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+030000004f04000023b3000000010000,Thrustmaster Dual Trigger PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f0400000ed0000011010000,Thrustmaster eSwap Pro Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
03000000b50700000399000000010000,Thrustmaster Firestorm Digital 2,a:b2,b:b4,back:b11,leftshoulder:b6,leftstick:b10,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b0,righttrigger:b9,start:b1,x:b3,y:b5,platform:Linux,
030000004f04000003b3000010010000,Thrustmaster Firestorm Dual Analog 2,a:b0,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b9,rightx:a2,righty:a3,x:b1,y:b3,platform:Linux,
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b11,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b10,x:b1,y:b3,platform:Linux,
-030000004f04000026b3000002040000,Thrustmaster Gamepad GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000c6240000025b000002020000,Thrustmaster GPX Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000004f04000007d0000000010000,Thrustmaster T Mini Wireless,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
-030000004f04000012b3000010010000,Thrustmaster vibrating gamepad,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
-03000000bd12000015d0000010010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
+030000004f04000026b3000002040000,Thrustmaster GP XID,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+03000000c6240000025b000002020000,Thrustmaster GPX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000004f04000008d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000009d0000000010000,Thrustmaster Run N Drive PlayStation Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000007d0000000010000,Thrustmaster T Mini,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
+030000004f04000012b3000010010000,Thrustmaster vibrating,a:b0,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b1,y:b3,platform:Linux,
+03000000571d00002000000010010000,Tomee SNES Adapter,a:b0,b:b1,back:b6,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b7,x:b2,y:b3,platform:Linux,
+03000000bd12000015d0000010010000,Tomee SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000d814000007cd000011010000,Toodles 2008 Chimp PC PS3,a:b0,b:b1,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
030000005e0400008e02000070050000,Torid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000c01100000591000011010000,Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
+03000000100800000100000010010000,Twin PS2 Adapter,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000100800000300000010010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,platform:Linux,
-03000000790000001100000000010000,USB Gamepad1,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,
-03000000790000001100000011010000,USB Saturn Controller,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b5,righttrigger:b4,start:b9,x:b0,y:b3,platform:Linux,
-03000000790000002201000011010000,USB Saturn Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,start:b9,x:b2,y:b3,platform:Linux,
-03000000b40400000a01000000010000,USB Saturn Pad,a:b0,b:b1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b8,x:b3,y:b4,platform:Linux,
-030000006f0e00000302000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
-030000006f0e00000702000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+03000000790000001100000000010000,USB Gamepad,a:b2,b:b1,back:b8,dpdown:a0,dpleft:a1,dpright:a2,dpup:a4,start:b9,platform:Linux,
+030000006f0e00000302000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
+030000006f0e00000702000011010000,Victrix Pro Fightstick PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
05000000ac0500003232000001000000,VR Box Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,platform:Linux,
03000000791d00000103000010010000,Wii Classic Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-050000000d0f0000f600000001000000,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+0000000058626f782033363020576900,Xbox 360 Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
+030000005e0400001907000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400008e02000010010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400008e02000014010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Linux,
-030000005e0400001907000000010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400009102000007010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000a102000000010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000a102000007010000,Xbox 360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400008e02000000010000,Xbox 360 Wireless EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e040000a102000014010000,Xbox 360 Wireless Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400009102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000000010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000007010000,Xbox 360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400008e02000000010000,Xbox 360 EasySMX,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000a102000014010000,Xbox 360 Receiver,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e0400000202000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
030000006f0e00001304000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000ffff0000ffff000000010000,Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
0000000058626f782047616d65706100,Xbox Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400000a0b000005040000,Xbox One Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
+030000005e040000120b000009050000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000d102000002010000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000ea02000000000000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+030000005e040000ea02000001030000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000e002000003090000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000fd02000003090000,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000fd02000030110000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+060000005e040000120b000007050000,Xbox One Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
050000005e040000e302000002090000,Xbox One Elite,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e040000ea02000000000000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-030000005e040000ea02000001030000,Xbox One Wireless Controller (Model 1708),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-060000005e040000120b000007050000,Xbox One Wireless Controller (Model 1914),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-030000005e0400000202000000010000,Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,platform:Linux,
+060000005e040000ea0200000b050000,Xbox One S Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000120b000001050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000120b000005050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000130b000001050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
050000005e040000130b000005050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
-03000000450c00002043000010010000,XEOX Gamepad SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
+050000005e040000130b000009050000,Xbox Series Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+060000005e040000120b00000b050000,Xbox Series Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
+050000005e040000130b000011050000,Xbox Series X Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
+03000000450c00002043000010010000,XEOX SL6556 BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000ac0500005b05000010010000,Xiaoji Gamesir G3w,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,platform:Linux,
-05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
+05000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Linux,
03000000c0160000e105000001010000,XinMo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,
xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
-03000000120c0000100e000011010000,Zeroplus P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
-03000000120c0000101e000011010000,Zeroplus P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000100e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
+03000000120c0000101e000011010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
# Android
+38426974446f2038426974446f205072,8BitDo 8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+38426974446f2050726f203200000000,8BitDo 8BitDo Pro 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
38653964633230666463343334313533,8BitDo Adapter,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+36666264316630653965636634386234,8BitDo Adapter 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
34343439373236623466343934376233,8BitDo FC30 Pro,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b28,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b4,rightstick:b29,righttrigger:b7,start:b5,x:b30,y:b2,platform:Android,
+05000000c82d000006500000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000051060000ffff3f00,8BitDo M30,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android,
33656266353630643966653238646264,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:a5,start:b10,x:b19,y:b2,platform:Android,
39366630663062373237616566353437,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,start:b6,x:b2,y:b3,platform:Android,
64653533313537373934323436343563,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:a4,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b9,righttrigger:b10,start:b6,x:b2,y:b3,platform:Android,
66356438346136366337386437653934,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,start:b18,x:b19,y:b2,platform:Android,
66393064393162303732356665666366,8BitDo M30,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b2,y:b3,platform:Android,
-05000000c82d000006500000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a4,start:b6,x:b3,y:b2,platform:Android,
-05000000c82d000051060000ffff3f00,8BitDo M30 Gamepad,a:b1,b:b0,back:b4,guide:b17,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000015900000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000065280000ffff3f00,8BitDo N30 Pro 2,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
050000000220000000900000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
050000002038000009000000ffff3f00,8BitDo NES30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+35376664343164386333616535333434,8BitDo Pro 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,start:b10,x:b19,y:b2,platform:Android,
+62373739366537363166326238653463,8BitDo Pro 2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b3,y:b2,platform:Android,
05000000c82d000000600000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000000610000ffff3f00,8BitDo SF30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
38426974646f20534633302050726f00,8BitDo SF30 Pro,a:b1,b:b0,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b17,platform:Android,
61623334636338643233383735326439,8BitDo SFC30,a:b0,b:b1,back:b4,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b31,start:b5,x:b30,y:b2,platform:Android,
-05000000c82d000012900000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
-05000000c82d000062280000ffff3f00,8BitDo SN30 Gamepad,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000012900000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
+05000000c82d000062280000ffff3f00,8BitDo SN30,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
35383531346263653330306238353131,8BitDo SN30 PP,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000c82d000001600000ffff3f00,8BitDo SN30 Pro,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
36653638656632326235346264663661,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
38303232393133383836366330346462,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android,
38346630346135363335366265656666,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+38426974446f20534e33302050726f2b,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b19,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+536f6e7920436f6d707574657220456e,8BitDo SN30 Pro Plus,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
66306331643531333230306437353936,8BitDo SN30 Pro Plus,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000002600000ffff0f00,8BitDo SN30 Pro+,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b17,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
-050000002028000009000000ffff3f00,8BitDo SNES30 Gamepad,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
-050000003512000020ab000000780f00,8BitDo SNES30 Gamepad,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android,
+050000002028000009000000ffff3f00,8BitDo SNES30,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
+050000003512000020ab000000780f00,8BitDo SNES30,a:b21,b:b20,back:b30,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b26,rightshoulder:b27,start:b31,x:b24,y:b23,platform:Android,
33666663316164653937326237613331,8BitDo Zero,a:b0,b:b1,back:b15,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
+38426974646f205a65726f2047616d65,8BitDo Zero,a:b0,b:b1,back:b15,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
05000000c82d000018900000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
05000000c82d000030320000ffff0f00,8BitDo Zero 2,a:b1,b:b0,back:b4,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
33663434393362303033616630346337,8BitDo Zero 2,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
34656330626361666438323266633963,8BitDo Zero 2,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android,
63396666386564393334393236386630,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
63633435623263373466343461646430,8BitDo Zero 2,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftx:a0,lefty:a1,rightshoulder:b10,start:b6,x:b2,y:b3,platform:Android,
-32333634613735616163326165323731,Amazon Luna Game Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+32333634613735616163326165323731,Amazon Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+417374726f2063697479206d696e6920,Astro City Mini,a:b23,b:b22,back:b29,leftx:a0,lefty:a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android,
38383337343564366131323064613561,Brook Mars PS4 Controller,a:b1,b:b19,back:b17,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
-33323763323132376537376266393366,Dual Strike,a:b24,b:b23,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android,
30363230653635633863366338623265,Evo VR,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,x:b2,y:b3,platform:Android,
05000000b404000011240000dfff3f00,Flydigi Vader 2,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,paddle1:b17,paddle2:b18,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
@@ -1357,20 +1414,29 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
0500000031366332860c44aadfff0f00,GS Gamepad,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
66633030656131663837396562323935,Hori Battle,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
35623466343433653739346434636330,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+484f524920434f2e2c4c54442e203130,Hori Fighting Commander 3 Pro,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+484f524920434f2e2c4c544420205041,Hori Gem Pad 3,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android,
65656436646661313232656661616130,Hori PC Engine Mini Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b18,platform:Android,
31303433326562636431653534636633,Hori Real Arcade Pro 3,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+30306539356238653637313730656134,HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
0500000083050000602000000ffe0000,iBuffalo SNES Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,platform:Android,
64306137363261396266353433303531,InterAct GoPad,a:b24,b:b25,leftshoulder:b23,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,x:b21,y:b22,platform:Android,
+532e542e442e20496e74657261637420,InterAct HammerHead FX,a:b23,b:b24,back:b30,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b22,lefttrigger:b28,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b25,righttrigger:b29,rightx:a2,righty:a3,start:b31,x:b20,y:b21,platform:Android,
65346535636333663931613264643164,Joy Con,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b23,y:b24,platform:Android,
33346566643039343630376565326335,Joy Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
35313531613435623366313835326238,Joy Con (L),a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
38383665633039363066383334653465,Joy Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
39363561613936303237333537383931,Joy Con (R),a:b0,b:b1,back:b5,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
+4a6f792d436f6e20284c290000000000,Joy-Con (L),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b17,x:b19,y:b2,platform:Android,
+4a6f792d436f6e202852290000000000,Joy-Con (R),a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,rightshoulder:b20,start:b18,x:b19,y:b2,platform:Android,
39656136363638323036303865326464,JYS Aapter,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
63316564383539663166353034616434,JYS Adapter,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android,
64623163333561643339623235373232,Logitech F310,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
35623364393661626231343866613337,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+4c6f6769746563682047616d65706164,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
64396331333230326333313330336533,Logitech F710,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+416d617a6f6e2047616d6520436f6e74,Luna Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
+4c756e612047616d6570616400000000,Luna Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
30363066623539323534363639323363,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
31353762393935386662336365626334,Magic NS,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
39623565346366623931666633323530,Magic NS,a:b1,b:b3,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b0,y:b2,platform:Android,
@@ -1378,36 +1444,34 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
31323564663862633234646330373138,Mega Drive,a:b23,b:b22,leftx:a0,lefty:a1,rightshoulder:b25,righttrigger:b26,start:b30,x:b24,y:b21,platform:Android,
37333564393261653735306132613061,Mega Drive,a:b21,b:b22,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,lefttrigger:b28,rightshoulder:b27,righttrigger:b23,start:b30,x:b24,y:b25,platform:Android,
64363363336633363736393038313464,Mega Drive,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b9,x:b2,y:b3,platform:Android,
+33323763323132376537376266393366,Microsoft Dual Strike,a:b24,b:b23,back:b25,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b29,rightshoulder:b78,rightx:a0,righty:a1~,start:b26,x:b22,y:b21,platform:Android,
30306461613834333439303734316539,Microsoft SideWinder Pro,a:b0,b:b1,leftshoulder:b20,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b19,righttrigger:b10,start:b17,x:b2,y:b3,platform:Android,
-64633436313965656664373634323364,Microsoft X-Box 360 pad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+64633436313965656664373634323364,Microsoft Xbox 360,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
32386235353630393033393135613831,Microsoft Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+4d4f435554452d303533582d4d35312d,Mocute 053X,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
33343361376163623438613466616531,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
39306635663061636563316166303966,Mocute M053,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
7573622067616d657061642020202020,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,righttrigger:b6,start:b9,x:b3,y:b0,platform:Android,
050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,platform:Android,
34323437396534643531326161633738,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+50726f20436f6e74726f6c6c65720000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b2,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b10,rightx:a2,righty:a3,start:b18,y:b3,platform:Android,
+050000005509000003720000cf7f3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005509000010720000ffff3f00,NVIDIA Controller,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005509000014720000df7f3f00,NVIDIA Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
37336435666338653565313731303834,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
61363931656135336130663561616264,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000005509000003720000cf7f3f00,NVIDIA Controller v01.01,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000005509000010720000ffff3f00,NVIDIA Controller v01.03,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000005509000014720000df7f3f00,NVIDIA Controller v01.04,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+39383335313438623439373538343266,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b16,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,x:b1,y:b19,platform:Android,
+4f5559412047616d6520436f6e74726f,OUYA Controller,a:b0,b:b2,dpdown:b18,dpleft:b15,dpright:b6,dpup:b17,leftshoulder:b3,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b19,platform:Android,
+506572666f726d616e63652044657369,PDP PS3 Rock Candy Controller,a:b1,b:b17,back:h0.2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b0,y:b2,platform:Android,
+62653335326261303663356263626339,PlayStation Classic Controller,a:b19,b:b1,back:b17,leftshoulder:b9,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android,
61653962353232366130326530363061,Pokken,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,rightshoulder:b20,righttrigger:b10,start:b18,x:b0,y:b2,platform:Android,
32666633663735353234363064386132,PS2,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a3,righty:a2,start:b30,x:b24,y:b21,platform:Android,
-61363034663839376638653463633865,PS3,a:b0,b:b1,back:b15,dpdown:a14,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-66366539656564653432353139356536,PS3,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-66383132326164626636313737373037,PS3,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-30303839663330346632363232623138,PS4,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
-31326235383662333266633463653332,PS4,a:b1,b:b16,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android,
-31663838336334393132303338353963,PS4,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-34613139376634626133336530386430,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-37626233336235343937333961353732,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-38393161636261653636653532386639,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-63313733393535663339656564343962,PS4,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-63393662363836383439353064663939,PS4,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-65366465656364636137653363376531,PS4,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
-66613532303965383534396638613230,PS4,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
+536f6e7920504c415953544154494f4e,PS3 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+61363034663839376638653463633865,PS3 Controller,a:b0,b:b1,back:b15,dpdown:a14,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+66366539656564653432353139356536,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+66383132326164626636313737373037,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000c405000000783f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
@@ -1415,16 +1479,29 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
31373231336561636235613666323035,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
35643031303033326130316330353564,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+536f6e7920496e746572616374697665,PS4 Controller,a:b0,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+576972656c65737320436f6e74726f6c,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+31663838336334393132303338353963,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+34613139376634626133336530386430,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+37626233336235343937333961353732,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+38393161636261653636653532386639,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+63313733393535663339656564343962,PS4 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+63393662363836383439353064663939,PS4 Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30303839663330346632363232623138,PS4 Controller,a:b1,b:b17,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
+31326235383662333266633463653332,PS4 Controller,a:b1,b:b16,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b17,x:b0,y:b2,platform:Android,
+65366465656364636137653363376531,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b0,y:b2,platform:Android,
+66613532303965383534396638613230,PS4 Controller,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
050000004c050000e60c0000fffe3f00,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,platform:Android,
-62653335326261303663356263626339,PSX,a:b19,b:b1,back:b17,leftshoulder:b9,lefttrigger:b3,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b20,start:b18,x:b2,y:b0,platform:Android,
64336263393933626535303339616332,Qanba 4RAF,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b20,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b9,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
36626666353861663864336130363137,Razer Junglecat,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
62653861643333663663383332396665,Razer Kishi,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,platform:Android,
+5a6869587520526574726f2042697420,Retro Bit Saturn Controller,a:b21,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b26,rightshoulder:b27,righttrigger:b28,start:b30,x:b23,y:b24,platform:Android,
+526574726f466c616720576972656420,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,rightshoulder:b18,start:b10,x:b2,y:b3,platform:Android,
61343739353764363165343237303336,Retro Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b17,lefttrigger:b18,leftx:a0,lefty:a1,start:b10,x:b2,y:b3,platform:Android,
-38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+38653130373365613538333235303036,Retroid Pocket 2,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
64363363336633363736393038313463,Retrolink,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,start:b6,platform:Android,
33373336396634316434323337666361,RumblePad 2,a:b22,b:b23,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,lefttrigger:b27,leftx:a0,lefty:a1,rightshoulder:b26,righttrigger:b28,rightx:a2,righty:a3,start:b30,x:b21,y:b24,platform:Android,
66386565396238363534313863353065,Sanwa Mobile,a:b21,b:b22,leftshoulder:b23,leftx:a0,lefty:a1,rightshoulder:b24,platform:Android,
@@ -1437,40 +1514,48 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
66633132393363353531373465633064,SG H510,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b17,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b18,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b19,y:b2,platform:Android,
62653761636366393366613135366338,SN30 PP,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:b17,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b18,rightx:a2,righty:a3,start:b6,x:b3,y:b2,platform:Android,
38376662666661636265313264613039,SNES,a:b0,b:b1,back:b9,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android,
+5346432f555342205061640000000000,SNES Adapter,a:b0,b:b1,back:b9,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,start:b10,x:b19,y:b2,platform:Android,
+5553422047616d657061642000000000,SNES Controller,a:b1,b:b0,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,rightshoulder:b10,start:b6,x:b3,y:b2,platform:Android,
32633532643734376632656664383733,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
61303162353165316365336436343139,Sony DualSense,a:b1,b:b19,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a5,start:b18,x:b0,y:b2,platform:Android,
63303964303462366136616266653561,Sony PSP,a:b21,b:b22,back:b27,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b25,leftx:a0,lefty:a1,rightshoulder:b26,start:b28,x:b23,y:b24,platform:Android,
63376637643462343766333462383235,Sony Vita,a:b1,b:b19,back:b17,leftshoulder:b3,leftx:a0,lefty:a1,rightshoulder:b20,rightx:a3,righty:a4,start:b18,x:b0,y:b2,platform:Android,
+476f6f676c65204c4c43205374616469,Stadia Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:Android,
0500000011010000201400000f7e0f00,SteelSeries Nimbus,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b3,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,righttrigger:b10,rightx:a2,righty:a3,x:b19,y:b2,platform:Android,
-050000004f0400000ed00000fffe3f00,ThrustMaster eSwap PRO Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-5477696e20555342204a6f7973746963,Twin USB Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,
-30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b23,paddle2:b24,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b23,paddle2:b24,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-30386438313564306161393537333663,Wii Classic,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
-33333034646336346339646538643633,Wii Classic,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
-30306539356238653637313730656134,Wireless HORIPAD Switch Pro Controller,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b3,leftstick:b15,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b18,x:b19,y:b2,platform:Android,
-30396232393162346330326334636566,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-38313038323730383864666463383533,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-65353331386662343338643939643636,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-65613532386633373963616462363038,Xbox 360,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+35306436396437373135383665646464,SteelSeries Nimbus Plus,a:b0,b:b1,leftshoulder:b3,leftstick:b17,lefttrigger:b9,leftx:a0,rightshoulder:b20,rightstick:b18,righttrigger:b10,rightx:a2,x:b19,y:b2,platform:Android,
+050000004f0400000ed00000fffe3f00,ThrustMaster eSwap Pro Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+5477696e20555342204a6f7973746963,Twin Joystick,a:b22,b:b21,back:b28,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b26,leftstick:b30,lefttrigger:b24,leftx:a0,lefty:a1,rightshoulder:b27,rightstick:b31,righttrigger:b25,rightx:a3,righty:a2,start:b29,x:b23,y:b20,platform:Android,
+30623739343039643830333266346439,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+31643365666432386133346639383937,Valve Steam Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,leftx:a0,lefty:a1,paddle1:b24,paddle2:b23,rightshoulder:b10,rightstick:b8,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30386438313564306161393537333663,Wii Classic Controller,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
+33333034646336346339646538643633,Wii Classic Controller,a:b23,b:b22,back:b29,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b27,lefttrigger:b25,leftx:a0,lefty:a1,rightshoulder:b28,righttrigger:b26,rightx:a2,righty:a3,start:b30,x:b24,y:b21,platform:Android,
050000005e0400008e02000000783f00,Xbox 360 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+30396232393162346330326334636566,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+38313038323730383864666463383533,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+58626f782033363020576972656c6573,Xbox 360 Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65353331386662343338643939643636,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+65613532386633373963616462363038,Xbox 360 Controller,a:b0,b:b1,back:b4,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+47656e6572696320582d426f78207061,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+4d6963726f736f667420582d426f7820,Xbox Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e04000091020000ff073f00,Xbox One Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
+050000005e040000e00200000ffe3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android,
+050000005e040000e0020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b4,leftshoulder:b3,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android,
+050000005e040000fd020000ffff3f00,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
33356661323266333733373865656366,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+34356136633366613530316338376136,Xbox One Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,
35623965373264386238353433656138,Xbox One Controller,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+36616131643361333337396261666433,Xbox One Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+58626f7820576972656c65737320436f,Xbox One Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000000b000000783f00,Xbox One Elite 2 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
050000005e040000e002000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000ea02000000783f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000fd020000ff7f3f00,Xbox One S Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000005e040000e00200000ffe3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,platform:Android,
-050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
050000005e040000120b000000783f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
-050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
+050000005e040000130b0000ffff3f00,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
65633038363832353634653836396239,Xbox Series Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000005e04000091020000ff073f00,Xbox Wireless Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Android,
-34356136633366613530316338376136,Xbox Wireless Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,x:b17,y:b2,platform:Android,
-36616131643361333337396261666433,Xbox Wireless Controller,a:b0,b:b1,back:b15,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Android,
-050000001727000044310000ffff3f00,XiaoMi Game Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
+050000001727000044310000ffff3f00,XiaoMi Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Android,
# iOS
05000000ac0500000100000000006d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,platform:iOS,
@@ -1493,9 +1578,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000ac0500000300000043006d03,Remote,a:b0,b:b2,leftx:a0,lefty:a1,platform:iOS,
05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,platform:iOS,
-050000005e040000050b0000df070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
-050000005e040000050b0000ff070001,Xbox Elite Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000005e040000050b0000df070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b10,paddle2:b12,paddle3:b11,paddle4:b13,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+050000005e040000050b0000ff070001,Xbox Elite Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,paddle1:b11,paddle2:b13,paddle3:b12,paddle4:b14,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000005e040000e0020000df070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
+050000005e040000e0020000ff070000,Xbox One Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
050000005e040000130b0000df870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b10,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
050000005e040000130b0000ff870001,Xbox Series X Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
-050000005e040000e0020000df070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:iOS,
-050000005e040000e0020000ff070000,Xbox Wireless Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b2,y:b3,platform:iOS,
+050000005e040000130b000007050000,Xbox Wireless Controller,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Linux,
diff --git a/core/input/godotcontrollerdb.txt b/core/input/godotcontrollerdb.txt
index 5985b121c9..7f3570729a 100644
--- a/core/input/godotcontrollerdb.txt
+++ b/core/input/godotcontrollerdb.txt
@@ -1,4 +1,4 @@
-# Game Controller DB for Godot in SDL 2.0.10 format
+# Game Controller DB for Godot in SDL 2.0.16 format
# Source: https://github.com/godotengine/godot
# Windows
@@ -31,6 +31,7 @@ MacOSX0e8f3013,HuiJia USB GamePad,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftshoul
Linux046dc216,046d-c216-Logitech Logitech Dual Action,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:-a5,dpleft:-a4,dpdown:+a5,dpright:+a4,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Javascript
Linux20d6a713,Bensussen Deutsch & Associates Inc.(BDA) NSW Wired controller,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:-a5,dpleft:-a4,dpdown:+a5,dpright:+a4,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Javascript
Linux054c05c4,Sony Computer Entertainment Wireless Controller,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:-a7,dpleft:-a6,dpdown:+a7,dpright:+a6,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Javascript
+Linux18d19400,18d1-9400-Google LLC Stadia Controller rev. A,a:b0,b:b1,y:b3,x:b2,start:b7,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:-a7,dpleft:-a6,dpdown:+a7,dpright:+a6,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,platform:Javascript
# UWP
__UWP_GAMEPAD__,Xbox Controller,a:b2,b:b3,x:b4,y:b5,start:b0,back:b1,leftstick:b12,rightstick:b13,leftshoulder:b10,rightshoulder:b11,dpup:b6,dpdown:b7,dpleft:b8,dpright:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:UWP,
diff --git a/core/input/input.cpp b/core/input/input.cpp
index d36d0f4da0..656bb92203 100644
--- a/core/input/input.cpp
+++ b/core/input/input.cpp
@@ -1145,7 +1145,6 @@ Input::JoyEvent Input::_get_mapped_axis_event(const JoyDeviceMapping &mapping, J
// It doesn't make sense for a full axis to map to a button,
// but keeping as a default for a trigger with a positive half-axis.
event.value = (shifted_positive_value * 2) - 1;
- ;
break;
}
return event;
diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp
index 41083b4c47..ab94c00999 100644
--- a/core/input/input_map.cpp
+++ b/core/input/input_map.cpp
@@ -344,7 +344,7 @@ static const _BuiltinActionDisplayName _builtin_action_display_names[] = {
{ "ui_filedialog_refresh", TTRC("Refresh") },
{ "ui_filedialog_show_hidden", TTRC("Show Hidden") },
{ "ui_swap_input_direction ", TTRC("Swap Input Direction") },
- { "", TTRC("")}
+ { "", ""}
/* clang-format on */
};
diff --git a/core/io/file_access_compressed.cpp b/core/io/file_access_compressed.cpp
index 526952b14f..85faf04315 100644
--- a/core/io/file_access_compressed.cpp
+++ b/core/io/file_access_compressed.cpp
@@ -88,11 +88,11 @@ Error FileAccessCompressed::open_after_magic(FileAccess *p_base) {
read_block_count = bc;
read_block_size = read_blocks.size() == 1 ? read_total : block_size;
- Compression::decompress(buffer.ptrw(), read_block_size, comp_buffer.ptr(), read_blocks[0].csize, cmode);
+ int ret = Compression::decompress(buffer.ptrw(), read_block_size, comp_buffer.ptr(), read_blocks[0].csize, cmode);
read_block = 0;
read_pos = 0;
- return OK;
+ return ret == -1 ? ERR_FILE_CORRUPT : OK;
}
Error FileAccessCompressed::_open(const String &p_path, int p_mode_flags) {
@@ -125,10 +125,11 @@ Error FileAccessCompressed::_open(const String &p_path, int p_mode_flags) {
char rmagic[5];
f->get_buffer((uint8_t *)rmagic, 4);
rmagic[4] = 0;
- if (magic != rmagic || open_after_magic(f) != OK) {
+ err = ERR_FILE_UNRECOGNIZED;
+ if (magic != rmagic || (err = open_after_magic(f)) != OK) {
memdelete(f);
f = nullptr;
- return ERR_FILE_UNRECOGNIZED;
+ return err;
}
}
@@ -210,7 +211,8 @@ void FileAccessCompressed::seek(uint64_t p_position) {
read_block = block_idx;
f->seek(read_blocks[read_block].offset);
f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ int ret = Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ ERR_FAIL_COND_MSG(ret == -1, "Compressed file is corrupt.");
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
}
@@ -273,7 +275,8 @@ uint8_t FileAccessCompressed::get_8() const {
if (read_block < read_block_count) {
//read another block of compressed data
f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ int total = Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ ERR_FAIL_COND_V_MSG(total == -1, 0, "Compressed file is corrupt.");
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
read_pos = 0;
@@ -305,7 +308,8 @@ uint64_t FileAccessCompressed::get_buffer(uint8_t *p_dst, uint64_t p_length) con
if (read_block < read_block_count) {
//read another block of compressed data
f->get_buffer(comp_buffer.ptrw(), read_blocks[read_block].csize);
- Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ int ret = Compression::decompress(buffer.ptrw(), read_blocks.size() == 1 ? read_total : block_size, comp_buffer.ptr(), read_blocks[read_block].csize, cmode);
+ ERR_FAIL_COND_V_MSG(ret == -1, -1, "Compressed file is corrupt.");
read_block_size = read_block == read_block_count - 1 ? read_total % block_size : block_size;
read_pos = 0;
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp
index 5c39b2fa1b..d0bc05566e 100644
--- a/core/io/marshalls.cpp
+++ b/core/io/marshalls.cpp
@@ -1068,6 +1068,21 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
flags |= ENCODE_FLAG_OBJECT_AS_ID;
}
} break;
+#ifdef REAL_T_IS_DOUBLE
+ case Variant::VECTOR2:
+ case Variant::VECTOR3:
+ case Variant::PACKED_VECTOR2_ARRAY:
+ case Variant::PACKED_VECTOR3_ARRAY:
+ case Variant::TRANSFORM2D:
+ case Variant::TRANSFORM3D:
+ case Variant::QUATERNION:
+ case Variant::PLANE:
+ case Variant::BASIS:
+ case Variant::RECT2:
+ case Variant::AABB: {
+ flags |= ENCODE_FLAG_64;
+ } break;
+#endif // REAL_T_IS_DOUBLE
default: {
} // nothing to do at this stage
}
@@ -1417,19 +1432,6 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
d.get_key_list(&keys);
for (const Variant &E : keys) {
- /*
- CharString utf8 = E->->utf8();
-
- if (buf) {
- encode_uint32(utf8.length()+1,buf);
- buf+=4;
- memcpy(buf,utf8.get_data(),utf8.length()+1);
- }
-
- r_len+=4+utf8.length()+1;
- while (r_len%4)
- r_len++; //pad
- */
int len;
Error err = encode_variant(E, buf, len, p_full_objects, p_depth + 1);
ERR_FAIL_COND_V(err, err);
diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp
index 272ace3438..b3bf0cff2d 100644
--- a/core/io/pck_packer.cpp
+++ b/core/io/pck_packer.cpp
@@ -257,10 +257,7 @@ Error PCKPacker::flush(bool p_verbose) {
count += 1;
const int file_num = files.size();
if (p_verbose && (file_num > 0)) {
- if (count % 100 == 0) {
- printf("%i/%i (%.2f)\r", count, file_num, float(count) / file_num * 100);
- fflush(stdout);
- }
+ print_line(vformat("[%d/%d - %d%%] PCKPacker flush: %s -> %s", count, file_num, float(count) / file_num * 100, files[i].src_path, files[i].path));
}
}
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index ed58b4be7b..ee59a916f1 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -901,6 +901,7 @@ void ResourceLoaderBinary::open(FileAccess *p_f, bool p_no_resources, bool p_kee
if (flags & ResourceFormatSaverBinaryInstance::FORMAT_FLAG_UIDS) {
using_uids = true;
}
+ f->real_is_double = (flags & ResourceFormatSaverBinaryInstance::FORMAT_FLAG_REAL_T_IS_DOUBLE) != 0;
if (using_uids) {
uid = f->get_64();
@@ -1607,11 +1608,6 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
d.get_key_list(&keys);
for (const Variant &E : keys) {
- /*
- if (!_check_type(dict[E]))
- continue;
- */
-
write_variant(f, E, resource_map, external_resources, string_map);
write_variant(f, d[E], resource_map, external_resources, string_map);
}
@@ -1902,7 +1898,13 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
save_unicode_string(f, p_resource->get_class());
f->store_64(0); //offset to import metadata
- f->store_32(FORMAT_FLAG_NAMED_SCENE_IDS | FORMAT_FLAG_UIDS);
+ {
+ uint32_t format_flags = FORMAT_FLAG_NAMED_SCENE_IDS | FORMAT_FLAG_UIDS;
+#ifdef REAL_T_IS_DOUBLE
+ format_flags |= FORMAT_FLAG_REAL_T_IS_DOUBLE;
+#endif
+ f->store_32(format_flags);
+ }
ResourceUID::ID uid = ResourceSaver::get_resource_id_for_path(p_path, true);
f->store_64(uid);
for (int i = 0; i < ResourceFormatSaverBinaryInstance::RESERVED_FIELDS; i++) {
diff --git a/core/io/resource_format_binary.h b/core/io/resource_format_binary.h
index ecc3e95f6b..c80c9b0ac9 100644
--- a/core/io/resource_format_binary.h
+++ b/core/io/resource_format_binary.h
@@ -164,6 +164,8 @@ public:
enum {
FORMAT_FLAG_NAMED_SCENE_IDS = 1,
FORMAT_FLAG_UIDS = 2,
+ FORMAT_FLAG_REAL_T_IS_DOUBLE = 4,
+
// Amount of reserved 32-bit fields in resource header
RESERVED_FIELDS = 11
};
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index 21bf566b1b..2419c76dd3 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -672,10 +672,6 @@ int ResourceLoader::get_import_order(const String &p_path) {
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
return loader[i]->get_import_order(p_path);
}
@@ -690,10 +686,6 @@ String ResourceLoader::get_import_group_file(const String &p_path) {
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
return loader[i]->get_import_group_file(p_path);
}
@@ -708,10 +700,6 @@ bool ResourceLoader::is_import_valid(const String &p_path) {
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
return loader[i]->is_import_valid(p_path);
}
@@ -726,10 +714,6 @@ bool ResourceLoader::is_imported(const String &p_path) {
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
return loader[i]->is_imported(p_path);
}
@@ -744,10 +728,6 @@ void ResourceLoader::get_dependencies(const String &p_path, List<String> *p_depe
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
loader[i]->get_dependencies(local_path, p_dependencies, p_add_types);
}
@@ -760,10 +740,6 @@ Error ResourceLoader::rename_dependencies(const String &p_path, const Map<String
if (!loader[i]->recognize_path(local_path)) {
continue;
}
- /*
- if (p_type_hint!="" && !loader[i]->handles_type(p_type_hint))
- continue;
- */
return loader[i]->rename_dependencies(local_path, p_map);
}
diff --git a/core/math/basis.cpp b/core/math/basis.cpp
index e34c1c1315..84f9d12bb1 100644
--- a/core/math/basis.cpp
+++ b/core/math/basis.cpp
@@ -37,7 +37,7 @@
(elements[row1][col1] * elements[row2][col2] - elements[row1][col2] * elements[row2][col1])
void Basis::from_z(const Vector3 &p_z) {
- if (Math::abs(p_z.z) > Math_SQRT12) {
+ if (Math::abs(p_z.z) > (real_t)Math_SQRT12) {
// choose p in y-z plane
real_t a = p_z[1] * p_z[1] + p_z[2] * p_z[2];
real_t k = 1.0f / Math::sqrt(a);
@@ -153,7 +153,7 @@ Basis Basis::diagonalize() {
int ite = 0;
Basis acc_rot;
- while (off_matrix_norm_2 > CMP_EPSILON2 && ite++ < ite_max) {
+ while (off_matrix_norm_2 > (real_t)CMP_EPSILON2 && ite++ < ite_max) {
real_t el01_2 = elements[0][1] * elements[0][1];
real_t el02_2 = elements[0][2] * elements[0][2];
real_t el12_2 = elements[1][2] * elements[1][2];
@@ -463,8 +463,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
Vector3 euler;
real_t sy = elements[0][2];
- if (sy < (1.0f - CMP_EPSILON)) {
- if (sy > -(1.0f - CMP_EPSILON)) {
+ if (sy < (1.0f - (real_t)CMP_EPSILON)) {
+ if (sy > -(1.0f - (real_t)CMP_EPSILON)) {
// is this a pure Y rotation?
if (elements[1][0] == 0 && elements[0][1] == 0 && elements[1][2] == 0 && elements[2][1] == 0 && elements[1][1] == 1) {
// return the simplest form (human friendlier in editor and scripts)
@@ -498,8 +498,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
Vector3 euler;
real_t sz = elements[0][1];
- if (sz < (1.0f - CMP_EPSILON)) {
- if (sz > -(1.0f - CMP_EPSILON)) {
+ if (sz < (1.0f - (real_t)CMP_EPSILON)) {
+ if (sz > -(1.0f - (real_t)CMP_EPSILON)) {
euler.x = Math::atan2(elements[2][1], elements[1][1]);
euler.y = Math::atan2(elements[0][2], elements[0][0]);
euler.z = Math::asin(-sz);
@@ -529,8 +529,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
real_t m12 = elements[1][2];
- if (m12 < (1 - CMP_EPSILON)) {
- if (m12 > -(1 - CMP_EPSILON)) {
+ if (m12 < (1 - (real_t)CMP_EPSILON)) {
+ if (m12 > -(1 - (real_t)CMP_EPSILON)) {
// is this a pure X rotation?
if (elements[1][0] == 0 && elements[0][1] == 0 && elements[0][2] == 0 && elements[2][0] == 0 && elements[0][0] == 1) {
// return the simplest form (human friendlier in editor and scripts)
@@ -565,8 +565,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
Vector3 euler;
real_t sz = elements[1][0];
- if (sz < (1.0f - CMP_EPSILON)) {
- if (sz > -(1.0f - CMP_EPSILON)) {
+ if (sz < (1.0f - (real_t)CMP_EPSILON)) {
+ if (sz > -(1.0f - (real_t)CMP_EPSILON)) {
euler.x = Math::atan2(-elements[1][2], elements[1][1]);
euler.y = Math::atan2(-elements[2][0], elements[0][0]);
euler.z = Math::asin(sz);
@@ -593,8 +593,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
// -cx*sy sx cx*cy
Vector3 euler;
real_t sx = elements[2][1];
- if (sx < (1.0f - CMP_EPSILON)) {
- if (sx > -(1.0f - CMP_EPSILON)) {
+ if (sx < (1.0f - (real_t)CMP_EPSILON)) {
+ if (sx > -(1.0f - (real_t)CMP_EPSILON)) {
euler.x = Math::asin(sx);
euler.y = Math::atan2(-elements[2][0], elements[2][2]);
euler.z = Math::atan2(-elements[0][1], elements[1][1]);
@@ -621,8 +621,8 @@ Vector3 Basis::get_euler(EulerOrder p_order) const {
// -sy cy*sx cy*cx
Vector3 euler;
real_t sy = elements[2][0];
- if (sy < (1.0f - CMP_EPSILON)) {
- if (sy > -(1.0f - CMP_EPSILON)) {
+ if (sy < (1.0f - (real_t)CMP_EPSILON)) {
+ if (sy > -(1.0f - (real_t)CMP_EPSILON)) {
euler.x = Math::atan2(elements[2][1], elements[2][2]);
euler.y = Math::asin(-sy);
euler.z = Math::atan2(elements[1][0], elements[0][0]);
diff --git a/core/math/bvh_cull.inc b/core/math/bvh_cull.inc
index d7edc8a884..ab468bfd29 100644
--- a/core/math/bvh_cull.inc
+++ b/core/math/bvh_cull.inc
@@ -508,8 +508,9 @@ bool _cull_convex_iterative(uint32_t p_node_id, CullParams &r_params, bool p_ful
uint32_t child_id = leaf.get_item_ref_id(n);
// full up with results? exit early, no point in further testing
- if (!_cull_hit(child_id, r_params))
+ if (!_cull_hit(child_id, r_params)) {
return false;
+ }
}
}
#endif // BVH_CONVEX_CULL_OPTIMIZED
diff --git a/core/math/bvh_debug.inc b/core/math/bvh_debug.inc
index 55db794ee3..896c36ecf1 100644
--- a/core/math/bvh_debug.inc
+++ b/core/math/bvh_debug.inc
@@ -1,8 +1,9 @@
public:
#ifdef BVH_VERBOSE
void _debug_recursive_print_tree(int p_tree_id) const {
- if (_root_node_id[p_tree_id] != BVHCommon::INVALID)
+ if (_root_node_id[p_tree_id] != BVHCommon::INVALID) {
_debug_recursive_print_tree_node(_root_node_id[p_tree_id]);
+ }
}
String _debug_aabb_to_string(const BVHABB_CLASS &aabb) const {
@@ -42,8 +43,9 @@ void _debug_recursive_print_tree_node(uint32_t p_node_id, int depth = 0) const {
sz += "[";
for (int n = 0; n < leaf.num_items; n++) {
- if (n)
+ if (n) {
sz += ", ";
+ }
sz += "r";
sz += itos(leaf.get_item_ref_id(n));
}
diff --git a/core/math/camera_matrix.cpp b/core/math/camera_matrix.cpp
index f5d746ef0f..f4392c74b7 100644
--- a/core/math/camera_matrix.cpp
+++ b/core/math/camera_matrix.cpp
@@ -436,9 +436,7 @@ void CameraMatrix::invert() {
int pvt_i[4], pvt_j[4]; /* Locations of pivot matrix */
real_t pvt_val; /* Value of current pivot element */
real_t hold; /* Temporary storage */
- real_t determinat; /* Determinant */
-
- determinat = 1.0;
+ real_t determinant = 1.0f;
for (k = 0; k < 4; k++) {
/** Locate k'th pivot element **/
pvt_val = matrix[k][k]; /** Initialize for search **/
@@ -446,7 +444,7 @@ void CameraMatrix::invert() {
pvt_j[k] = k;
for (i = k; i < 4; i++) {
for (j = k; j < 4; j++) {
- if (Math::absd(matrix[i][j]) > Math::absd(pvt_val)) {
+ if (Math::abs(matrix[i][j]) > Math::abs(pvt_val)) {
pvt_i[k] = i;
pvt_j[k] = j;
pvt_val = matrix[i][j];
@@ -455,9 +453,9 @@ void CameraMatrix::invert() {
}
/** Product of pivots, gives determinant when finished **/
- determinat *= pvt_val;
- if (Math::absd(determinat) < 1e-7) {
- return; //(false); /** Matrix is singular (zero determinant). **/
+ determinant *= pvt_val;
+ if (Math::is_zero_approx(determinant)) {
+ return; /** Matrix is singular (zero determinant). **/
}
/** "Interchange" rows (with sign change stuff) **/
diff --git a/core/math/camera_matrix.h b/core/math/camera_matrix.h
index 285d2ae384..f1aea5e4e8 100644
--- a/core/math/camera_matrix.h
+++ b/core/math/camera_matrix.h
@@ -33,6 +33,7 @@
#include "core/math/math_defs.h"
#include "core/math/vector3.h"
+#include "core/templates/vector.h"
struct AABB;
struct Plane;
diff --git a/core/math/color.h b/core/math/color.h
index 429807e4a6..b90a0f33a2 100644
--- a/core/math/color.h
+++ b/core/math/color.h
@@ -138,7 +138,7 @@ struct _NO_DISCARD_ Color {
float cMax = MAX(cRed, MAX(cGreen, cBlue));
- float expp = MAX(-B - 1.0f, floor(Math::log(cMax) / Math_LN2)) + 1.0f + B;
+ float expp = MAX(-B - 1.0f, floor(Math::log(cMax) / (real_t)Math_LN2)) + 1.0f + B;
float sMax = (float)floor((cMax / Math::pow(2.0f, expp - B - N)) + 0.5f);
diff --git a/core/math/face3.cpp b/core/math/face3.cpp
index 9c968df19b..5bc1bc25e6 100644
--- a/core/math/face3.cpp
+++ b/core/math/face3.cpp
@@ -42,7 +42,7 @@ int Face3::split_by_plane(const Plane &p_plane, Face3 p_res[3], bool p_is_point_
int below_count = 0;
for (int i = 0; i < 3; i++) {
- if (p_plane.has_point(vertex[i], CMP_EPSILON)) { // point is in plane
+ if (p_plane.has_point(vertex[i], (real_t)CMP_EPSILON)) { // point is in plane
ERR_FAIL_COND_V(above_count >= 4, 0);
above[above_count++] = vertex[i];
@@ -117,7 +117,7 @@ bool Face3::intersects_segment(const Vector3 &p_from, const Vector3 &p_dir, Vect
bool Face3::is_degenerate() const {
Vector3 normal = vec3_cross(vertex[0] - vertex[1], vertex[0] - vertex[2]);
- return (normal.length_squared() < CMP_EPSILON2);
+ return (normal.length_squared() < (real_t)CMP_EPSILON2);
}
Face3::Side Face3::get_side_of(const Face3 &p_face, ClockDirection p_clock_dir) const {
diff --git a/core/math/geometry_2d.cpp b/core/math/geometry_2d.cpp
index b1af91c49c..46b7d99b43 100644
--- a/core/math/geometry_2d.cpp
+++ b/core/math/geometry_2d.cpp
@@ -218,10 +218,10 @@ Vector<Vector<Point2>> Geometry2D::_polypaths_do_operation(PolyBooleanOperation
// Need to scale points (Clipper's requirement for robust computation).
for (int i = 0; i != p_polypath_a.size(); ++i) {
- path_a << IntPoint(p_polypath_a[i].x * SCALE_FACTOR, p_polypath_a[i].y * SCALE_FACTOR);
+ path_a << IntPoint(p_polypath_a[i].x * (real_t)SCALE_FACTOR, p_polypath_a[i].y * (real_t)SCALE_FACTOR);
}
for (int i = 0; i != p_polypath_b.size(); ++i) {
- path_b << IntPoint(p_polypath_b[i].x * SCALE_FACTOR, p_polypath_b[i].y * SCALE_FACTOR);
+ path_b << IntPoint(p_polypath_b[i].x * (real_t)SCALE_FACTOR, p_polypath_b[i].y * (real_t)SCALE_FACTOR);
}
Clipper clp;
clp.AddPath(path_a, ptSubject, !is_a_open); // Forward compatible with Clipper 10.0.0.
@@ -246,8 +246,8 @@ Vector<Vector<Point2>> Geometry2D::_polypaths_do_operation(PolyBooleanOperation
for (Paths::size_type j = 0; j < scaled_path.size(); ++j) {
polypath.push_back(Point2(
- static_cast<real_t>(scaled_path[j].X) / SCALE_FACTOR,
- static_cast<real_t>(scaled_path[j].Y) / SCALE_FACTOR));
+ static_cast<real_t>(scaled_path[j].X) / (real_t)SCALE_FACTOR,
+ static_cast<real_t>(scaled_path[j].Y) / (real_t)SCALE_FACTOR));
}
polypaths.push_back(polypath);
}
@@ -290,17 +290,17 @@ Vector<Vector<Point2>> Geometry2D::_polypath_offset(const Vector<Point2> &p_poly
et = etOpenRound;
break;
}
- ClipperOffset co(2.0, 0.25f * SCALE_FACTOR); // Defaults from ClipperOffset.
+ ClipperOffset co(2.0, 0.25f * (real_t)SCALE_FACTOR); // Defaults from ClipperOffset.
Path path;
// Need to scale points (Clipper's requirement for robust computation).
for (int i = 0; i != p_polypath.size(); ++i) {
- path << IntPoint(p_polypath[i].x * SCALE_FACTOR, p_polypath[i].y * SCALE_FACTOR);
+ path << IntPoint(p_polypath[i].x * (real_t)SCALE_FACTOR, p_polypath[i].y * (real_t)SCALE_FACTOR);
}
co.AddPath(path, jt, et);
Paths paths;
- co.Execute(paths, p_delta * SCALE_FACTOR); // Inflate/deflate.
+ co.Execute(paths, p_delta * (real_t)SCALE_FACTOR); // Inflate/deflate.
// Have to scale points down now.
Vector<Vector<Point2>> polypaths;
@@ -312,8 +312,8 @@ Vector<Vector<Point2>> Geometry2D::_polypath_offset(const Vector<Point2> &p_poly
for (Paths::size_type j = 0; j < scaled_path.size(); ++j) {
polypath.push_back(Point2(
- static_cast<real_t>(scaled_path[j].X) / SCALE_FACTOR,
- static_cast<real_t>(scaled_path[j].Y) / SCALE_FACTOR));
+ static_cast<real_t>(scaled_path[j].X) / (real_t)SCALE_FACTOR,
+ static_cast<real_t>(scaled_path[j].Y) / (real_t)SCALE_FACTOR));
}
polypaths.push_back(polypath);
}
diff --git a/core/math/geometry_2d.h b/core/math/geometry_2d.h
index 4fdb8ee36a..62786d69be 100644
--- a/core/math/geometry_2d.h
+++ b/core/math/geometry_2d.h
@@ -51,20 +51,20 @@ public:
real_t f = d2.dot(r);
real_t s, t;
// Check if either or both segments degenerate into points.
- if (a <= CMP_EPSILON && e <= CMP_EPSILON) {
+ if (a <= (real_t)CMP_EPSILON && e <= (real_t)CMP_EPSILON) {
// Both segments degenerate into points.
c1 = p1;
c2 = p2;
return Math::sqrt((c1 - c2).dot(c1 - c2));
}
- if (a <= CMP_EPSILON) {
+ if (a <= (real_t)CMP_EPSILON) {
// First segment degenerates into a point.
s = 0.0;
t = f / e; // s = 0 => t = (b*s + f) / e = f / e
t = CLAMP(t, 0.0f, 1.0f);
} else {
real_t c = d1.dot(r);
- if (e <= CMP_EPSILON) {
+ if (e <= (real_t)CMP_EPSILON) {
// Second segment degenerates into a point.
t = 0.0;
s = CLAMP(-c / a, 0.0f, 1.0f); // t = 0 => s = (b*t - c) / a = -c / a
@@ -185,7 +185,7 @@ public:
D = Vector2(D.x * Bn.x + D.y * Bn.y, D.y * Bn.x - D.x * Bn.y);
// Fail if C x B and D x B have the same sign (segments don't intersect).
- if ((C.y < -CMP_EPSILON && D.y < -CMP_EPSILON) || (C.y > CMP_EPSILON && D.y > CMP_EPSILON)) {
+ if ((C.y < (real_t)-CMP_EPSILON && D.y < (real_t)-CMP_EPSILON) || (C.y > (real_t)CMP_EPSILON && D.y > (real_t)CMP_EPSILON)) {
return false;
}
@@ -198,7 +198,7 @@ public:
real_t ABpos = D.x + (C.x - D.x) * D.y / (D.y - C.y);
// Fail if segment C-D crosses line A-B outside of segment A-B.
- if (ABpos < 0 || ABpos > 1.0f) {
+ if ((ABpos < 0) || (ABpos > 1)) {
return false;
}
diff --git a/core/math/geometry_3d.cpp b/core/math/geometry_3d.cpp
index 7eeb37df46..bd22bffb1f 100644
--- a/core/math/geometry_3d.cpp
+++ b/core/math/geometry_3d.cpp
@@ -879,7 +879,7 @@ Vector<Vector3> Geometry3D::compute_convex_mesh_points(const Plane *p_planes, in
for (int n = 0; n < p_plane_count; n++) {
if (n != i && n != j && n != k) {
real_t dp = p_planes[n].normal.dot(convex_shape_point);
- if (dp - p_planes[n].d > CMP_EPSILON) {
+ if (dp - p_planes[n].d > (real_t)CMP_EPSILON) {
excluded = true;
break;
}
diff --git a/core/math/geometry_3d.h b/core/math/geometry_3d.h
index 482c7ea604..59c56906f4 100644
--- a/core/math/geometry_3d.h
+++ b/core/math/geometry_3d.h
@@ -76,7 +76,7 @@ public:
real_t tc, tN, tD = D; // tc = tN / tD, default tD = D >= 0
// Compute the line parameters of the two closest points.
- if (D < CMP_EPSILON) { // The lines are almost parallel.
+ if (D < (real_t)CMP_EPSILON) { // The lines are almost parallel.
sN = 0.0f; // Force using point P0 on segment S1
sD = 1.0f; // to prevent possible division by 0.0 later.
tN = e;
@@ -142,7 +142,7 @@ public:
Vector3 s = p_from - p_v0;
real_t u = f * s.dot(h);
- if (u < 0.0f || u > 1.0f) {
+ if ((u < 0.0f) || (u > 1.0f)) {
return false;
}
@@ -150,7 +150,7 @@ public:
real_t v = f * p_dir.dot(q);
- if (v < 0.0f || u + v > 1.0f) {
+ if ((v < 0.0f) || (u + v > 1.0f)) {
return false;
}
@@ -183,7 +183,7 @@ public:
Vector3 s = p_from - p_v0;
real_t u = f * s.dot(h);
- if (u < 0.0f || u > 1.0f) {
+ if ((u < 0.0f) || (u > 1.0f)) {
return false;
}
@@ -191,7 +191,7 @@ public:
real_t v = f * rel.dot(q);
- if (v < 0.0f || u + v > 1.0f) {
+ if ((v < 0.0f) || (u + v > 1.0f)) {
return false;
}
@@ -199,7 +199,7 @@ public:
// the intersection point is on the line.
real_t t = f * e2.dot(q);
- if (t > CMP_EPSILON && t <= 1.0f) { // Ray intersection.
+ if (t > (real_t)CMP_EPSILON && t <= 1.0f) { // Ray intersection.
if (r_res) {
*r_res = p_from + rel * t;
}
@@ -213,7 +213,7 @@ public:
Vector3 sphere_pos = p_sphere_pos - p_from;
Vector3 rel = (p_to - p_from);
real_t rel_l = rel.length();
- if (rel_l < CMP_EPSILON) {
+ if (rel_l < (real_t)CMP_EPSILON) {
return false; // Both points are the same.
}
Vector3 normal = rel / rel_l;
@@ -229,7 +229,7 @@ public:
real_t inters_d2 = p_sphere_radius * p_sphere_radius - ray_distance * ray_distance;
real_t inters_d = sphere_d;
- if (inters_d2 >= CMP_EPSILON) {
+ if (inters_d2 >= (real_t)CMP_EPSILON) {
inters_d -= Math::sqrt(inters_d2);
}
@@ -253,7 +253,7 @@ public:
static inline bool segment_intersects_cylinder(const Vector3 &p_from, const Vector3 &p_to, real_t p_height, real_t p_radius, Vector3 *r_res = nullptr, Vector3 *r_norm = nullptr, int p_cylinder_axis = 2) {
Vector3 rel = (p_to - p_from);
real_t rel_l = rel.length();
- if (rel_l < CMP_EPSILON) {
+ if (rel_l < (real_t)CMP_EPSILON) {
return false; // Both points are the same.
}
@@ -269,7 +269,7 @@ public:
Vector3 axis_dir;
- if (crs_l < CMP_EPSILON) {
+ if (crs_l < (real_t)CMP_EPSILON) {
Vector3 side_axis;
side_axis[(p_cylinder_axis + 1) % 3] = 1.0f; // Any side axis OK.
axis_dir = side_axis;
@@ -285,7 +285,7 @@ public:
// Convert to 2D.
real_t w2 = p_radius * p_radius - dist * dist;
- if (w2 < CMP_EPSILON) {
+ if (w2 < (real_t)CMP_EPSILON) {
return false; // Avoid numerical error.
}
Size2 size(Math::sqrt(w2), p_height * 0.5f);
@@ -366,7 +366,7 @@ public:
Vector3 rel = p_to - p_from;
real_t rel_l = rel.length();
- if (rel_l < CMP_EPSILON) {
+ if (rel_l < (real_t)CMP_EPSILON) {
return false;
}
@@ -379,7 +379,7 @@ public:
real_t den = p.normal.dot(dir);
- if (Math::abs(den) <= CMP_EPSILON) {
+ if (Math::abs(den) <= (real_t)CMP_EPSILON) {
continue; // Ignore parallel plane.
}
@@ -564,11 +564,11 @@ public:
for (int a = 0; a < polygon.size(); a++) {
real_t dist = p_plane.distance_to(polygon[a]);
- if (dist < -CMP_POINT_IN_PLANE_EPSILON) {
+ if (dist < (real_t)-CMP_POINT_IN_PLANE_EPSILON) {
location_cache[a] = LOC_INSIDE;
inside_count++;
} else {
- if (dist > CMP_POINT_IN_PLANE_EPSILON) {
+ if (dist > (real_t)CMP_POINT_IN_PLANE_EPSILON) {
location_cache[a] = LOC_OUTSIDE;
outside_count++;
} else {
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index 47e5ab2709..8c0b87cf4a 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -64,7 +64,7 @@ public:
static _ALWAYS_INLINE_ float sinc(float p_x) { return p_x == 0 ? 1 : ::sin(p_x) / p_x; }
static _ALWAYS_INLINE_ double sinc(double p_x) { return p_x == 0 ? 1 : ::sin(p_x) / p_x; }
- static _ALWAYS_INLINE_ float sincn(float p_x) { return sinc(Math_PI * p_x); }
+ static _ALWAYS_INLINE_ float sincn(float p_x) { return sinc((float)Math_PI * p_x); }
static _ALWAYS_INLINE_ double sincn(double p_x) { return sinc(Math_PI * p_x); }
static _ALWAYS_INLINE_ double cosh(double p_x) { return ::cosh(p_x); }
@@ -187,7 +187,7 @@ public:
static _ALWAYS_INLINE_ double fposmod(double p_x, double p_y) {
double value = Math::fmod(p_x, p_y);
- if ((value < 0 && p_y > 0) || (value > 0 && p_y < 0)) {
+ if (((value < 0) && (p_y > 0)) || ((value > 0) && (p_y < 0))) {
value += p_y;
}
value += 0.0;
@@ -195,7 +195,7 @@ public:
}
static _ALWAYS_INLINE_ float fposmod(float p_x, float p_y) {
float value = Math::fmod(p_x, p_y);
- if ((value < 0 && p_y > 0) || (value > 0 && p_y < 0)) {
+ if (((value < 0) && (p_y > 0)) || ((value > 0) && (p_y < 0))) {
value += p_y;
}
value += 0.0f;
@@ -220,17 +220,17 @@ public:
static _ALWAYS_INLINE_ int64_t posmod(int64_t p_x, int64_t p_y) {
int64_t value = p_x % p_y;
- if ((value < 0 && p_y > 0) || (value > 0 && p_y < 0)) {
+ if (((value < 0) && (p_y > 0)) || ((value > 0) && (p_y < 0))) {
value += p_y;
}
return value;
}
static _ALWAYS_INLINE_ double deg2rad(double p_y) { return p_y * (Math_PI / 180.0); }
- static _ALWAYS_INLINE_ float deg2rad(float p_y) { return p_y * (Math_PI / 180.0); }
+ static _ALWAYS_INLINE_ float deg2rad(float p_y) { return p_y * (float)(Math_PI / 180.0); }
static _ALWAYS_INLINE_ double rad2deg(double p_y) { return p_y * (180.0 / Math_PI); }
- static _ALWAYS_INLINE_ float rad2deg(float p_y) { return p_y * (180.0 / Math_PI); }
+ static _ALWAYS_INLINE_ float rad2deg(float p_y) { return p_y * (float)(180.0 / Math_PI); }
static _ALWAYS_INLINE_ double lerp(double p_from, double p_to, double p_weight) { return p_from + (p_to - p_from) * p_weight; }
static _ALWAYS_INLINE_ float lerp(float p_from, float p_to, float p_weight) { return p_from + (p_to - p_from) * p_weight; }
@@ -285,10 +285,10 @@ public:
static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; }
static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
- static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
+ static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * (float)8.6858896380650365530225783783321; }
static _ALWAYS_INLINE_ double db2linear(double p_db) { return Math::exp(p_db * 0.11512925464970228420089957273422); }
- static _ALWAYS_INLINE_ float db2linear(float p_db) { return Math::exp(p_db * 0.11512925464970228420089957273422); }
+ static _ALWAYS_INLINE_ float db2linear(float p_db) { return Math::exp(p_db * (float)0.11512925464970228420089957273422); }
static _ALWAYS_INLINE_ double round(double p_val) { return ::round(p_val); }
static _ALWAYS_INLINE_ float round(float p_val) { return ::roundf(p_val); }
@@ -345,9 +345,9 @@ public:
return true;
}
// Then check for approximate equality.
- float tolerance = CMP_EPSILON * abs(a);
- if (tolerance < CMP_EPSILON) {
- tolerance = CMP_EPSILON;
+ float tolerance = (float)CMP_EPSILON * abs(a);
+ if (tolerance < (float)CMP_EPSILON) {
+ tolerance = (float)CMP_EPSILON;
}
return abs(a - b) < tolerance;
}
@@ -362,7 +362,7 @@ public:
}
static _ALWAYS_INLINE_ bool is_zero_approx(float s) {
- return abs(s) < CMP_EPSILON;
+ return abs(s) < (float)CMP_EPSILON;
}
static _ALWAYS_INLINE_ bool is_equal_approx(double a, double b) {
diff --git a/core/math/octree.h b/core/math/octree.h
index 23ba4c1aa3..e73f8213b3 100644
--- a/core/math/octree.h
+++ b/core/math/octree.h
@@ -211,11 +211,6 @@ private:
E = pair_map.insert(key, pdata);
E->get().eA = p_A->pair_list.push_back(&E->get());
E->get().eB = p_B->pair_list.push_back(&E->get());
-
- /*
- if (pair_callback)
- pair_callback(pair_callback_userdata,p_A->userdata,p_B->userdata);
- */
} else {
E->get().refcount++;
}
@@ -854,11 +849,6 @@ void Octree<T, use_pairs, AL>::move(OctreeElementID p_id, const AABB &p_aabb) {
Octant *o = F->get().octant;
typename List<typename Element::OctantOwner, AL>::Element *N = F->next();
- /*
- if (!use_pairs)
- o->elements.erase( F->get().E );
- */
-
if (use_pairs && e.pairable) {
o->pairable_elements.erase(F->get().E);
} else {
diff --git a/core/math/plane.cpp b/core/math/plane.cpp
index 0ce8aed51c..6881ad4014 100644
--- a/core/math/plane.cpp
+++ b/core/math/plane.cpp
@@ -106,7 +106,7 @@ bool Plane::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3
real_t dist = (normal.dot(p_from) - d) / den;
//printf("dist is %i\n",dist);
- if (dist > CMP_EPSILON) { //this is a ray, before the emitting pos (p_from) doesn't exist
+ if (dist > (real_t)CMP_EPSILON) { //this is a ray, before the emitting pos (p_from) doesn't exist
return false;
}
@@ -129,7 +129,7 @@ bool Plane::intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vec
real_t dist = (normal.dot(p_begin) - d) / den;
//printf("dist is %i\n",dist);
- if (dist < -CMP_EPSILON || dist > (1.0f + CMP_EPSILON)) {
+ if (dist < (real_t)-CMP_EPSILON || dist > (1.0f + (real_t)CMP_EPSILON)) {
return false;
}
diff --git a/core/math/quaternion.cpp b/core/math/quaternion.cpp
index ade252d628..0a650a8578 100644
--- a/core/math/quaternion.cpp
+++ b/core/math/quaternion.cpp
@@ -129,7 +129,7 @@ Quaternion Quaternion::slerp(const Quaternion &p_to, const real_t &p_weight) con
// calculate coefficients
- if ((1.0f - cosom) > CMP_EPSILON) {
+ if ((1.0f - cosom) > (real_t)CMP_EPSILON) {
// standard case (slerp)
omega = Math::acos(cosom);
sinom = Math::sin(omega);
diff --git a/core/math/quaternion.h b/core/math/quaternion.h
index f8a2c6456e..38729ac3df 100644
--- a/core/math/quaternion.h
+++ b/core/math/quaternion.h
@@ -145,7 +145,7 @@ struct _NO_DISCARD_ Quaternion {
Vector3 c = v0.cross(v1);
real_t d = v0.dot(v1);
- if (d < -1.0f + CMP_EPSILON) {
+ if (d < -1.0f + (real_t)CMP_EPSILON) {
x = 0;
y = 1;
z = 0;
diff --git a/core/math/random_pcg.h b/core/math/random_pcg.h
index 974dbbfc2e..65fcf67664 100644
--- a/core/math/random_pcg.h
+++ b/core/math/random_pcg.h
@@ -129,7 +129,7 @@ public:
return p_mean + p_deviation * (cos(Math_TAU * randd()) * sqrt(-2.0 * log(randd()))); // Box-Muller transform
}
_FORCE_INLINE_ float randfn(float p_mean, float p_deviation) {
- return p_mean + p_deviation * (cos(Math_TAU * randf()) * sqrt(-2.0 * log(randf()))); // Box-Muller transform
+ return p_mean + p_deviation * (cos((float)Math_TAU * randf()) * sqrt(-2.0 * log(randf()))); // Box-Muller transform
}
double random(double p_from, double p_to);
diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp
index 55c1f06ff5..71953e4130 100644
--- a/core/math/transform_2d.cpp
+++ b/core/math/transform_2d.cpp
@@ -71,12 +71,12 @@ void Transform2D::rotate(const real_t p_phi) {
real_t Transform2D::get_skew() const {
real_t det = basis_determinant();
- return Math::acos(elements[0].normalized().dot(SIGN(det) * elements[1].normalized())) - Math_PI * 0.5f;
+ return Math::acos(elements[0].normalized().dot(SIGN(det) * elements[1].normalized())) - (real_t)Math_PI * 0.5f;
}
void Transform2D::set_skew(const real_t p_angle) {
real_t det = basis_determinant();
- elements[1] = SIGN(det) * elements[0].rotated((Math_PI * 0.5f + p_angle)).normalized() * elements[1].length();
+ elements[1] = SIGN(det) * elements[0].rotated(((real_t)Math_PI * 0.5f + p_angle)).normalized() * elements[1].length();
}
real_t Transform2D::get_rotation() const {
diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp
index ed4266b115..a27227905c 100644
--- a/core/math/vector2.cpp
+++ b/core/math/vector2.cpp
@@ -163,7 +163,7 @@ Vector2 Vector2::move_toward(const Vector2 &p_to, const real_t p_delta) const {
Vector2 v = *this;
Vector2 vd = p_to - v;
real_t len = vd.length();
- return len <= p_delta || len < CMP_EPSILON ? p_to : v + vd / len * p_delta;
+ return len <= p_delta || len < (real_t)CMP_EPSILON ? p_to : v + vd / len * p_delta;
}
// slide returns the component of the vector along the given plane, specified by its normal vector.
diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp
index 998c437a22..87b2ac7104 100644
--- a/core/math/vector3.cpp
+++ b/core/math/vector3.cpp
@@ -31,6 +31,9 @@
#include "vector3.h"
#include "core/math/basis.h"
+#include "core/math/vector2.h"
+#include "core/math/vector3i.h"
+#include "core/string/ustring.h"
void Vector3::rotate(const Vector3 &p_axis, const real_t p_phi) {
*this = Basis(p_axis, p_phi).xform(*this);
@@ -94,7 +97,32 @@ Vector3 Vector3::move_toward(const Vector3 &p_to, const real_t p_delta) const {
Vector3 v = *this;
Vector3 vd = p_to - v;
real_t len = vd.length();
- return len <= p_delta || len < CMP_EPSILON ? p_to : v + vd / len * p_delta;
+ return len <= p_delta || len < (real_t)CMP_EPSILON ? p_to : v + vd / len * p_delta;
+}
+
+Vector2 Vector3::octahedron_encode() const {
+ Vector3 n = *this;
+ n /= Math::abs(n.x) + Math::abs(n.y) + Math::abs(n.z);
+ Vector2 o;
+ if (n.z >= 0.0f) {
+ o.x = n.x;
+ o.y = n.y;
+ } else {
+ o.x = (1.0f - Math::abs(n.y)) * (n.x >= 0.0f ? 1.0f : -1.0f);
+ o.y = (1.0f - Math::abs(n.x)) * (n.y >= 0.0f ? 1.0f : -1.0f);
+ }
+ o.x = o.x * 0.5f + 0.5f;
+ o.y = o.y * 0.5f + 0.5f;
+ return o;
+}
+
+Vector3 Vector3::octahedron_decode(const Vector2 &p_oct) {
+ Vector2 f(p_oct.x * 2.0f - 1.0f, p_oct.y * 2.0f - 1.0f);
+ Vector3 n(f.x, f.y, 1.0f - Math::abs(f.x) - Math::abs(f.y));
+ float t = CLAMP(-n.z, 0.0f, 1.0f);
+ n.x += n.x >= 0 ? -t : t;
+ n.y += n.y >= 0 ? -t : t;
+ return n.normalized();
}
Basis Vector3::outer(const Vector3 &p_with) const {
@@ -112,3 +140,7 @@ bool Vector3::is_equal_approx(const Vector3 &p_v) const {
Vector3::operator String() const {
return "(" + String::num_real(x, false) + ", " + String::num_real(y, false) + ", " + String::num_real(z, false) + ")";
}
+
+Vector3::operator Vector3i() const {
+ return Vector3i(x, y, z);
+}
diff --git a/core/math/vector3.h b/core/math/vector3.h
index c1da159e00..89b0095741 100644
--- a/core/math/vector3.h
+++ b/core/math/vector3.h
@@ -31,12 +31,13 @@
#ifndef VECTOR3_H
#define VECTOR3_H
+#include "core/error/error_macros.h"
#include "core/math/math_funcs.h"
-#include "core/math/vector2.h"
-#include "core/math/vector3i.h"
-#include "core/string/ustring.h"
+class String;
struct Basis;
+struct Vector2;
+struct Vector3i;
struct _NO_DISCARD_ Vector3 {
static const int AXIS_COUNT = 3;
@@ -104,30 +105,8 @@ struct _NO_DISCARD_ Vector3 {
Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const;
Vector3 move_toward(const Vector3 &p_to, const real_t p_delta) const;
- _FORCE_INLINE_ Vector2 octahedron_encode() const {
- Vector3 n = *this;
- n /= Math::abs(n.x) + Math::abs(n.y) + Math::abs(n.z);
- Vector2 o;
- if (n.z >= 0.0f) {
- o.x = n.x;
- o.y = n.y;
- } else {
- o.x = (1.0f - Math::abs(n.y)) * (n.x >= 0.0f ? 1.0f : -1.0f);
- o.y = (1.0f - Math::abs(n.x)) * (n.y >= 0.0f ? 1.0f : -1.0f);
- }
- o.x = o.x * 0.5f + 0.5f;
- o.y = o.y * 0.5f + 0.5f;
- return o;
- }
-
- static _FORCE_INLINE_ Vector3 octahedron_decode(const Vector2 &p_oct) {
- Vector2 f(p_oct.x * 2.0f - 1.0f, p_oct.y * 2.0f - 1.0f);
- Vector3 n(f.x, f.y, 1.0f - Math::abs(f.x) - Math::abs(f.y));
- float t = CLAMP(-n.z, 0.0f, 1.0f);
- n.x += n.x >= 0 ? -t : t;
- n.y += n.y >= 0 ? -t : t;
- return n.normalized();
- }
+ Vector2 octahedron_encode() const;
+ static Vector3 octahedron_decode(const Vector2 &p_oct);
_FORCE_INLINE_ Vector3 cross(const Vector3 &p_with) const;
_FORCE_INLINE_ real_t dot(const Vector3 &p_with) const;
@@ -183,16 +162,9 @@ struct _NO_DISCARD_ Vector3 {
_FORCE_INLINE_ bool operator>=(const Vector3 &p_v) const;
operator String() const;
- _FORCE_INLINE_ operator Vector3i() const {
- return Vector3i(x, y, z);
- }
+ operator Vector3i() const;
_FORCE_INLINE_ Vector3() {}
- _FORCE_INLINE_ Vector3(const Vector3i &p_ivec) {
- x = p_ivec.x;
- y = p_ivec.y;
- z = p_ivec.z;
- }
_FORCE_INLINE_ Vector3(const real_t p_x, const real_t p_y, const real_t p_z) {
x = p_x;
y = p_y;
@@ -344,7 +316,7 @@ Vector3 &Vector3::operator*=(const real_t p_scalar) {
}
// Multiplication operators required to workaround issues with LLVM using implicit conversion
-// to Vector2i instead for integers where it should not.
+// to Vector3i instead for integers where it should not.
_FORCE_INLINE_ Vector3 operator*(const float p_scalar, const Vector3 &p_vec) {
return p_vec * p_scalar;
diff --git a/core/math/vector3i.cpp b/core/math/vector3i.cpp
index ac79b3c7ea..b8e74ea6d2 100644
--- a/core/math/vector3i.cpp
+++ b/core/math/vector3i.cpp
@@ -30,6 +30,9 @@
#include "vector3i.h"
+#include "core/math/vector3.h"
+#include "core/string/ustring.h"
+
void Vector3i::set_axis(const int p_axis, const int32_t p_value) {
ERR_FAIL_INDEX(p_axis, 3);
coord[p_axis] = p_value;
@@ -58,3 +61,7 @@ Vector3i Vector3i::clamp(const Vector3i &p_min, const Vector3i &p_max) const {
Vector3i::operator String() const {
return "(" + itos(x) + ", " + itos(y) + ", " + itos(z) + ")";
}
+
+Vector3i::operator Vector3() const {
+ return Vector3(x, y, z);
+}
diff --git a/core/math/vector3i.h b/core/math/vector3i.h
index d166de80aa..2a4c7e2e97 100644
--- a/core/math/vector3i.h
+++ b/core/math/vector3i.h
@@ -32,8 +32,9 @@
#define VECTOR3I_H
#include "core/math/math_funcs.h"
-#include "core/string/ustring.h"
-#include "core/typedefs.h"
+
+class String;
+struct Vector3;
struct _NO_DISCARD_ Vector3i {
enum Axis {
@@ -105,6 +106,7 @@ struct _NO_DISCARD_ Vector3i {
_FORCE_INLINE_ bool operator>=(const Vector3i &p_v) const;
operator String() const;
+ operator Vector3() const;
_FORCE_INLINE_ Vector3i() {}
_FORCE_INLINE_ Vector3i(const int32_t p_x, const int32_t p_y, const int32_t p_z) {
diff --git a/core/object/object.cpp b/core/object/object.cpp
index f966607e03..a8a49bd22e 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -402,13 +402,9 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid
#endif
}
- //try built-in setgetter
+ // Try built-in setter.
{
if (ClassDB::set_property(this, p_name, p_value, r_valid)) {
- /*
- if (r_valid)
- *r_valid=true;
- */
return;
}
}
@@ -421,7 +417,6 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid
return;
} else if (p_name == CoreStringNames::get_singleton()->_meta) {
- //set_meta(p_name,p_value);
metadata = p_value.duplicate();
if (r_valid) {
*r_valid = true;
@@ -429,7 +424,7 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid
return;
}
- //something inside the object... :|
+ // Something inside the object... :|
bool success = _setv(p_name, p_value);
if (success) {
if (r_valid) {
@@ -485,7 +480,7 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const {
#endif
}
- //try built-in setgetter
+ // Try built-in getter.
{
if (ClassDB::get_property(const_cast<Object *>(this), p_name, ret)) {
if (r_valid) {
@@ -510,7 +505,7 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const {
return ret;
} else {
- //something inside the object... :|
+ // Something inside the object... :|
bool success = _getv(p_name, ret);
if (success) {
if (r_valid) {
diff --git a/core/object/object.h b/core/object/object.h
index be360703bc..b5be1cf0e7 100644
--- a/core/object/object.h
+++ b/core/object/object.h
@@ -245,13 +245,7 @@ struct MethodInfo {
MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5);
};
-// old cast_to
-//if ( is_type(T::get_class_static()) )
-//return static_cast<T*>(this);
-////else
-//return nullptr;
-
-// API used to extend in GDNative and other C compatible compiled languages
+// API used to extend in GDNative and other C compatible compiled languages.
class MethodBind;
struct ObjectNativeExtension {
@@ -297,8 +291,10 @@ struct ObjectNativeExtension {
#define GDVIRTUAL_IS_OVERRIDDEN_PTR(m_obj, m_name) m_obj->_gdvirtual_##m_name##_overridden()
/*
- the following is an incomprehensible blob of hacks and workarounds to compensate for many of the fallencies in C++. As a plus, this macro pretty much alone defines the object model.
-*/
+ * The following is an incomprehensible blob of hacks and workarounds to
+ * compensate for many of the fallacies in C++. As a plus, this macro pretty
+ * much alone defines the object model.
+ */
#define REVERSE_GET_PROPERTY_LIST \
public: \
@@ -534,7 +530,7 @@ private:
Set<String> editor_section_folding;
#endif
ScriptInstance *script_instance = nullptr;
- Variant script; //reference does not yet exist, store it in a
+ Variant script; // Reference does not exist yet, store it in a Variant.
Dictionary metadata;
mutable StringName _class_name;
mutable const StringName *_class_ptr = nullptr;
@@ -583,6 +579,7 @@ protected:
}
return can_die;
}
+
friend class NativeExtensionMethodBind;
_ALWAYS_INLINE_ const ObjectNativeExtension *_get_extension() const { return _extension; }
_ALWAYS_INLINE_ GDExtensionClassInstancePtr _get_extension_instance() const { return _extension_instance; }
@@ -617,9 +614,6 @@ protected:
static void get_valid_parents_static(List<String> *p_parents);
static void _get_valid_parents_static(List<String> *p_parents);
- //Variant _call_bind(const StringName& p_name, const Variant& p_arg1 = Variant(), const Variant& p_arg2 = Variant(), const Variant& p_arg3 = Variant(), const Variant& p_arg4 = Variant());
- //void _call_deferred_bind(const StringName& p_name, const Variant& p_arg1 = Variant(), const Variant& p_arg2 = Variant(), const Variant& p_arg3 = Variant(), const Variant& p_arg4 = Variant());
-
Variant _call_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error);
Variant _call_deferred_bind(const Variant **p_args, int p_argcount, Callable::CallError &r_error);
@@ -641,7 +635,7 @@ protected:
void _disconnect(const StringName &p_signal, const Callable &p_callable, bool p_force = false);
-public: //should be protected, but bug in clang++
+public: // Should be protected, but bug in clang++.
static void initialize_class();
_FORCE_INLINE_ static void register_custom_data_to_otdb() {}
@@ -729,8 +723,6 @@ public:
}
/* IAPI */
- //void set(const String& p_name, const Variant& p_value);
- //Variant get(const String& p_name) const;
void set(const StringName &p_name, const Variant &p_value, bool *r_valid = nullptr);
Variant get(const StringName &p_name, bool *r_valid = nullptr) const;
@@ -748,7 +740,7 @@ public:
void notification(int p_notification, bool p_reversed = false);
virtual String to_string();
- //used mainly by script, get and set all INCLUDING string
+ // Used mainly by script, get and set all INCLUDING string.
virtual Variant getvar(const Variant &p_key, bool *r_valid = nullptr) const;
virtual void setvar(const Variant &p_key, const Variant &p_value, bool *r_valid = nullptr);
@@ -757,8 +749,6 @@ public:
void set_script(const Variant &p_script);
Variant get_script() const;
- /* SCRIPT */
-
bool has_meta(const StringName &p_name) const;
void set_meta(const StringName &p_name, const Variant &p_value);
void remove_meta(const StringName &p_name);
@@ -768,13 +758,15 @@ public:
#ifdef TOOLS_ENABLED
void set_edited(bool p_edited);
bool is_edited() const;
- uint32_t get_edited_version() const; //this function is used to check when something changed beyond a point, it's used mainly for generating previews
+ // This function is used to check when something changed beyond a point, it's used mainly for generating previews.
+ uint32_t get_edited_version() const;
#endif
void set_script_instance(ScriptInstance *p_instance);
_FORCE_INLINE_ ScriptInstance *get_script_instance() const { return script_instance; }
- void set_script_and_instance(const Variant &p_script, ScriptInstance *p_instance); //some script languages can't control instance creation, so this function eases the process
+ // Some script languages can't control instance creation, so this function eases the process.
+ void set_script_and_instance(const Variant &p_script, ScriptInstance *p_instance);
void add_user_signal(const MethodInfo &p_signal);
Error emit_signal(const StringName &p_name, VARIANT_ARG_LIST);
@@ -803,10 +795,11 @@ public:
virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const;
- String tr(const StringName &p_message, const StringName &p_context = "") const; // translate message (internationalization)
+ // Translate message (internationalization).
+ String tr(const StringName &p_message, const StringName &p_context = "") const;
String tr_n(const StringName &p_message, const StringName &p_message_plural, int p_n, const StringName &p_context = "") const;
- bool _is_queued_for_deletion = false; // set to true by SceneTree::queue_delete()
+ bool _is_queued_for_deletion = false; // Set to true by SceneTree::queue_delete().
bool is_queued_for_deletion() const;
_FORCE_INLINE_ void set_message_translation(bool p_enable) { _can_translate = p_enable; }
@@ -838,14 +831,14 @@ bool predelete_handler(Object *p_object);
void postinitialize_handler(Object *p_object);
class ObjectDB {
-//this needs to add up to 63, 1 bit is for reference
+// This needs to add up to 63, 1 bit is for reference.
#define OBJECTDB_VALIDATOR_BITS 39
#define OBJECTDB_VALIDATOR_MASK ((uint64_t(1) << OBJECTDB_VALIDATOR_BITS) - 1)
#define OBJECTDB_SLOT_MAX_COUNT_BITS 24
#define OBJECTDB_SLOT_MAX_COUNT_MASK ((uint64_t(1) << OBJECTDB_SLOT_MAX_COUNT_BITS) - 1)
#define OBJECTDB_REFERENCE_BIT (uint64_t(1) << (OBJECTDB_SLOT_MAX_COUNT_BITS + OBJECTDB_VALIDATOR_BITS))
- struct ObjectSlot { //128 bits per slot
+ struct ObjectSlot { // 128 bits per slot.
uint64_t validator : OBJECTDB_VALIDATOR_BITS;
uint64_t next_free : OBJECTDB_SLOT_MAX_COUNT_BITS;
uint64_t is_ref_counted : 1;
@@ -875,7 +868,7 @@ public:
uint64_t id = p_instance_id;
uint32_t slot = id & OBJECTDB_SLOT_MAX_COUNT_MASK;
- ERR_FAIL_COND_V(slot >= slot_max, nullptr); //this should never happen unless RID is corrupted
+ ERR_FAIL_COND_V(slot >= slot_max, nullptr); // This should never happen unless RID is corrupted.
spin_lock.lock();
diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp
index 9fec7c397d..b14296b815 100644
--- a/core/object/script_language.cpp
+++ b/core/object/script_language.cpp
@@ -46,10 +46,12 @@ bool ScriptServer::languages_finished = false;
ScriptEditRequestFunction ScriptServer::edit_request_func = nullptr;
void Script::_notification(int p_what) {
- if (p_what == NOTIFICATION_POSTINITIALIZE) {
- if (EngineDebugger::is_active()) {
- EngineDebugger::get_script_debugger()->set_break_language(get_language());
- }
+ switch (p_what) {
+ case NOTIFICATION_POSTINITIALIZE: {
+ if (EngineDebugger::is_active()) {
+ EngineDebugger::get_script_debugger()->set_break_language(get_language());
+ }
+ } break;
}
}
diff --git a/core/object/undo_redo.cpp b/core/object/undo_redo.cpp
index f72dec8edf..b78328fb42 100644
--- a/core/object/undo_redo.cpp
+++ b/core/object/undo_redo.cpp
@@ -34,6 +34,20 @@
#include "core/os/os.h"
#include "core/templates/local_vector.h"
+void UndoRedo::Operation::delete_reference() {
+ if (type != Operation::TYPE_REFERENCE) {
+ return;
+ }
+ if (ref.is_valid()) {
+ ref.unref();
+ } else {
+ Object *obj = ObjectDB::get_instance(object);
+ if (obj) {
+ memdelete(obj);
+ }
+ }
+}
+
void UndoRedo::_discard_redo() {
if (current_action == actions.size() - 1) {
return;
@@ -41,16 +55,7 @@ void UndoRedo::_discard_redo() {
for (int i = current_action + 1; i < actions.size(); i++) {
for (Operation &E : actions.write[i].do_ops) {
- if (E.type == Operation::TYPE_REFERENCE) {
- if (E.ref.is_valid()) {
- E.ref.unref();
- } else {
- Object *obj = ObjectDB::get_instance(E.object);
- if (obj) {
- memdelete(obj);
- }
- }
- }
+ E.delete_reference();
}
//ERASE do data
}
@@ -97,13 +102,7 @@ void UndoRedo::create_action(const String &p_name, MergeMode p_mode) {
for (unsigned int i = 0; i < to_remove.size(); i++) {
List<Operation>::Element *E = to_remove[i];
// Delete all object references
- if (E->get().type == Operation::TYPE_REFERENCE) {
- Object *obj = ObjectDB::get_instance(E->get().object);
-
- if (obj) {
- memdelete(obj);
- }
- }
+ E->get().delete_reference();
E->erase();
}
}
@@ -270,16 +269,7 @@ void UndoRedo::_pop_history_tail() {
}
for (Operation &E : actions.write[0].undo_ops) {
- if (E.type == Operation::TYPE_REFERENCE) {
- if (E.ref.is_valid()) {
- E.ref.unref();
- } else {
- Object *obj = ObjectDB::get_instance(E.object);
- if (obj) {
- memdelete(obj);
- }
- }
- }
+ E.delete_reference();
}
actions.remove_at(0);
diff --git a/core/object/undo_redo.h b/core/object/undo_redo.h
index 75639f8abf..5eede74e2d 100644
--- a/core/object/undo_redo.h
+++ b/core/object/undo_redo.h
@@ -66,6 +66,8 @@ private:
ObjectID object;
StringName name;
Variant args[VARIANT_ARG_MAX];
+
+ void delete_reference();
};
struct Action {
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 0032e8e4bc..9837b6e0aa 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -358,6 +358,10 @@ int OS::get_processor_count() const {
return 1;
}
+String OS::get_processor_name() const {
+ return "";
+}
+
bool OS::can_use_threads() const {
#ifdef NO_THREADS
return false;
@@ -387,16 +391,18 @@ bool OS::has_feature(const String &p_feature) {
return true;
}
#else
- if (p_feature == "release")
+ if (p_feature == "release") {
return true;
+ }
#endif
#ifdef TOOLS_ENABLED
if (p_feature == "editor") {
return true;
}
#else
- if (p_feature == "standalone")
+ if (p_feature == "standalone") {
return true;
+ }
#endif
if (sizeof(void *) == 8 && p_feature == "64") {
diff --git a/core/os/os.h b/core/os/os.h
index 188900a070..808d704b3d 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -302,6 +302,7 @@ public:
virtual void set_exit_code(int p_code);
virtual int get_processor_count() const;
+ virtual String get_processor_name() const;
virtual int get_default_thread_pool_size() const { return get_processor_count(); }
virtual String get_unique_id() const;
diff --git a/core/os/spin_lock.h b/core/os/spin_lock.h
index 27d915e0ae..6e8d7f46d5 100644
--- a/core/os/spin_lock.h
+++ b/core/os/spin_lock.h
@@ -41,7 +41,7 @@ class SpinLock {
public:
_ALWAYS_INLINE_ void lock() {
while (locked.test_and_set(std::memory_order_acquire)) {
- ;
+ // Continue.
}
}
_ALWAYS_INLINE_ void unlock() {
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index a4b6a589f3..63aa8050c4 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -108,6 +108,8 @@ extern void unregister_global_constants();
static ResourceUID *resource_uid = nullptr;
+static bool _is_core_extensions_registered = false;
+
void register_core_types() {
//consistency check
static_assert(sizeof(Callable) <= 16);
@@ -314,11 +316,16 @@ void register_core_extensions() {
NativeExtension::initialize_native_extensions();
native_extension_manager->load_extensions();
native_extension_manager->initialize_extensions(NativeExtension::INITIALIZATION_LEVEL_CORE);
+ _is_core_extensions_registered = true;
}
-void unregister_core_types() {
- native_extension_manager->deinitialize_extensions(NativeExtension::INITIALIZATION_LEVEL_CORE);
+void unregister_core_extensions() {
+ if (_is_core_extensions_registered) {
+ native_extension_manager->deinitialize_extensions(NativeExtension::INITIALIZATION_LEVEL_CORE);
+ }
+}
+void unregister_core_types() {
memdelete(native_extension_manager);
memdelete(resource_uid);
diff --git a/core/register_core_types.h b/core/register_core_types.h
index 0fd4e73c40..dfb2d8ac80 100644
--- a/core/register_core_types.h
+++ b/core/register_core_types.h
@@ -36,5 +36,6 @@ void register_core_settings();
void register_core_extensions();
void register_core_singletons();
void unregister_core_types();
+void unregister_core_extensions();
#endif // REGISTER_CORE_TYPES_H
diff --git a/core/string/translation.cpp b/core/string/translation.cpp
index 811ae95e9f..c41828de05 100644
--- a/core/string/translation.cpp
+++ b/core/string/translation.cpp
@@ -685,8 +685,12 @@ Ref<Translation> TranslationServer::get_tool_translation() const {
String TranslationServer::get_tool_locale() {
#ifdef TOOLS_ENABLED
- if (TranslationServer::get_singleton()->get_tool_translation().is_valid() && (Engine::get_singleton()->is_editor_hint() || Engine::get_singleton()->is_project_manager_hint())) {
- return tool_translation->get_locale();
+ if (Engine::get_singleton()->is_editor_hint() || Engine::get_singleton()->is_project_manager_hint()) {
+ if (TranslationServer::get_singleton()->get_tool_translation().is_valid()) {
+ return tool_translation->get_locale();
+ } else {
+ return "en";
+ }
} else {
#else
{
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp
index c4edc8c086..759c121f29 100644
--- a/core/string/ustring.cpp
+++ b/core/string/ustring.cpp
@@ -103,9 +103,12 @@ bool Char16String::operator<(const Char16String &p_right) const {
}
Char16String &Char16String::operator+=(char16_t p_char) {
- resize(size() ? size() + 1 : 2);
- set(length(), 0);
- set(length() - 1, p_char);
+ const int lhs_len = length();
+ resize(lhs_len + 2);
+
+ char16_t *dst = ptrw();
+ dst[lhs_len] = p_char;
+ dst[lhs_len + 1] = 0;
return *this;
}
@@ -158,9 +161,12 @@ bool CharString::operator<(const CharString &p_right) const {
}
CharString &CharString::operator+=(char p_char) {
- resize(size() ? size() + 1 : 2);
- set(length(), 0);
- set(length() - 1, p_char);
+ const int lhs_len = length();
+ resize(lhs_len + 2);
+
+ char *dst = ptrw();
+ dst[lhs_len] = p_char;
+ dst[lhs_len + 1] = 0;
return *this;
}
@@ -304,11 +310,7 @@ void String::copy_from(const char *p_cstr) {
return;
}
- int len = 0;
- const char *ptr = p_cstr;
- while (*(ptr++) != 0) {
- len++;
- }
+ const size_t len = strlen(p_cstr);
if (len == 0) {
resize(0);
@@ -319,7 +321,7 @@ void String::copy_from(const char *p_cstr) {
char32_t *dst = this->ptrw();
- for (int i = 0; i < len + 1; i++) {
+ for (size_t i = 0; i <= len; i++) {
dst[i] = p_cstr[i];
}
}
@@ -374,13 +376,14 @@ void String::copy_from(const wchar_t *p_cstr, const int p_clip_to) {
void String::copy_from(const char32_t &p_char) {
resize(2);
+ char32_t *dst = ptrw();
if ((p_char >= 0xd800 && p_char <= 0xdfff) || (p_char > 0x10ffff)) {
print_error("Unicode parsing error: Invalid unicode codepoint " + num_int64(p_char, 16) + ".");
- set(0, 0xfffd);
+ dst[0] = 0xfffd;
} else {
- set(0, p_char);
+ dst[0] = p_char;
}
- set(1, 0);
+ dst[1] = 0;
}
void String::copy_from(const char32_t *p_cstr) {
@@ -429,9 +432,8 @@ void String::copy_from(const char32_t *p_cstr, const int p_clip_to) {
// p_length <= p_char strlen
void String::copy_from_unchecked(const char32_t *p_char, const int p_length) {
resize(p_length + 1);
- set(p_length, 0);
-
char32_t *dst = ptrw();
+ dst[p_length] = 0;
for (int i = 0; i < p_length; i++) {
if ((p_char[i] >= 0xd800 && p_char[i] <= 0xdfff) || (p_char[i] > 0x10ffff)) {
@@ -484,27 +486,23 @@ String operator+(char32_t p_chr, const String &p_str) {
}
String &String::operator+=(const String &p_str) {
- if (is_empty()) {
+ const int lhs_len = length();
+ if (lhs_len == 0) {
*this = p_str;
return *this;
}
- if (p_str.is_empty()) {
+ const int rhs_len = p_str.length();
+ if (rhs_len == 0) {
return *this;
}
- int from = length();
-
- resize(length() + p_str.size());
+ resize(lhs_len + rhs_len + 1);
const char32_t *src = p_str.get_data();
- char32_t *dst = ptrw();
-
- set(length(), 0);
+ char32_t *dst = ptrw() + lhs_len;
- for (int i = 0; i < p_str.length(); i++) {
- dst[from + i] = src[i];
- }
+ memcpy(dst, src, (rhs_len + 1) * sizeof(char32_t));
return *this;
}
@@ -514,22 +512,15 @@ String &String::operator+=(const char *p_str) {
return *this;
}
- int src_len = 0;
- const char *ptr = p_str;
- while (*(ptr++) != 0) {
- src_len++;
- }
-
- int from = length();
+ const int lhs_len = length();
+ const size_t rhs_len = strlen(p_str);
- resize(from + src_len + 1);
+ resize(lhs_len + rhs_len + 1);
- char32_t *dst = ptrw();
+ char32_t *dst = ptrw() + lhs_len;
- set(length(), 0);
-
- for (int i = 0; i < src_len; i++) {
- dst[from + i] = p_str[i];
+ for (size_t i = 0; i <= rhs_len; i++) {
+ dst[i] = p_str[i];
}
return *this;
@@ -552,14 +543,16 @@ String &String::operator+=(const char32_t *p_str) {
}
String &String::operator+=(char32_t p_char) {
- resize(size() ? size() + 1 : 2);
- set(length(), 0);
+ const int lhs_len = length();
+ resize(lhs_len + 2);
+ char32_t *dst = ptrw();
if ((p_char >= 0xd800 && p_char <= 0xdfff) || (p_char > 0x10ffff)) {
print_error("Unicode parsing error: Invalid unicode codepoint " + num_int64(p_char, 16) + ".");
- set(length() - 1, 0xfffd);
+ dst[lhs_len] = 0xfffd;
} else {
- set(length() - 1, p_char);
+ dst[lhs_len] = p_char;
}
+ dst[lhs_len + 1] = 0;
return *this;
}
diff --git a/core/templates/vmap.h b/core/templates/vmap.h
index 013c4e4262..37622258db 100644
--- a/core/templates/vmap.h
+++ b/core/templates/vmap.h
@@ -142,6 +142,9 @@ public:
}
int find_nearest(const T &p_val) const {
+ if (_cowdata.is_empty()) {
+ return -1;
+ }
bool exact;
return _find(p_val, exact);
}
diff --git a/core/typedefs.h b/core/typedefs.h
index 5929b5123b..2c32d102da 100644
--- a/core/typedefs.h
+++ b/core/typedefs.h
@@ -103,7 +103,7 @@
#endif
#ifndef SIGN
-#define SIGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0)))
+#define SIGN(m_v) (((m_v) == 0) ? (0.0f) : (((m_v) < 0) ? (-1.0f) : (+1.0f)))
#endif
#ifndef MIN
diff --git a/core/variant/type_info.h b/core/variant/type_info.h
index 5ae35c92d3..ee050cff4f 100644
--- a/core/variant/type_info.h
+++ b/core/variant/type_info.h
@@ -245,8 +245,9 @@ namespace godot {
namespace details {
inline String enum_qualified_name_to_class_info_name(const String &p_qualified_name) {
Vector<String> parts = p_qualified_name.split("::", false);
- if (parts.size() <= 2)
+ if (parts.size() <= 2) {
return String(".").join(parts);
+ }
// Contains namespace. We only want the class and enum names.
return parts[parts.size() - 2] + "." + parts[parts.size() - 1];
}
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index e9fae91ddb..17cb50d1a4 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -2405,7 +2405,7 @@
Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string such as [code]"Hello,Something,Else"[/code].
</constant>
<constant name="PROPERTY_HINT_ENUM_SUGGESTION" value="3" enum="PropertyHint">
- Hints that a string property is can be an enumerated value to pick in a list specified via a hint string such as [code]"Hello,Something,Else"[/code].
+ Hints that a string property can be an enumerated value to pick in a list specified via a hint string such as [code]"Hello,Something,Else"[/code].
Unlike [constant PROPERTY_HINT_ENUM] a property with this hint still accepts arbitrary values and can be empty. The list of values serves to suggest possible values.
</constant>
<constant name="PROPERTY_HINT_EXP_EASING" value="4" enum="PropertyHint">
diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml
index f06bef4b74..99d21706ee 100644
--- a/doc/classes/AnimationNode.xml
+++ b/doc/classes/AnimationNode.xml
@@ -46,7 +46,7 @@
<method name="_has_filter" qualifiers="virtual const">
<return type="bool" />
<description>
- Returns [code]true[/code] whether you want the blend tree editor to display filter editing on this node.
+ Returns whether you want the blend tree editor to display filter editing on this node.
</description>
</method>
<method name="_process" qualifiers="virtual const">
@@ -127,7 +127,7 @@
<return type="bool" />
<argument index="0" name="path" type="NodePath" />
<description>
- Returns [code]true[/code] whether a given path is filtered.
+ Returns whether the given path is filtered.
</description>
</method>
<method name="remove_input">
@@ -150,7 +150,7 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="value" type="Variant" />
<description>
- Sets a custom parameter. These are used as local storage, because resources can be reused across the tree or scenes.
+ Sets a custom parameter. These are used as local memory, because resources can be reused across the tree or scenes.
</description>
</method>
</methods>
@@ -162,7 +162,7 @@
<signals>
<signal name="removed_from_graph">
<description>
- Called when the node was removed from the graph.
+ Emitted when the node was removed from the graph.
</description>
</signal>
<signal name="tree_changed">
diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml
index d878d8bb65..1e076654fb 100644
--- a/doc/classes/AudioServer.xml
+++ b/doc/classes/AudioServer.xml
@@ -29,25 +29,12 @@
Adds an [AudioEffect] effect to the bus [code]bus_idx[/code] at [code]at_position[/code].
</description>
</method>
- <method name="capture_get_device">
- <return type="String" />
- <description>
- Name of the current device for audio input (see [method capture_get_device_list]). The value [code]"Default"[/code] means that the system-wide default audio input is currently used.
- </description>
- </method>
<method name="capture_get_device_list">
<return type="Array" />
<description>
Returns the names of all audio input devices detected on the system.
</description>
</method>
- <method name="capture_set_device">
- <return type="void" />
- <argument index="0" name="name" type="String" />
- <description>
- Sets which audio input device is used for audio capture. On systems with multiple audio inputs (such as analog and USB), this can be used to select the audio input device. Setting the value [code]"Default"[/code] will record audio from the system-wide default audio input. If an invalid device name is set, the value will be reverted back to [code]"Default"[/code].
- </description>
- </method>
<method name="generate_bus_layout" qualifiers="const">
<return type="AudioBusLayout" />
<description>
@@ -308,6 +295,9 @@
<member name="bus_count" type="int" setter="set_bus_count" getter="get_bus_count" default="1">
Number of available audio buses.
</member>
+ <member name="capture_device" type="String" setter="capture_set_device" getter="capture_get_device" default="&quot;Default&quot;">
+ Name of the current device for audio input (see [method get_device_list]). On systems with multiple audio inputs (such as analog, USB and HDMI audio), this can be used to select the audio input device. The value [code]"Default"[/code] will record audio on the system-wide default audio input. If an invalid device name is set, the value will be reverted back to [code]"Default"[/code].
+ </member>
<member name="device" type="String" setter="set_device" getter="get_device" default="&quot;Default&quot;">
Name of the current device for audio output (see [method get_device_list]). On systems with multiple audio outputs (such as analog, USB and HDMI audio), this can be used to select the audio output device. The value [code]"Default"[/code] will play audio on the system-wide default audio output. If an invalid device name is set, the value will be reverted back to [code]"Default"[/code].
</member>
diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml
index 1e6f700c7c..6343da6eed 100644
--- a/doc/classes/AudioStream.xml
+++ b/doc/classes/AudioStream.xml
@@ -39,6 +39,12 @@
Returns the length of the audio stream in seconds.
</description>
</method>
+ <method name="instance_playback">
+ <return type="AudioStreamPlayback" />
+ <description>
+ Returns an AudioStreamPlayback. Useful for when you want to extend `_instance_playback` but call `instance_playback` from an internally held AudioStream subresource. An example of this can be found in the source files for `AudioStreamRandomPitch::instance_playback`.
+ </description>
+ </method>
<method name="is_monophonic" qualifiers="const">
<return type="bool" />
<description>
diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml
index 9abdddfa5e..ae7b0afaa7 100644
--- a/doc/classes/BaseMaterial3D.xml
+++ b/doc/classes/BaseMaterial3D.xml
@@ -132,8 +132,8 @@
If [code]true[/code], clearcoat rendering is enabled. Adds a secondary transparent pass to the lighting calculation resulting in an added specular blob. This makes materials appear as if they have a clear layer on them that can be either glossy or rough.
[b]Note:[/b] Clearcoat rendering is not visible if the material's [member shading_mode] is [constant SHADING_MODE_UNSHADED].
</member>
- <member name="clearcoat_gloss" type="float" setter="set_clearcoat_gloss" getter="get_clearcoat_gloss" default="0.5">
- Sets the roughness of the clearcoat pass. A higher value results in a smoother clearcoat while a lower value results in a rougher clearcoat.
+ <member name="clearcoat_roughness" type="float" setter="set_clearcoat_roughness" getter="get_clearcoat_roughness" default="0.5">
+ Sets the roughness of the clearcoat pass. A higher value results in a rougher clearcoat while a lower value results in a smoother clearcoat.
</member>
<member name="clearcoat_texture" type="Texture2D" setter="set_texture" getter="get_texture">
Texture that defines the strength of the clearcoat effect and the glossiness of the clearcoat. Strength is specified in the red channel while glossiness is specified in the green channel.
@@ -319,6 +319,7 @@
</member>
<member name="specular_mode" type="int" setter="set_specular_mode" getter="get_specular_mode" enum="BaseMaterial3D.SpecularMode" default="0">
The method for rendering the specular blob. See [enum SpecularMode].
+ [b]Note:[/b] Only applies to the specular blob. Does not affect specular reflections from the Sky, SSR, or ReflectionProbes.
</member>
<member name="subsurf_scatter_enabled" type="bool" setter="set_feature" getter="get_feature" default="false">
If [code]true[/code], subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges.
@@ -664,16 +665,10 @@
<constant name="SPECULAR_SCHLICK_GGX" value="0" enum="SpecularMode">
Default specular blob.
</constant>
- <constant name="SPECULAR_BLINN" value="1" enum="SpecularMode">
- Older specular algorithm, included for compatibility.
- </constant>
- <constant name="SPECULAR_PHONG" value="2" enum="SpecularMode">
- Older specular algorithm, included for compatibility.
- </constant>
- <constant name="SPECULAR_TOON" value="3" enum="SpecularMode">
+ <constant name="SPECULAR_TOON" value="1" enum="SpecularMode">
Toon blob which changes size based on roughness.
</constant>
- <constant name="SPECULAR_DISABLED" value="4" enum="SpecularMode">
+ <constant name="SPECULAR_DISABLED" value="2" enum="SpecularMode">
No specular blob.
</constant>
<constant name="BILLBOARD_DISABLED" value="0" enum="BillboardMode">
diff --git a/doc/classes/CharacterBody2D.xml b/doc/classes/CharacterBody2D.xml
index 75237f8df0..28060f6579 100644
--- a/doc/classes/CharacterBody2D.xml
+++ b/doc/classes/CharacterBody2D.xml
@@ -55,7 +55,7 @@
<method name="get_real_velocity" qualifiers="const">
<return type="Vector2" />
<description>
- Returns the current real velocity since the last call to [method move_and_slide]. For example, when you climb a slope, you will move diagonally even though the velocity is horizontal. This method returns the diagonal movement, as opposed to [member motion_velocity] which returns the requested velocity.
+ Returns the current real velocity since the last call to [method move_and_slide]. For example, when you climb a slope, you will move diagonally even though the velocity is horizontal. This method returns the diagonal movement, as opposed to [member velocity] which returns the requested velocity.
</description>
</method>
<method name="get_slide_collision">
@@ -131,9 +131,8 @@
<method name="move_and_slide">
<return type="bool" />
<description>
- Moves the body based on [member motion_velocity]. If the body collides with another, it will slide along the other body (by default only on floor) rather than stop immediately. If the other body is a [CharacterBody2D] or [RigidDynamicBody2D], it will also be affected by the motion of the other body. You can use this to make moving and rotating platforms, or to make nodes push other nodes.
- This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- Modifies [member motion_velocity] if a slide collision occurred. To get the latest collision call [method get_last_slide_collision], for detailed information about collisions that occurred, use [method get_slide_collision].
+ Moves the body based on [member velocity]. If the body collides with another, it will slide along the other body (by default only on floor) rather than stop immediately. If the other body is a [CharacterBody2D] or [RigidDynamicBody2D], it will also be affected by the motion of the other body. You can use this to make moving and rotating platforms, or to make nodes push other nodes.
+ Modifies [member velocity] if a slide collision occurred. To get the latest collision call [method get_last_slide_collision], for detailed information about collisions that occurred, use [method get_slide_collision].
When the body touches a moving platform, the platform's velocity is automatically added to the body motion. If a collision occurs due to the platform's motion, it will always be first in the slide collisions.
The general behavior and available properties change according to the [member motion_mode].
Returns [code]true[/code] if the body collided, otherwise, returns [code]false[/code].
@@ -163,7 +162,7 @@
</member>
<member name="floor_stop_on_slope" type="bool" setter="set_floor_stop_on_slope_enabled" getter="is_floor_stop_on_slope_enabled" default="true">
If [code]true[/code], the body will not slide on slopes when calling [method move_and_slide] when the body is standing still.
- If [code]false[/code], the body will slide on floor's slopes when [member motion_velocity] applies a downward force.
+ If [code]false[/code], the body will slide on floor's slopes when [member velocity] applies a downward force.
</member>
<member name="max_slides" type="int" setter="set_max_slides" getter="get_max_slides" default="4">
Maximum number of times the body can change direction before it stops when calling [method move_and_slide].
@@ -171,9 +170,6 @@
<member name="motion_mode" type="int" setter="set_motion_mode" getter="get_motion_mode" enum="CharacterBody2D.MotionMode" default="0">
Sets the motion mode which defines the behavior of [method move_and_slide]. See [enum MotionMode] constants for available modes.
</member>
- <member name="motion_velocity" type="Vector2" setter="set_motion_velocity" getter="get_motion_velocity" default="Vector2(0, 0)">
- Current velocity vector in pixels per second, used and modified during calls to [method move_and_slide].
- </member>
<member name="moving_platform_apply_velocity_on_leave" type="int" setter="set_moving_platform_apply_velocity_on_leave" getter="get_moving_platform_apply_velocity_on_leave" enum="CharacterBody2D.MovingPlatformApplyVelocityOnLeave" default="0">
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum MovingPlatformApplyVelocityOnLeave] constants for available behavior.
</member>
@@ -189,6 +185,9 @@
<member name="up_direction" type="Vector2" setter="set_up_direction" getter="get_up_direction" default="Vector2(0, -1)">
Direction vector used to determine what is a wall and what is a floor (or a ceiling), rather than a wall, when calling [method move_and_slide]. Defaults to [code]Vector2.UP[/code]. If set to [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games.
</member>
+ <member name="velocity" type="Vector2" setter="set_velocity" getter="get_velocity" default="Vector2(0, 0)">
+ Current velocity vector in pixels per second, used and modified during calls to [method move_and_slide].
+ </member>
<member name="wall_min_slide_angle" type="float" setter="set_wall_min_slide_angle" getter="get_wall_min_slide_angle" default="0.261799">
Minimum angle (in radians) where the body is allowed to slide when it encounters a slope. The default value equals 15 degrees. This property only affects movement when [member motion_mode] is [constant MOTION_MODE_FLOATING].
</member>
@@ -201,10 +200,10 @@
Apply when there is no notion of floor or ceiling. All collisions will be reported as [code]on_wall[/code]. In this mode, when you slide, the speed will always be constant. This mode is suitable for top-down games.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_ALWAYS" value="0" enum="MovingPlatformApplyVelocityOnLeave">
- Add the last platform velocity to the [member motion_velocity] when you leave a moving platform.
+ Add the last platform velocity to the [member velocity] when you leave a moving platform.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY" value="1" enum="MovingPlatformApplyVelocityOnLeave">
- Add the last platform velocity to the [member motion_velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
+ Add the last platform velocity to the [member velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_NEVER" value="2" enum="MovingPlatformApplyVelocityOnLeave">
Do nothing when leaving a platform.
diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml
index 2d18a18eac..4895e2cff7 100644
--- a/doc/classes/CharacterBody3D.xml
+++ b/doc/classes/CharacterBody3D.xml
@@ -56,7 +56,7 @@
<method name="get_real_velocity" qualifiers="const">
<return type="Vector3" />
<description>
- Returns the current real velocity since the last call to [method move_and_slide]. For example, when you climb a slope, you will move diagonally even though the velocity is horizontal. This method returns the diagonal movement, as opposed to [member motion_velocity] which returns the requested velocity.
+ Returns the current real velocity since the last call to [method move_and_slide]. For example, when you climb a slope, you will move diagonally even though the velocity is horizontal. This method returns the diagonal movement, as opposed to [member velocity] which returns the requested velocity.
</description>
</method>
<method name="get_slide_collision">
@@ -117,9 +117,8 @@
<method name="move_and_slide">
<return type="bool" />
<description>
- Moves the body based on [member motion_velocity]. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [CharacterBody3D] or [RigidDynamicBody3D], it will also be affected by the motion of the other body. You can use this to make moving and rotating platforms, or to make nodes push other nodes.
- This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed.
- Modifies [member motion_velocity] if a slide collision occurred. To get the latest collision call [method get_last_slide_collision], for more detailed information about collisions that occurred, use [method get_slide_collision].
+ Moves the body based on [member velocity]. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [CharacterBody3D] or [RigidDynamicBody3D], it will also be affected by the motion of the other body. You can use this to make moving and rotating platforms, or to make nodes push other nodes.
+ Modifies [member velocity] if a slide collision occurred. To get the latest collision call [method get_last_slide_collision], for more detailed information about collisions that occurred, use [method get_slide_collision].
When the body touches a moving platform, the platform's velocity is automatically added to the body motion. If a collision occurs due to the platform's motion, it will always be first in the slide collisions.
Returns [code]true[/code] if the body collided, otherwise, returns [code]false[/code].
</description>
@@ -148,7 +147,7 @@
</member>
<member name="floor_stop_on_slope" type="bool" setter="set_floor_stop_on_slope_enabled" getter="is_floor_stop_on_slope_enabled" default="true">
If [code]true[/code], the body will not slide on slopes when calling [method move_and_slide] when the body is standing still.
- If [code]false[/code], the body will slide on floor's slopes when [member motion_velocity] applies a downward force.
+ If [code]false[/code], the body will slide on floor's slopes when [member velocity] applies a downward force.
</member>
<member name="max_slides" type="int" setter="set_max_slides" getter="get_max_slides" default="6">
Maximum number of times the body can change direction before it stops when calling [method move_and_slide].
@@ -156,9 +155,6 @@
<member name="motion_mode" type="int" setter="set_motion_mode" getter="get_motion_mode" enum="CharacterBody3D.MotionMode" default="0">
Sets the motion mode which defines the behavior of [method move_and_slide]. See [enum MotionMode] constants for available modes.
</member>
- <member name="motion_velocity" type="Vector3" setter="set_motion_velocity" getter="get_motion_velocity" default="Vector3(0, 0, 0)">
- Current velocity vector (typically meters per second), used and modified during calls to [method move_and_slide].
- </member>
<member name="moving_platform_apply_velocity_on_leave" type="int" setter="set_moving_platform_apply_velocity_on_leave" getter="get_moving_platform_apply_velocity_on_leave" enum="CharacterBody3D.MovingPlatformApplyVelocityOnLeave" default="0">
Sets the behavior to apply when you leave a moving platform. By default, to be physically accurate, when you leave the last platform velocity is applied. See [enum MovingPlatformApplyVelocityOnLeave] constants for available behavior.
</member>
@@ -174,6 +170,9 @@
<member name="up_direction" type="Vector3" setter="set_up_direction" getter="get_up_direction" default="Vector3(0, 1, 0)">
Direction vector used to determine what is a wall and what is a floor (or a ceiling), rather than a wall, when calling [method move_and_slide]. Defaults to [code]Vector3.UP[/code]. If set to [code]Vector3(0, 0, 0)[/code], everything is considered a wall. This is useful for topdown games.
</member>
+ <member name="velocity" type="Vector3" setter="set_velocity" getter="get_velocity" default="Vector3(0, 0, 0)">
+ Current velocity vector (typically meters per second), used and modified during calls to [method move_and_slide].
+ </member>
<member name="wall_min_slide_angle" type="float" setter="set_wall_min_slide_angle" getter="get_wall_min_slide_angle" default="0.261799">
Minimum angle (in radians) where the body is allowed to slide when it encounters a slope. The default value equals 15 degrees. When [member motion_mode] is [constant MOTION_MODE_GROUNDED], it only affects movement if [member floor_block_on_wall] is [code]true[/code].
</member>
@@ -186,10 +185,10 @@
Apply when there is no notion of floor or ceiling. All collisions will be reported as [code]on_wall[/code]. In this mode, when you slide, the speed will always be constant. This mode is suitable for games without ground like space games.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_ALWAYS" value="0" enum="MovingPlatformApplyVelocityOnLeave">
- Add the last platform velocity to the [member motion_velocity] when you leave a moving platform.
+ Add the last platform velocity to the [member velocity] when you leave a moving platform.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY" value="1" enum="MovingPlatformApplyVelocityOnLeave">
- Add the last platform velocity to the [member motion_velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
+ Add the last platform velocity to the [member velocity] when you leave a moving platform, but any downward motion is ignored. It's useful to keep full jump height even when the platform is moving down.
</constant>
<constant name="PLATFORM_VEL_ON_LEAVE_NEVER" value="2" enum="MovingPlatformApplyVelocityOnLeave">
Do nothing when leaving a platform.
diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml
index 8e9bedc831..5a67170086 100644
--- a/doc/classes/DisplayServer.xml
+++ b/doc/classes/DisplayServer.xml
@@ -515,7 +515,7 @@
<method name="virtual_keyboard_show">
<return type="void" />
<argument index="0" name="existing_text" type="String" />
- <argument index="1" name="position" type="Rect2" default="Rect2i(0, 0, 0, 0)" />
+ <argument index="1" name="position" type="Rect2" default="Rect2(0, 0, 0, 0)" />
<argument index="2" name="multiline" type="bool" default="false" />
<argument index="3" name="max_length" type="int" default="-1" />
<argument index="4" name="cursor_start" type="int" default="-1" />
@@ -544,6 +544,12 @@
<description>
</description>
</method>
+ <method name="window_get_active_popup" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns ID of the active popup window, or [constant INVALID_WINDOW_ID] if there is none.
+ </description>
+ </method>
<method name="window_get_attached_instance_id" qualifiers="const">
<return type="int" />
<argument index="0" name="window_id" type="int" default="0" />
@@ -592,6 +598,13 @@
[b]Note:[/b] This method is implemented on Android, Linux, macOS and Windows.
</description>
</method>
+ <method name="window_get_popup_safe_rect" qualifiers="const">
+ <return type="Rect2i" />
+ <argument index="0" name="window" type="int" />
+ <description>
+ Returns the bounding box of control, or menu item that was used to open the popup window, in the screen coordinate system.
+ </description>
+ </method>
<method name="window_get_position" qualifiers="const">
<return type="Vector2i" />
<argument index="0" name="window_id" type="int" default="0" />
@@ -749,6 +762,14 @@
[b]Note:[/b] This method is implemented on Linux, macOS and Windows.
</description>
</method>
+ <method name="window_set_popup_safe_rect">
+ <return type="void" />
+ <argument index="0" name="window" type="int" />
+ <argument index="1" name="rect" type="Rect2i" />
+ <description>
+ Sets the bounding box of control, or menu item that was used to open the popup window, in the screen coordinate system. Clicking this area will not auto-close this popup.
+ </description>
+ </method>
<method name="window_set_position">
<return type="void" />
<argument index="0" name="position" type="Vector2i" />
@@ -930,16 +951,24 @@
Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
</constant>
<constant name="WINDOW_FLAG_RESIZE_DISABLED" value="0" enum="WindowFlags">
+ Window can't be resizing by dragging its resize grip. It's still possible to resize the window using [method window_set_size]. This flag is ignored for full screen windows.
</constant>
<constant name="WINDOW_FLAG_BORDERLESS" value="1" enum="WindowFlags">
+ Window do not have native title bar and other decorations. This flag is ignored for full-screen windows.
</constant>
<constant name="WINDOW_FLAG_ALWAYS_ON_TOP" value="2" enum="WindowFlags">
+ Window is floating above other regular windows. This flag is ignored for full-screen windows.
</constant>
<constant name="WINDOW_FLAG_TRANSPARENT" value="3" enum="WindowFlags">
+ Window is will be destroyed with its transient parent and displayed on top of non-exclusive full-screen parent window. Transient windows can't enter full-screen mode.
</constant>
<constant name="WINDOW_FLAG_NO_FOCUS" value="4" enum="WindowFlags">
+ Window can't be focused. No-focus window will ignore all input, except mouse clicks.
+ </constant>
+ <constant name="WINDOW_FLAG_POPUP" value="5" enum="WindowFlags">
+ Window is part of menu or [OptionButton] dropdown. This flag can't be changed when window is visible. An active popup window will exclusivly receive all input, without stealing focus from its parent. Popup windows are automatically closed when uses click outside it, or when an application is switched. Popup window must have [constant WINDOW_FLAG_TRANSPARENT] set.
</constant>
- <constant name="WINDOW_FLAG_MAX" value="5" enum="WindowFlags">
+ <constant name="WINDOW_FLAG_MAX" value="6" enum="WindowFlags">
</constant>
<constant name="WINDOW_EVENT_MOUSE_ENTER" value="0" enum="WindowEvent">
</constant>
diff --git a/doc/classes/FogVolume.xml b/doc/classes/FogVolume.xml
index c869141ef6..d28a6a8783 100644
--- a/doc/classes/FogVolume.xml
+++ b/doc/classes/FogVolume.xml
@@ -12,6 +12,7 @@
<members>
<member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3(1, 1, 1)">
Sets the size of the [FogVolume] when [member shape] is [constant RenderingServer.FOG_VOLUME_SHAPE_ELLIPSOID] or [constant RenderingServer.FOG_VOLUME_SHAPE_BOX].
+ [b]Note:[/b] Thin fog volumes may appear to flicker when the camera moves or rotates. This can be alleviated by increasing [member ProjectSettings.rendering/environment/volumetric_fog/volume_depth] (at a performance cost) or by decreasing [member Environment.volumetric_fog_length] (at no performance cost, but at the cost of lower fog range). Alternatively, the [FogVolume] can be made thicker and use a lower density in the [member material].
</member>
<member name="material" type="Material" setter="set_material" getter="get_material">
Sets the [Material] to be used by the [FogVolume]. Can be either a [FogMaterial] or a custom [ShaderMaterial].
diff --git a/doc/classes/Geometry2D.xml b/doc/classes/Geometry2D.xml
index 446a90463d..cbd83e8d7d 100644
--- a/doc/classes/Geometry2D.xml
+++ b/doc/classes/Geometry2D.xml
@@ -209,7 +209,7 @@
<return type="PackedInt32Array" />
<argument index="0" name="polygon" type="PackedVector2Array" />
<description>
- Triangulates the polygon specified by the points in [code]polygon[/code]. Returns a [PackedInt32Array] where each triangle consists of three consecutive point indices into [code]polygon[/code] (i.e. the returned array will have [code]n * 3[/code] elements, with [code]n[/code] being the number of found triangles). If the triangulation did not succeed, an empty [PackedInt32Array] is returned.
+ Triangulates the polygon specified by the points in [code]polygon[/code]. Returns a [PackedInt32Array] where each triangle consists of three consecutive point indices into [code]polygon[/code] (i.e. the returned array will have [code]n * 3[/code] elements, with [code]n[/code] being the number of found triangles). Output triangles will always be counter clockwise, and the contour will be flipped if it's clockwise. If the triangulation did not succeed, an empty [PackedInt32Array] is returned.
</description>
</method>
</methods>
diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml
index 875d8d27b2..8b564c01c9 100644
--- a/doc/classes/ItemList.xml
+++ b/doc/classes/ItemList.xml
@@ -401,7 +401,7 @@
<member name="select_mode" type="int" setter="set_select_mode" getter="get_select_mode" enum="ItemList.SelectMode" default="0">
Allows single or multiple item selection. See the [enum SelectMode] constants.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="0">
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="3">
Sets the clipping behavior when the text exceeds an item's bounding rectangle. See [enum TextParagraph.OverrunBehavior] for a description of all modes.
</member>
</members>
diff --git a/doc/classes/Line2D.xml b/doc/classes/Line2D.xml
index d1f2597342..e2cc43bb75 100644
--- a/doc/classes/Line2D.xml
+++ b/doc/classes/Line2D.xml
@@ -79,7 +79,8 @@
The points that form the lines. The line is drawn between every point set in this array. Points are interpreted as local vectors.
</member>
<member name="round_precision" type="int" setter="set_round_precision" getter="get_round_precision" default="8">
- The smoothness of the rounded joints and caps. This is only used if a cap or joint is set as round.
+ The smoothness of the rounded joints and caps. Higher values result in smoother corners, but are more demanding to render and update. This is only used if a cap or joint is set as round.
+ [b]Note:[/b] The default value is tuned for lines with the default [member width]. For thin lines, this value should be reduced to a number between [code]2[/code] and [code]4[/code] to improve performance.
</member>
<member name="sharp_limit" type="float" setter="set_sharp_limit" getter="get_sharp_limit" default="2.0">
The direction difference in radians between vector points. This value is only used if [member joint_mode] is set to [constant LINE_JOINT_SHARP].
diff --git a/doc/classes/NativeExtension.xml b/doc/classes/NativeExtension.xml
index e5e11c1c95..ccdbb617ab 100644
--- a/doc/classes/NativeExtension.xml
+++ b/doc/classes/NativeExtension.xml
@@ -43,7 +43,9 @@
</constant>
<constant name="INITIALIZATION_LEVEL_SCENE" value="2" enum="InitializationLevel">
</constant>
- <constant name="INITIALIZATION_LEVEL_EDITOR" value="3" enum="InitializationLevel">
+ <constant name="INITIALIZATION_LEVEL_DRIVER" value="3" enum="InitializationLevel">
+ </constant>
+ <constant name="INITIALIZATION_LEVEL_EDITOR" value="4" enum="InitializationLevel">
</constant>
</constants>
</class>
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index 5ae50f86d4..5291ecab08 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -181,16 +181,19 @@
[b]Note:[/b] It will not work properly if the node contains a script with constructor arguments (i.e. needs to supply arguments to [method Object._init] method). In that case, the node will be duplicated without a script.
</description>
</method>
- <method name="find_node" qualifiers="const">
- <return type="Node" />
+ <method name="find_nodes" qualifiers="const">
+ <return type="Node[]" />
<argument index="0" name="mask" type="String" />
- <argument index="1" name="recursive" type="bool" default="true" />
- <argument index="2" name="owned" type="bool" default="true" />
+ <argument index="1" name="type" type="String" default="&quot;&quot;" />
+ <argument index="2" name="recursive" type="bool" default="true" />
+ <argument index="3" name="owned" type="bool" default="true" />
<description>
- Finds a descendant of this node whose name matches [code]mask[/code] as in [method String.match] (i.e. case-sensitive, but [code]"*"[/code] matches zero or more characters and [code]"?"[/code] matches any single character except [code]"."[/code]). Returns [code]null[/code] if no matching [Node] is found.
- [b]Note:[/b] It does not match against the full path, just against individual node names.
+ Finds descendants of this node whose, name matches [code]mask[/code] as in [method String.match], and/or type matches [code]type[/code] as in [method Object.is_class].
+ [code]mask[/code] does not match against the full path, just against individual node names. It is case-sensitive, with [code]"*"[/code] matching zero or more characters and [code]"?"[/code] matching any single character except [code]"."[/code]).
+ [code]type[/code] will check equality or inheritance. It is case-sensitive, [code]"Object"[/code] will match a node whose type is [code]"Node"[/code] but not the other way around.
If [code]owned[/code] is [code]true[/code], this method only finds nodes whose owner is this node. This is especially important for scenes instantiated through a script, because those scenes don't have an owner.
- [b]Note:[/b] As this method walks through all the descendants of the node, it is the slowest way to get a reference to another node. Whenever possible, consider using [method get_node] instead. To avoid using [method find_node] too often, consider caching the node reference into a variable.
+ Returns an empty array, if no matching nodes are found.
+ [b]Note:[/b] As this method walks through all the descendants of the node, it is the slowest way to get references to other nodes. To avoid using [method find_nodes] too often, consider caching the node references into variables.
</description>
</method>
<method name="find_parent" qualifiers="const">
@@ -853,6 +856,14 @@
</constant>
<constant name="NOTIFICATION_WM_SIZE_CHANGED" value="1008">
</constant>
+ <constant name="NOTIFICATION_WM_DPI_CHANGE" value="1009">
+ </constant>
+ <constant name="NOTIFICATION_VP_MOUSE_ENTER" value="1010">
+ Notification received when the mouse enters the viewport.
+ </constant>
+ <constant name="NOTIFICATION_VP_MOUSE_EXIT" value="1011">
+ Notification received when the mouse leaves the viewport.
+ </constant>
<constant name="NOTIFICATION_OS_MEMORY_WARNING" value="2009">
Notification received from the OS when the application is exceeding its allocated memory.
Specific to the iOS platform.
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 13a19206b3..bc9bfc9676 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -343,7 +343,14 @@
<method name="get_processor_count" qualifiers="const">
<return type="int" />
<description>
- Returns the number of threads available on the host machine.
+ Returns the number of [i]logical[/i] CPU cores available on the host machine. On CPUs with HyperThreading enabled, this number will be greater than the number of [i]physical[/i] CPU cores.
+ </description>
+ </method>
+ <method name="get_processor_name" qualifiers="const">
+ <return type="String" />
+ <description>
+ Returns the name of the CPU model on the host machine (e.g. "Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz").
+ [b]Note:[/b] This method is only implemented on Windows, macOS, Linux and iOS. On Android, HTML5 and UWP, [method get_processor_name] returns an empty string.
</description>
</method>
<method name="get_static_memory_peak_usage" qualifiers="const">
diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml
index 06efadb071..3fcf0a9b8f 100644
--- a/doc/classes/Popup.xml
+++ b/doc/classes/Popup.xml
@@ -4,15 +4,13 @@
Popup is a base window container for popup-like subwindows.
</brief_description>
<description>
- Popup is a base window container for popup-like subwindows. It's a modal by default (see [member close_on_parent_focus]) and has helpers for custom popup behavior.
+ Popup is a base window container for popup-like subwindows. It's a modal by default (see [member popup_window]) and has helpers for custom popup behavior.
</description>
<tutorials>
</tutorials>
<members>
<member name="borderless" type="bool" setter="set_flag" getter="get_flag" overrides="Window" default="true" />
- <member name="close_on_parent_focus" type="bool" setter="set_close_on_parent_focus" getter="get_close_on_parent_focus" default="true">
- If true, the [Popup] will close when its parent [Window] is focused.
- </member>
+ <member name="popup_window" type="bool" setter="set_flag" getter="get_flag" overrides="Window" default="true" />
<member name="transient" type="bool" setter="set_transient" getter="is_transient" overrides="Window" default="true" />
<member name="unresizable" type="bool" setter="set_flag" getter="get_flag" overrides="Window" default="true" />
<member name="visible" type="bool" setter="set_visible" getter="is_visible" overrides="Window" default="false" />
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 805f897b63..a3810bb575 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -1776,10 +1776,10 @@
<member name="rendering/reflections/sky_reflections/fast_filter_high_quality" type="bool" setter="" getter="" default="false">
Use a higher quality variant of the fast filtering algorithm. Significantly slower than using default quality, but results in smoother reflections. Should only be used when the scene is especially detailed.
</member>
- <member name="rendering/reflections/sky_reflections/ggx_samples" type="int" setter="" getter="" default="1024">
+ <member name="rendering/reflections/sky_reflections/ggx_samples" type="int" setter="" getter="" default="32">
Sets the number of samples to take when using importance sampling for [Sky]s and [ReflectionProbe]s. A higher value will result in smoother, higher quality reflections, but increases time to calculate radiance maps. In general, fewer samples are needed for simpler, low dynamic range environments while more samples are needed for HDR environments and environments with a high level of detail.
</member>
- <member name="rendering/reflections/sky_reflections/ggx_samples.mobile" type="int" setter="" getter="" default="128">
+ <member name="rendering/reflections/sky_reflections/ggx_samples.mobile" type="int" setter="" getter="" default="16">
Lower-end override for [member rendering/reflections/sky_reflections/ggx_samples] on mobile devices, due to performance concerns or driver support.
</member>
<member name="rendering/reflections/sky_reflections/roughness_layers" type="int" setter="" getter="" default="8">
@@ -1813,12 +1813,6 @@
</member>
<member name="rendering/shader_compiler/shader_cache/use_zstd_compression" type="bool" setter="" getter="" default="true">
</member>
- <member name="rendering/shading/overrides/force_blinn_over_ggx" type="bool" setter="" getter="" default="false">
- If [code]true[/code], uses faster but lower-quality Blinn model to generate blurred reflections instead of the GGX model.
- </member>
- <member name="rendering/shading/overrides/force_blinn_over_ggx.mobile" type="bool" setter="" getter="" default="true">
- Lower-end override for [member rendering/shading/overrides/force_blinn_over_ggx] on mobile devices, due to performance concerns or driver support.
- </member>
<member name="rendering/shading/overrides/force_lambert_over_burley" type="bool" setter="" getter="" default="false">
If [code]true[/code], uses faster but lower-quality Lambert material lighting model instead of Burley.
</member>
@@ -1921,8 +1915,23 @@
</member>
<member name="rendering/vulkan/staging_buffer/texture_upload_region_size_px" type="int" setter="" getter="" default="64">
</member>
- <member name="rendering/xr/enabled" type="bool" setter="" getter="" default="false">
- If [code]true[/code], XR support is enabled in Godot, this ensures required shaders are compiled.
+ <member name="xr/openxr/default_action_map" type="String" setter="" getter="" default="&quot;res://default_action_map.tres&quot;">
+ Action map configuration to load by default.
+ </member>
+ <member name="xr/openxr/enabled" type="bool" setter="" getter="" default="false">
+ If [code]true[/code] Godot will setup and initialise OpenXR on startup.
+ </member>
+ <member name="xr/openxr/form_factor" type="int" setter="" getter="" default="&quot;0&quot;">
+ Specify whether OpenXR should be configured for an HMD or a hand held device.
+ </member>
+ <member name="xr/openxr/reference_space" type="int" setter="" getter="" default="&quot;1&quot;">
+ Specify the default reference space.
+ </member>
+ <member name="xr/openxr/view_configuration" type="int" setter="" getter="" default="&quot;1&quot;">
+ Specify the view configuration with which to configure OpenXR settting up either Mono or Stereo rendering.
+ </member>
+ <member name="xr/shaders/enabled" type="bool" setter="" getter="" default="false">
+ If [code]true[/code], Godot will compile shaders required for XR.
</member>
</members>
</class>
diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml
index bb8aa8c9db..11a681b235 100644
--- a/doc/classes/RenderingServer.xml
+++ b/doc/classes/RenderingServer.xml
@@ -4146,13 +4146,17 @@
<constant name="ENV_TONE_MAPPER_ACES" value="3" enum="EnvironmentToneMapper">
Use the ACES tonemapper.
</constant>
- <constant name="ENV_SSR_ROUGNESS_QUALITY_DISABLED" value="0" enum="EnvironmentSSRRoughnessQuality">
+ <constant name="ENV_SSR_ROUGHNESS_QUALITY_DISABLED" value="0" enum="EnvironmentSSRRoughnessQuality">
+ Lowest quality of roughness filter for screen-space reflections. Rough materials will not have blurrier screen-space reflections compared to smooth (non-rough) materials. This is the fastest option.
</constant>
- <constant name="ENV_SSR_ROUGNESS_QUALITY_LOW" value="1" enum="EnvironmentSSRRoughnessQuality">
+ <constant name="ENV_SSR_ROUGHNESS_QUALITY_LOW" value="1" enum="EnvironmentSSRRoughnessQuality">
+ Low quality of roughness filter for screen-space reflections.
</constant>
- <constant name="ENV_SSR_ROUGNESS_QUALITY_MEDIUM" value="2" enum="EnvironmentSSRRoughnessQuality">
+ <constant name="ENV_SSR_ROUGHNESS_QUALITY_MEDIUM" value="2" enum="EnvironmentSSRRoughnessQuality">
+ Medium quality of roughness filter for screen-space reflections.
</constant>
- <constant name="ENV_SSR_ROUGNESS_QUALITY_HIGH" value="3" enum="EnvironmentSSRRoughnessQuality">
+ <constant name="ENV_SSR_ROUGHNESS_QUALITY_HIGH" value="3" enum="EnvironmentSSRRoughnessQuality">
+ High quality of roughness filter for screen-space reflections. This is the slowest option.
</constant>
<constant name="ENV_SSAO_QUALITY_VERY_LOW" value="0" enum="EnvironmentSSAOQuality">
Lowest quality of screen-space ambient occlusion.
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index 18d75889c3..f480071d32 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -81,12 +81,26 @@
Returns the total number of lines in the text. Wrapped text is counted as multiple lines.
</description>
</method>
+ <method name="get_line_offset">
+ <return type="float" />
+ <argument index="0" name="line" type="int" />
+ <description>
+ Returns the vertical offset of the line found at the provided index.
+ </description>
+ </method>
<method name="get_paragraph_count" qualifiers="const">
<return type="int" />
<description>
Returns the total number of paragraphs (newlines or [code]p[/code] tags in the tag stack's text tags). Considers wrapped text as one paragraph.
</description>
</method>
+ <method name="get_paragraph_offset">
+ <return type="float" />
+ <argument index="0" name="paragraph" type="int" />
+ <description>
+ Returns the vertical offset of the paragraph found at the provided index.
+ </description>
+ </method>
<method name="get_parsed_text" qualifiers="const">
<return type="String" />
<description>
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 288c35f159..f3dfc727b0 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -232,13 +232,6 @@
</member>
</members>
<signals>
- <signal name="files_dropped">
- <argument index="0" name="files" type="PackedStringArray" />
- <argument index="1" name="screen" type="int" />
- <description>
- Emitted when files are dragged from the OS file manager and dropped in the game window. The arguments are a list of file paths and the identifier of the screen where the drag originated.
- </description>
- </signal>
<signal name="node_added">
<argument index="0" name="node" type="Node" />
<description>
diff --git a/doc/classes/Sky.xml b/doc/classes/Sky.xml
index 20e3896b17..e14e57a1c4 100644
--- a/doc/classes/Sky.xml
+++ b/doc/classes/Sky.xml
@@ -9,7 +9,7 @@
<tutorials>
</tutorials>
<members>
- <member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="Sky.ProcessMode" default="3">
+ <member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="Sky.ProcessMode" default="0">
Sets the method for generating the radiance map from the sky. The radiance map is a cubemap with increasingly blurry versions of the sky corresponding to different levels of roughness. Radiance maps can be expensive to calculate. See [enum ProcessMode] for options.
</member>
<member name="radiance_size" type="int" setter="set_radiance_size" getter="get_radiance_size" enum="Sky.RadianceSize" default="3">
diff --git a/doc/classes/SpriteBase3D.xml b/doc/classes/SpriteBase3D.xml
index 298f5bc8c2..405fff0ce8 100644
--- a/doc/classes/SpriteBase3D.xml
+++ b/doc/classes/SpriteBase3D.xml
@@ -61,7 +61,7 @@
</member>
<member name="modulate" type="Color" setter="set_modulate" getter="get_modulate" default="Color(1, 1, 1, 1)">
A color value used to [i]multiply[/i] the texture's colors. Can be used for mood-coloring or to simulate the color of light.
- [b]Note:[/b] If a [member GeometryInstance3D.material_override] is defined on the [SpriteBase3D], the material override must be configured to take vertex colors into account for albedo. Otherwise, the color defined in [member modulate] will be ignored. For a [BaseMaterial3D], [member BaseMaterial3D.vertex_color_use_as_albedo] must be [code]true[/code]. For a [ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the shader's [code]fragment()[/code] function.
+ [b]Note:[/b] If a [member GeometryInstance3D.material_override] is defined on the [SpriteBase3D], the material override must be configured to take vertex colors into account for albedo. Otherwise, the color defined in [member modulate] will be ignored. For a [BaseMaterial3D], [member BaseMaterial3D.vertex_color_use_as_albedo] must be [code]true[/code]. For a [ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/code] must be inserted in the shader's [code]fragment()[/code] function.
</member>
<member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2(0, 0)">
The texture's drawing offset.
diff --git a/doc/classes/String.xml b/doc/classes/String.xml
index c1a7a2edda..d85e521f08 100644
--- a/doc/classes/String.xml
+++ b/doc/classes/String.xml
@@ -49,7 +49,10 @@
<method name="bigrams" qualifiers="const">
<return type="PackedStringArray" />
<description>
- Returns the bigrams (pairs of consecutive letters) of this string.
+ Returns an array containing the bigrams (pairs of consecutive letters) of this string.
+ [codeblock]
+ print("Bigrams".bigrams()) # Prints "[Bi, ig, gr, ra, am, ms]"
+ [/codeblock]
</description>
</method>
<method name="bin_to_int" qualifiers="const">
@@ -101,6 +104,11 @@
<return type="String" />
<argument index="0" name="char" type="int" />
<description>
+ Directly converts an decimal integer to a unicode character. Tables of these characters can be found in various locations, for example [url=https://unicodelookup.com/]here.[/url]
+ [codeblock]
+ print(String.chr(65)) # Prints "A"
+ print(String.chr(129302)) # Prints "🤖" (robot face emoji)
+ [/codeblock]
</description>
</method>
<method name="contains" qualifiers="const">
@@ -265,6 +273,8 @@
<return type="String" />
<argument index="0" name="size" type="int" />
<description>
+ Converts an integer representing a number of bytes into a human-readable form.
+ Note that this output is in [url=https://en.wikipedia.org/wiki/Binary_prefix#IEC_prefixes]IEC prefix format[/url], and includes [code]B[/code], [code]KiB[/code], [code]MiB[/code], [code]GiB[/code], [code]TiB[/code], [code]PiB[/code], and [code]EiB[/code].
</description>
</method>
<method name="indent" qualifiers="const">
@@ -326,7 +336,14 @@
<method name="is_valid_float" qualifiers="const">
<return type="bool" />
<description>
- Returns [code]true[/code] if this string contains a valid float.
+ Returns [code]true[/code] if this string contains a valid float. This is inclusive of integers, and also supports exponents:
+ [codeblock]
+ print("1.7".is_valid_float()) # Prints "true"
+ print("24".is_valid_float()) # Prints "true"
+ print("7e3".is_valid_float()) # Prints "true"
+ print("24".is_valid_float()) # Prints "true"
+ print("Hello".is_valid_float()) # Prints "false"
+ [/codeblock]
</description>
</method>
<method name="is_valid_hex_number" qualifiers="const">
@@ -346,12 +363,24 @@
<return type="bool" />
<description>
Returns [code]true[/code] if this string is a valid identifier. A valid identifier may contain only letters, digits and underscores ([code]_[/code]) and the first character may not be a digit.
+ [codeblock]
+ print("good_ident_1".is_valid_identifier()) # Prints "true"
+ print("1st_bad_ident".is_valid_identifier()) # Prints "false"
+ print("bad_ident_#2".is_valid_identifier()) # Prints "false"
+ [/codeblock]
</description>
</method>
<method name="is_valid_int" qualifiers="const">
<return type="bool" />
<description>
Returns [code]true[/code] if this string contains a valid integer.
+ [codeblock]
+ print("7".is_valid_int()) # Prints "true"
+ print("14.6".is_valid_int()) # Prints "false"
+ print("L".is_valid_int()) # Prints "false"
+ print("+3".is_valid_int()) # Prints "true"
+ print("-12".is_valid_int()) # Prints "true"
+ [/codeblock]
</description>
</method>
<method name="is_valid_ip_address" qualifiers="const">
@@ -420,14 +449,14 @@
<return type="bool" />
<argument index="0" name="expr" type="String" />
<description>
- Does a simple case-sensitive expression match, where [code]"*"[/code] matches zero or more arbitrary characters and [code]"?"[/code] matches any single character except a period ([code]"."[/code]).
+ Does a simple case-sensitive expression match, where [code]"*"[/code] matches zero or more arbitrary characters and [code]"?"[/code] matches any single character except a period ([code]"."[/code]). An empty string or empty expression always evaluates to [code]false[/code].
</description>
</method>
<method name="matchn" qualifiers="const">
<return type="bool" />
<argument index="0" name="expr" type="String" />
<description>
- Does a simple case-insensitive expression match, where [code]"*"[/code] matches zero or more arbitrary characters and [code]"?"[/code] matches any single character except a period ([code]"."[/code]).
+ Does a simple case-insensitive expression match, where [code]"*"[/code] matches zero or more arbitrary characters and [code]"?"[/code] matches any single character except a period ([code]"."[/code]). An empty string or empty expression always evaluates to [code]false[/code].
</description>
</method>
<method name="md5_buffer" qualifiers="const">
@@ -631,7 +660,13 @@
<return type="float" />
<argument index="0" name="text" type="String" />
<description>
- Returns the similarity index of the text compared to this string. 1 means totally similar and 0 means totally dissimilar.
+ Returns the similarity index ([url=https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient]Sorensen-Dice coefficient[/url]) this string compared to another. 1.0 means totally similar and 0.0 means totally dissimilar.
+ [codeblock]
+ print("ABC123".similarity("ABC123")) # Prints "1"
+ print("ABC123".similarity("XYZ456")) # Prints "0"
+ print("ABC123".similarity("123ABC")) # Prints "0.8"
+ print("ABC123".similarity("abc123")) # Prints "0.4"
+ [/codeblock]
</description>
</method>
<method name="simplify_path" qualifiers="const">
diff --git a/doc/classes/SubViewportContainer.xml b/doc/classes/SubViewportContainer.xml
index bd48f2b6db..050186a883 100644
--- a/doc/classes/SubViewportContainer.xml
+++ b/doc/classes/SubViewportContainer.xml
@@ -6,6 +6,7 @@
<description>
A [Container] node that holds a [SubViewport], automatically setting its size.
[b]Note:[/b] Changing a SubViewportContainer's [member Control.rect_scale] will cause its contents to appear distorted. To change its visual size without causing distortion, adjust the node's margins instead (if it's not already in a container).
+ [b]Note:[/b] The SubViewportContainer forwards mouse-enter and mouse-exit notifications to its sub-viewports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/SurfaceTool.xml b/doc/classes/SurfaceTool.xml
index 9d0962f337..43d34d3890 100644
--- a/doc/classes/SurfaceTool.xml
+++ b/doc/classes/SurfaceTool.xml
@@ -11,14 +11,14 @@
st.begin(Mesh.PRIMITIVE_TRIANGLES)
st.set_color(Color(1, 0, 0))
st.set_uv(Vector2(0, 0))
- st.set_vertex(Vector3(0, 0, 0))
+ st.add_vertex(Vector3(0, 0, 0))
[/gdscript]
[csharp]
var st = new SurfaceTool();
st.Begin(Mesh.PrimitiveType.Triangles);
st.SetColor(new Color(1, 0, 0));
st.SetUv(new Vector2(0, 0));
- st.SetVertex(new Vector3(0, 0, 0));
+ st.AddVertex(new Vector3(0, 0, 0));
[/csharp]
[/codeblocks]
The above [SurfaceTool] now contains one vertex of a triangle which has a UV coordinate and a specified [Color]. If another vertex were added without calling [method set_uv] or [method set_color], then the last values would be used.
diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml
index e5ecff178b..9453bb9e2a 100644
--- a/doc/classes/TileMap.xml
+++ b/doc/classes/TileMap.xml
@@ -57,6 +57,14 @@
Clears all cells on the given layer.
</description>
</method>
+ <method name="erase_cell">
+ <return type="void" />
+ <argument index="0" name="layer" type="int" />
+ <argument index="1" name="coords" type="Vector2i" />
+ <description>
+ Erases the cell on layer [code]layer[/code] at coordinates [code]coords[/code].
+ </description>
+ </method>
<method name="fix_invalid_tiles">
<return type="void" />
<description>
@@ -227,7 +235,7 @@
<argument index="1" name="coords" type="Vector2i" />
<argument index="2" name="source_id" type="int" default="-1" />
<argument index="3" name="atlas_coords" type="Vector2i" default="Vector2i(-1, -1)" />
- <argument index="4" name="alternative_tile" type="int" default="-1" />
+ <argument index="4" name="alternative_tile" type="int" default="0" />
<description>
Sets the tile indentifiers for the cell on layer [code]layer[/code] at coordinates [code]coords[/code]. Each tile of the [TileSet] is identified using three parts:
- The source identifier [code]source_id[/code] identifies a [TileSetSource] identifier. See [method TileSet.set_source_id],
diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml
index b6a2909ce7..c909a35ab5 100644
--- a/doc/classes/TreeItem.xml
+++ b/doc/classes/TreeItem.xml
@@ -18,7 +18,7 @@
<argument index="3" name="disabled" type="bool" default="false" />
<argument index="4" name="tooltip" type="String" default="&quot;&quot;" />
<description>
- Adds a button with [Texture2D] [code]button[/code] at column [code]column[/code]. The [code]id[/code] is used to identify the button. If not specified, the next available index is used, which may be retrieved by calling [method get_button_count] immediately after this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code].
+ Adds a button with [Texture2D] [code]button[/code] at column [code]column[/code]. The [code]id[/code] is used to identify the button. If not specified, the next available index is used, which may be retrieved by calling [method get_button_count] immediately before this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code].
</description>
</method>
<method name="call_recursive" qualifiers="vararg">
@@ -92,7 +92,7 @@
<return type="int" />
<argument index="0" name="column" type="int" />
<description>
- Returns the number of buttons in column [code]column[/code]. May be used to get the most recently added button's index, if no index was specified.
+ Returns the number of buttons in column [code]column[/code].
</description>
</method>
<method name="get_button_id" qualifiers="const">
diff --git a/doc/classes/VoxelGI.xml b/doc/classes/VoxelGI.xml
index 788b4e1f17..55ba1c4934 100644
--- a/doc/classes/VoxelGI.xml
+++ b/doc/classes/VoxelGI.xml
@@ -21,6 +21,7 @@
<description>
Bakes the effect from all [GeometryInstance3D]s marked with [constant GeometryInstance3D.GI_MODE_STATIC] and [Light3D]s marked with either [constant Light3D.BAKE_STATIC] or [constant Light3D.BAKE_DYNAMIC]. If [code]create_visual_debug[/code] is [code]true[/code], after baking the light, this will generate a [MultiMesh] that has a cube representing each solid cell with each cube colored to the cell's albedo color. This can be used to visualize the [VoxelGI]'s data and debug any issues that may be occurring.
[b]Note:[/b] [method bake] works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a [VoxelGI] node generally takes from 5 to 20 seconds in most scenes. Reducing [member subdiv] can speed up baking.
+ [b]Note:[/b] [GeometryInstance3D]s and [Light3D]s must be fully ready before [method bake] is called. If you are procedurally creating those and some meshes or lights are missing from your baked [VoxelGI], use [code]call_deferred("bake")[/code] instead of calling [method bake] directly.
</description>
</method>
<method name="debug_bake">
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml
index 912d3cb16c..9853f906bc 100644
--- a/doc/classes/Window.xml
+++ b/doc/classes/Window.xml
@@ -306,6 +306,8 @@
Set's the window's current mode.
[b]Note:[/b] Fullscreen mode is not exclusive fullscreen on Windows and Linux.
</member>
+ <member name="popup_window" type="bool" setter="set_flag" getter="get_flag" default="false">
+ </member>
<member name="position" type="Vector2i" setter="set_position" getter="get_position" default="Vector2i(0, 0)">
The window's position in pixels.
</member>
@@ -346,6 +348,7 @@
<signal name="files_dropped">
<argument index="0" name="files" type="PackedStringArray" />
<description>
+ Emitted when files are dragged from the OS file manager and dropped in the game window. The argument is a list of file paths.
</description>
</signal>
<signal name="focus_entered">
@@ -416,7 +419,9 @@
</constant>
<constant name="FLAG_NO_FOCUS" value="4" enum="Flags">
</constant>
- <constant name="FLAG_MAX" value="5" enum="Flags">
+ <constant name="FLAG_POPUP" value="5" enum="Flags">
+ </constant>
+ <constant name="FLAG_MAX" value="6" enum="Flags">
</constant>
<constant name="CONTENT_SCALE_MODE_DISABLED" value="0" enum="ContentScaleMode">
</constant>
diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml
index a77f8cf9ca..deea888b8f 100644
--- a/doc/classes/XRController3D.xml
+++ b/doc/classes/XRController3D.xml
@@ -41,12 +41,6 @@
</description>
</method>
</methods>
- <members>
- <member name="rumble" type="float" setter="set_rumble" getter="get_rumble" default="0.0">
- The degree to which the controller vibrates. Ranges from [code]0.0[/code] to [code]1.0[/code] with precision [code].01[/code]. If changed, updates [member XRPositionalTracker.rumble] accordingly.
- This is a useful property to animate if you want the controller to vibrate for a limited duration.
- </member>
- </members>
<signals>
<signal name="button_pressed">
<argument index="0" name="name" type="String" />
diff --git a/doc/classes/XRPositionalTracker.xml b/doc/classes/XRPositionalTracker.xml
index c544ef3cfa..da378759d8 100644
--- a/doc/classes/XRPositionalTracker.xml
+++ b/doc/classes/XRPositionalTracker.xml
@@ -72,9 +72,6 @@
- [code]left_hand[/code] identifies the controller held in the players left hand
- [code]right_hand[/code] identifies the controller held in the players right hand
</member>
- <member name="rumble" type="float" setter="set_rumble" getter="get_rumble" default="0.0">
- The degree to which the tracker rumbles. Ranges from [code]0.0[/code] to [code]1.0[/code] with precision [code].01[/code].
- </member>
<member name="type" type="int" setter="set_tracker_type" getter="get_tracker_type" enum="XRServer.TrackerType" default="128">
The type of tracker.
</member>
diff --git a/doc/translations/ar.po b/doc/translations/ar.po
index caaf1ad7f1..dc685b6e2b 100644
--- a/doc/translations/ar.po
+++ b/doc/translations/ar.po
@@ -3472,8 +3472,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3832,22 +3832,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4187,11 +4186,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4200,9 +4197,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4281,6 +4277,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4416,10 +4416,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4848,25 +4844,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5050,6 +5027,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5059,9 +5045,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5082,9 +5067,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5730,6 +5714,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6013,6 +6001,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6479,9 +6471,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6716,23 +6707,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7118,9 +7105,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7317,13 +7307,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7623,12 +7606,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8750,9 +8727,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9047,10 +9023,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9442,11 +9416,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9539,7 +9510,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9584,15 +9557,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9607,7 +9573,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9615,7 +9582,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9776,7 +9748,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9817,18 +9794,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9866,12 +9839,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10076,8 +10049,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10121,6 +10099,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10332,11 +10319,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10443,12 +10430,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10507,7 +10488,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10574,9 +10555,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10880,23 +10861,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10907,15 +10882,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11102,6 +11075,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11136,6 +11117,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11396,17 +11381,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11448,9 +11431,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11483,6 +11465,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11883,15 +11872,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12322,14 +12309,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12524,7 +12509,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12537,7 +12524,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12831,7 +12820,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12881,6 +12870,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12961,20 +12962,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13533,6 +13520,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13617,9 +13605,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13628,9 +13616,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13640,10 +13628,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13736,9 +13725,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13747,22 +13736,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13882,15 +13863,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13929,9 +13906,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13976,19 +13952,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15446,20 +15419,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15559,8 +15528,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17543,12 +17512,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17713,8 +17676,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17803,7 +17766,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17835,7 +17813,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17845,7 +17828,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17887,7 +17875,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17911,7 +17905,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17992,7 +17991,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18067,7 +18072,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18081,7 +18091,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18182,7 +18197,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18213,7 +18234,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18257,13 +18284,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18429,6 +18449,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19142,11 +19170,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19201,8 +19226,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19211,7 +19236,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19240,13 +19269,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19369,12 +19391,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20402,13 +20418,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20440,8 +20449,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20474,8 +20483,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20585,11 +20594,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20852,12 +20858,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21728,13 +21728,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22149,13 +22142,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22477,9 +22463,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22798,31 +22783,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22882,12 +22871,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23566,6 +23557,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24167,11 +24162,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24198,6 +24193,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة ظل الزاوية للمَعلم."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24338,20 +24350,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24421,13 +24419,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25470,7 +25461,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26468,11 +26459,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26499,10 +26492,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26549,6 +26540,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26770,6 +26767,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27101,21 +27106,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27906,13 +27896,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28057,11 +28040,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28779,6 +28759,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28971,7 +28955,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29200,8 +29184,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29229,8 +29213,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29387,7 +29371,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29522,15 +29511,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29573,8 +29556,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29605,8 +29588,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29650,11 +29633,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29821,17 +29801,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29915,17 +29893,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29936,13 +29918,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29979,9 +29954,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30108,13 +30087,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30869,15 +30841,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30925,6 +30888,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30985,11 +30971,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31004,9 +30987,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31083,7 +31065,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31093,18 +31079,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31256,11 +31258,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31509,11 +31508,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31942,6 +31938,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32139,13 +32139,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33992,10 +33985,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34227,22 +34216,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34386,13 +34359,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34640,13 +34606,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34718,9 +34677,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34757,6 +34715,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34785,9 +34747,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35110,7 +35071,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35666,6 +35627,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة الجيب العكسية للمَعلم."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "ÙŠÙØ±Ø¬Ø¹ عكس قيمة الجذر التربيعي للمَعلم."
@@ -35687,6 +35653,10 @@ msgid "Returns the map's up direction."
msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة الجيب العكسية للمَعلم."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
@@ -35727,18 +35697,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35977,9 +35935,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36269,16 +36230,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36324,7 +36281,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36339,7 +36296,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36352,7 +36309,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36367,17 +36324,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36387,14 +36344,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36404,7 +36361,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37113,6 +37070,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37265,11 +37234,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37436,9 +37402,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37474,11 +37439,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37615,8 +37580,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37650,19 +37615,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37865,8 +37823,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37990,7 +37948,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38179,6 +38137,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38705,7 +38705,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38969,8 +38978,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39221,6 +39230,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39331,6 +39345,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40286,14 +40307,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40444,13 +40463,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40570,6 +40584,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41315,11 +41333,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43899,9 +43914,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44311,6 +44325,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45608,8 +45627,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45695,8 +45714,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45784,9 +45803,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47167,12 +47186,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47267,6 +47288,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47366,7 +47398,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47785,6 +47818,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47803,9 +47842,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47832,14 +47870,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48004,9 +48034,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48442,8 +48471,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ عكس قيمة الجذر التربيعي للمَعلم."
#: doc/classes/Rect2.xml
msgid ""
@@ -48470,7 +48500,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48625,12 +48659,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48699,7 +48727,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49017,9 +49049,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49239,6 +49270,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49555,9 +49590,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49752,9 +49790,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50339,14 +50378,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50944,11 +50981,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51155,18 +51189,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51622,10 +51644,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51935,16 +51953,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52272,12 +52280,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52587,16 +52589,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52678,17 +52677,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52751,11 +52745,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52896,8 +52895,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52991,12 +52990,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54343,9 +54336,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54521,14 +54514,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54902,6 +54910,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة ظل الزاوية للمَعلم."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55055,13 +55110,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55326,7 +55374,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55375,10 +55428,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55743,12 +55796,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58152,10 +58220,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58243,7 +58307,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58521,11 +58586,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58600,15 +58666,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59197,7 +59260,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60028,17 +60096,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60155,7 +60212,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60181,6 +60239,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60229,9 +60292,9 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60242,8 +60305,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60283,8 +60346,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ عكس قيمة الجذر التربيعي للمَعلم."
#: doc/classes/Tree.xml
msgid ""
@@ -60652,11 +60716,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60690,12 +60753,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62044,12 +62121,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62076,8 +62147,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62735,6 +62805,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62946,28 +63024,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62995,7 +63069,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "ÙŠÙØ±Ø¬Ø¹ القيمة المعاكسة للمَعلم."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63087,7 +63163,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63810,13 +63888,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65574,13 +65645,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66016,8 +66080,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66291,7 +66355,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68611,6 +68678,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68710,12 +68793,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69172,13 +69249,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69518,16 +69588,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69576,8 +69639,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71285,11 +71348,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71313,6 +71376,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71418,15 +71489,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71490,6 +71561,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/ca.po b/doc/translations/ca.po
index 3ff232366a..2dbbe58fae 100644
--- a/doc/translations/ca.po
+++ b/doc/translations/ca.po
@@ -3500,8 +3500,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3860,23 +3860,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4216,12 +4214,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4230,9 +4225,8 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4311,6 +4305,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4445,10 +4443,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4877,24 +4871,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5078,6 +5054,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5087,8 +5072,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5109,8 +5094,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5756,6 +5741,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6039,6 +6028,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6505,8 +6498,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6741,21 +6734,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7141,9 +7132,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7340,13 +7334,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7646,12 +7633,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8773,8 +8754,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9068,9 +9049,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
+msgstr ""
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9462,11 +9442,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9559,7 +9536,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9604,13 +9583,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://godotengine.org/asset-library/asset/525"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9625,7 +9599,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9633,7 +9608,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9794,7 +9774,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9835,16 +9820,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
+msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9882,12 +9865,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10092,8 +10075,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10137,6 +10125,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10348,11 +10345,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10459,11 +10456,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10522,7 +10514,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10589,9 +10581,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10894,21 +10886,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
-"html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10919,13 +10907,13 @@ msgstr "https://godotengine.org/asset-library/asset/584"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11112,6 +11100,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11146,6 +11142,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11406,15 +11406,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11456,8 +11456,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11490,6 +11490,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11889,13 +11896,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12322,14 +12329,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12524,7 +12529,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12537,7 +12544,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12831,7 +12840,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12881,6 +12890,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12961,20 +12982,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13533,6 +13540,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13617,9 +13625,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13628,9 +13636,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13640,10 +13648,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13736,9 +13745,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13747,22 +13756,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13882,15 +13883,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
-"html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13929,8 +13926,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13975,16 +13972,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15442,18 +15439,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
+msgstr ""
#: doc/classes/Control.xml
msgid ""
@@ -15553,8 +15548,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17531,12 +17526,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17701,8 +17690,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17791,7 +17780,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17823,7 +17827,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17833,7 +17842,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17875,7 +17889,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17899,7 +17919,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17980,7 +18005,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18055,7 +18086,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18069,7 +18105,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18170,7 +18211,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18201,7 +18248,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18245,13 +18298,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
-"html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18417,6 +18463,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19127,11 +19181,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19186,8 +19237,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19196,7 +19247,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19224,13 +19279,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19353,12 +19401,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20386,13 +20428,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
-"html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20424,8 +20459,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20458,8 +20493,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20569,11 +20604,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
-"inspector_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20836,12 +20868,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21712,13 +21738,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22133,13 +22152,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
-"html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22460,9 +22472,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22781,30 +22792,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22864,12 +22880,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23547,6 +23565,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24148,11 +24170,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24179,6 +24201,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24319,20 +24357,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24402,13 +24426,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
-"html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25451,7 +25468,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26447,11 +26464,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26478,9 +26497,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
+msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26527,6 +26545,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26748,6 +26772,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27079,21 +27111,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
-"html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27884,13 +27901,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
-"html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28035,11 +28045,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
-"importing_images.html"
#: doc/classes/Image.xml
msgid ""
@@ -28756,6 +28763,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28947,7 +28958,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29176,8 +29187,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29205,8 +29216,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29363,7 +29374,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29498,14 +29514,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
+msgstr ""
#: doc/classes/InputEvent.xml
msgid ""
@@ -29548,8 +29559,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29580,8 +29591,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29625,10 +29636,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29795,17 +29804,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29889,17 +29896,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29910,13 +29921,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29953,9 +29957,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30082,12 +30090,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30841,15 +30843,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30897,6 +30890,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30957,11 +30973,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
-"html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30976,8 +30989,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31054,7 +31067,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31064,18 +31081,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31227,11 +31260,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
-"html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31480,11 +31510,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31913,6 +31940,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32109,12 +32140,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33961,10 +33986,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34195,22 +34216,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
-"html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34354,13 +34359,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
-"html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34602,13 +34600,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
-"html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34680,8 +34671,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34718,6 +34709,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34746,8 +34741,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35058,7 +35053,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35610,6 +35605,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35630,6 +35629,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35669,18 +35672,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35919,8 +35910,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36210,15 +36205,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36264,7 +36256,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36279,7 +36271,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36292,7 +36284,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36307,17 +36299,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36327,14 +36319,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36344,7 +36336,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37053,6 +37045,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37205,8 +37209,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
+msgstr ""
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37373,8 +37377,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37410,11 +37414,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37551,8 +37555,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37586,19 +37590,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
-"node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
-"gdscript_exports.html#advanced-exports"
#: doc/classes/Object.xml
msgid ""
@@ -37801,8 +37798,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37926,7 +37923,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38115,6 +38112,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38641,7 +38680,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38902,8 +38950,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39152,6 +39200,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39262,6 +39314,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40205,12 +40264,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40361,13 +40420,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40487,6 +40541,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41230,10 +41288,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
+msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43809,8 +43865,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44220,6 +44276,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45516,8 +45576,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45603,8 +45663,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45692,9 +45752,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47075,12 +47135,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47175,6 +47237,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47274,7 +47347,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47693,6 +47767,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47711,8 +47791,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47739,14 +47819,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47911,11 +47983,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
-"html"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48351,7 +48420,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48379,7 +48448,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48534,12 +48607,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48608,7 +48675,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48926,9 +48997,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49148,6 +49218,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49464,8 +49538,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49660,9 +49738,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50247,12 +50326,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50850,11 +50929,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html#root-motion"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51061,18 +51137,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
-"html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51528,10 +51592,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51841,16 +51901,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52178,12 +52228,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52493,15 +52537,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52583,14 +52625,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
+msgstr ""
#: doc/classes/Spatial.xml
msgid ""
@@ -52653,11 +52693,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52798,8 +52843,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52893,11 +52938,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54244,9 +54284,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54422,14 +54462,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54803,6 +54858,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54956,13 +55056,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55227,7 +55320,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55276,10 +55374,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55644,12 +55742,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58047,10 +58160,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58138,7 +58247,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58416,10 +58526,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
#: doc/classes/Thread.xml
msgid ""
@@ -58494,13 +58606,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
+msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59089,7 +59200,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59920,17 +60036,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
-"html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60046,7 +60151,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60072,6 +60178,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60119,9 +60230,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60132,8 +60243,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60173,7 +60284,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60542,11 +60653,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60581,12 +60691,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61934,11 +62056,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61965,8 +62082,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62622,6 +62738,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62832,24 +62956,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62876,7 +63000,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62967,7 +63093,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63690,13 +63818,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
-"index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65451,12 +65572,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65891,8 +66006,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66165,7 +66280,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68473,6 +68591,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68572,12 +68706,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69034,13 +69162,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69378,16 +69499,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69436,8 +69550,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71143,11 +71257,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71171,6 +71285,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71276,15 +71398,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71348,6 +71470,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot
index ca8bc21508..84d943d138 100644
--- a/doc/translations/classes.pot
+++ b/doc/translations/classes.pot
@@ -3380,8 +3380,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3740,20 +3740,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4094,9 +4094,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4106,7 +4105,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4186,6 +4185,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4320,10 +4323,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4752,22 +4751,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4951,6 +4934,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4960,7 +4952,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4982,7 +4974,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5629,6 +5621,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5912,6 +5908,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6378,7 +6378,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6614,18 +6614,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7012,9 +7012,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7211,10 +7214,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7514,12 +7513,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8641,7 +8634,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8936,7 +8929,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9329,7 +9322,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9423,7 +9416,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9468,12 +9463,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9489,7 +9479,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9497,7 +9488,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9658,7 +9654,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9699,14 +9700,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9745,12 +9745,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9955,8 +9955,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10000,6 +10005,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10211,11 +10225,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10322,10 +10336,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10384,7 +10394,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10451,9 +10461,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indirect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10756,16 +10766,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10777,12 +10787,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10970,6 +10980,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11004,6 +11022,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11264,14 +11286,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11314,7 +11336,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11348,6 +11370,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11747,12 +11776,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12180,11 +12209,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12380,7 +12409,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12393,7 +12424,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12687,7 +12720,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12737,6 +12770,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12817,16 +12862,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13385,6 +13420,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13469,9 +13505,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13480,9 +13516,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13492,10 +13528,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13588,9 +13625,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13599,22 +13636,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13734,11 +13763,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13778,7 +13806,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13824,15 +13852,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15291,15 +15319,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15400,8 +15428,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17378,10 +17406,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17546,8 +17570,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17636,7 +17660,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17668,7 +17707,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17678,7 +17722,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17720,7 +17769,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17744,7 +17799,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17825,7 +17885,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17900,7 +17966,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17914,7 +17985,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18015,7 +18091,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18046,7 +18128,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18090,10 +18178,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18259,6 +18343,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18969,7 +19061,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19025,8 +19117,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19035,7 +19127,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19063,11 +19159,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19190,10 +19281,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20221,10 +20308,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20256,8 +20339,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20290,8 +20373,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20401,7 +20484,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20665,10 +20748,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21539,10 +21618,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21957,10 +22032,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22281,9 +22352,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22602,24 +22672,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22680,12 +22757,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23363,6 +23442,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23964,11 +24047,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -23995,6 +24078,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24135,14 +24234,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24212,10 +24303,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25258,7 +25345,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26254,11 +26341,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26285,7 +26374,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26333,6 +26422,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26554,6 +26649,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26885,15 +26988,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27684,10 +27778,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27832,7 +27922,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28550,6 +28640,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28741,7 +28835,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28970,8 +29064,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -28999,8 +29093,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29157,7 +29251,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29292,12 +29391,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29341,8 +29436,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29373,8 +29468,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29418,7 +29513,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29586,17 +29681,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29680,17 +29773,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29701,10 +29798,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29741,9 +29834,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29870,10 +29967,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30628,12 +30721,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30680,6 +30767,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30740,7 +30850,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30756,7 +30866,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30834,7 +30944,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30844,18 +30958,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31007,7 +31137,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31257,7 +31387,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31687,6 +31817,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31883,10 +32017,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33733,10 +33863,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33967,16 +34093,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34120,10 +34236,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34365,10 +34477,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34440,7 +34548,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34478,6 +34586,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34506,7 +34618,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -35370,6 +35482,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35390,6 +35506,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35429,15 +35549,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35676,7 +35787,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35967,11 +36082,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36018,7 +36133,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36033,7 +36148,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36046,7 +36161,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36061,17 +36176,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36081,14 +36196,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36098,7 +36213,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36807,6 +36922,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36959,7 +37086,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37127,7 +37254,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37164,11 +37291,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37305,8 +37432,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37340,12 +37467,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37549,8 +37675,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37674,7 +37800,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37863,6 +37989,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38389,7 +38557,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38650,8 +38827,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38900,6 +39077,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39010,6 +39191,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39953,11 +40141,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40109,9 +40297,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40232,6 +40418,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40975,8 +41165,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43553,7 +43742,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43964,6 +44153,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45260,8 +45453,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45347,8 +45540,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45436,9 +45629,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46819,12 +47012,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46919,6 +47114,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47018,7 +47224,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47437,6 +47644,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47455,7 +47668,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47483,11 +47696,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47652,7 +47860,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48089,7 +48297,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48117,7 +48325,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48272,10 +48484,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48344,7 +48552,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48662,7 +48874,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48883,6 +49095,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49199,7 +49415,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49395,9 +49615,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49982,11 +50203,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50585,7 +50806,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50793,14 +51014,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51256,10 +51469,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51569,14 +51778,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51904,10 +52105,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52217,11 +52414,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52306,11 +52502,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52374,11 +52570,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52519,8 +52720,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52614,10 +52815,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53964,9 +54161,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54142,14 +54339,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54523,6 +54735,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54676,10 +54933,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54944,7 +55197,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -54993,10 +55251,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55361,12 +55619,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57764,10 +58037,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57855,7 +58124,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58133,7 +58403,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58209,11 +58483,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58803,7 +59077,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59634,14 +59913,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59757,7 +60028,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59783,6 +60055,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59830,9 +60107,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59843,8 +60120,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59884,7 +60161,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60253,11 +60530,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60292,12 +60568,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61645,10 +61933,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61675,8 +61959,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62332,6 +62615,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62542,23 +62833,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62586,7 +62877,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62677,7 +62970,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63400,10 +63695,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65158,10 +65449,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65596,8 +65883,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65870,7 +66157,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68178,6 +68468,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68277,10 +68583,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68737,10 +69039,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69078,13 +69376,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69133,8 +69427,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70844,7 +71138,7 @@ msgid ""
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70868,6 +71162,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70973,15 +71275,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71045,6 +71347,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/cs.po b/doc/translations/cs.po
index 9179bf7651..f6f8046382 100644
--- a/doc/translations/cs.po
+++ b/doc/translations/cs.po
@@ -3881,8 +3881,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4241,22 +4241,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4596,11 +4595,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4609,7 +4606,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4689,6 +4686,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4824,10 +4825,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5256,25 +5253,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5458,6 +5436,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5467,7 +5454,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5489,7 +5476,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -6136,6 +6123,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6419,6 +6410,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6887,7 +6882,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -7123,20 +7118,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7523,9 +7516,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7722,13 +7718,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8028,12 +8017,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9156,7 +9139,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -9455,10 +9438,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9850,11 +9831,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9947,7 +9925,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9992,12 +9972,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10013,7 +9988,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10021,7 +9997,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10182,7 +10163,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10223,16 +10209,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -10271,12 +10254,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10484,8 +10467,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10529,6 +10517,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10740,11 +10737,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10851,12 +10848,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10915,7 +10906,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10982,9 +10973,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11288,19 +11279,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+msgid "Matrices and transforms"
+msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -11312,12 +11300,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -11505,6 +11493,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11539,6 +11535,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11799,14 +11800,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11849,7 +11850,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11883,6 +11884,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12283,12 +12291,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12722,14 +12730,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12924,7 +12930,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12937,7 +12945,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13231,7 +13241,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -13281,6 +13291,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13361,18 +13383,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13932,6 +13942,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -14017,9 +14028,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14028,9 +14039,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14040,10 +14051,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14136,9 +14148,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14147,22 +14159,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14282,15 +14286,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14329,7 +14329,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -14375,15 +14375,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15843,20 +15843,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15956,8 +15952,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17967,12 +17963,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18137,8 +18127,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18227,7 +18217,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18259,7 +18264,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18269,7 +18279,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18311,7 +18326,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18335,7 +18356,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18416,7 +18442,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18491,7 +18523,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18505,7 +18542,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18606,7 +18648,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18637,7 +18685,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18681,13 +18735,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18853,6 +18900,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19566,11 +19621,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19626,8 +19678,8 @@ msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false.
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19636,7 +19688,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19665,13 +19721,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19794,12 +19843,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20827,13 +20870,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20865,8 +20901,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20899,8 +20935,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -21010,11 +21046,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21278,12 +21311,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22154,13 +22181,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22580,13 +22600,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22908,9 +22921,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23229,29 +23241,34 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -23312,12 +23329,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23996,6 +24015,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24597,11 +24620,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24628,6 +24651,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Vrátí sinus parametru."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24768,20 +24808,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24851,13 +24877,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25900,7 +25919,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26902,11 +26921,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26933,10 +26954,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26983,6 +27002,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27204,6 +27229,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27535,21 +27568,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28340,13 +28358,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28491,11 +28502,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29214,6 +29222,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29406,7 +29418,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29635,8 +29647,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29664,8 +29676,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29822,7 +29834,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29957,15 +29974,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -30008,8 +30019,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30040,8 +30051,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30085,11 +30096,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30256,17 +30264,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30350,17 +30356,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30371,13 +30381,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30414,9 +30417,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30543,13 +30550,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31304,15 +31304,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31360,6 +31351,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31420,11 +31434,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31439,7 +31450,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -31517,7 +31528,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31527,18 +31542,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31690,11 +31721,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -31944,11 +31972,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32377,6 +32402,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32574,13 +32603,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34428,10 +34450,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34663,22 +34681,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34822,13 +34824,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35077,13 +35072,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35155,7 +35143,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -35193,6 +35181,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35221,7 +35213,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -35548,7 +35540,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36104,6 +36096,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Vrátí arkus sinus parametru."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Vrátí inverzní odmocninu z parametru."
@@ -36125,6 +36122,10 @@ msgid "Returns the map's up direction."
msgstr "Vrátí arkus sinus parametru."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Vrátí sinus parametru."
@@ -36165,18 +36166,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36415,7 +36404,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -36706,16 +36699,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36761,7 +36750,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36776,7 +36765,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36789,7 +36778,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36804,17 +36793,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36824,14 +36813,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36841,7 +36830,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37550,6 +37539,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37702,11 +37703,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37873,7 +37871,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37910,11 +37908,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38051,8 +38049,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38086,19 +38084,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38301,8 +38292,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38429,7 +38420,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38618,6 +38609,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39145,7 +39178,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39409,8 +39451,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39661,6 +39703,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39776,6 +39823,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40734,11 +40788,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40890,13 +40944,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -41016,6 +41065,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41761,11 +41814,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44346,7 +44396,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -44758,6 +44808,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46055,8 +46110,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46142,8 +46197,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46231,9 +46286,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47614,12 +47669,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47714,6 +47771,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47813,7 +47881,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48232,6 +48301,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48250,7 +48325,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -48278,13 +48353,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48453,9 +48521,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48891,8 +48958,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Vrátí inverzní odmocninu z parametru."
#: doc/classes/Rect2.xml
msgid ""
@@ -48919,7 +48987,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49074,11 +49146,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49147,7 +49214,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49465,9 +49536,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49687,6 +49757,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50006,7 +50080,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50202,9 +50280,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50789,11 +50868,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -51392,11 +51471,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51603,18 +51679,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52071,10 +52135,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52384,16 +52444,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52721,11 +52771,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53035,16 +53080,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -53127,17 +53169,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53200,11 +53237,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53345,8 +53387,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53440,12 +53482,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54793,9 +54829,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54971,14 +55007,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55355,6 +55406,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Vrátí tangens parametru."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Vrátí sinus parametru."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55511,13 +55609,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55782,7 +55873,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55831,10 +55927,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56199,12 +56295,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58619,10 +58730,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58715,11 +58822,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
-msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
+msgstr ""
#: doc/classes/Theme.xml
msgid ""
@@ -59004,11 +59111,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
#: doc/classes/Thread.xml
msgid ""
@@ -59083,13 +59191,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -59679,7 +59785,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60513,15 +60624,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60638,7 +60740,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60664,6 +60767,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60712,9 +60820,9 @@ msgstr "Vrátí kosinus parametru."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60725,8 +60833,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60766,8 +60874,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Vrátí inverzní odmocninu z parametru."
#: doc/classes/Tree.xml
msgid ""
@@ -61135,11 +61244,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61173,12 +61281,28 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Vrací [code]true[/code] pokud si jsou [code]a[/code] a [code]b[/code] "
+"přiblížně rovny."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62527,11 +62651,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62558,8 +62677,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63220,6 +63338,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63431,23 +63557,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -63476,7 +63602,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Vrátí opaÄnou hodnotu parametru."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63570,7 +63698,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64294,13 +64424,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66060,13 +66183,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66502,8 +66618,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66777,7 +66893,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69099,6 +69218,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69198,12 +69333,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69660,13 +69789,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -70006,14 +70128,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70062,8 +70179,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71771,11 +71888,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71799,6 +71916,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71904,15 +72029,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71976,6 +72101,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/de.po b/doc/translations/de.po
index 6c8d12e11f..0e62657c08 100644
--- a/doc/translations/de.po
+++ b/doc/translations/de.po
@@ -40,12 +40,13 @@
# KuhnChris <kuhnchris@kuhnchris.eu>, 2021.
# Rémi Verschelde <remi@godotengine.org>, 2021.
# Antonio Noack <corperateraider@gmail.com>, 2022.
+# ‎ <artism90@googlemail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-03 03:53+0000\n"
-"Last-Translator: Antonio Noack <corperateraider@gmail.com>\n"
+"PO-Revision-Date: 2022-02-16 09:01+0000\n"
+"Last-Translator: ‎ <artism90@googlemail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/de/>\n"
"Language: de\n"
@@ -53,7 +54,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -96,69 +97,76 @@ msgid "Method Descriptions"
msgstr "Methoden-Beschreibung"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "Eigenschaften-Beschreibung"
+msgstr "Theme-Eigenschaften-Beschreibung"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "Erbt von:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "Geerbt von:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(überschreibt %s)"
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "Standard"
#: doc/tools/make_rst.py
msgid "Setter"
-msgstr ""
+msgstr "Setter"
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "Wert"
#: doc/tools/make_rst.py
msgid "Getter"
-msgstr ""
+msgstr "Getter"
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
-msgstr ""
+msgstr "Diese Methode sollte bei Gebrauch überschrieben werden."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Diese Methode verursacht keine Seiteneffekte. Variablen der betroffenen "
+"Instanz bleiben unverändert."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"Diese Methode nimmt eine beliebige Anzahl an Argumenten nach Ende der hier "
+"beschriebenen auf."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "Diese Methode wird dazu verwendet, einen Typ zu konstruieren."
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Diese Methode benötigt keine Instanz zum Aufruf, sie kann direkt über den "
+"Klassennamen aufgerufen werden."
#: doc/tools/make_rst.py
msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"Diese Methode beschreibt einen gültigen Operator für diesen Typ zur "
+"Verwendung als linksseitigen Operanden."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -864,6 +872,24 @@ msgid ""
"[/codeblock]\n"
"See also [method lerp] which performs the reverse of this operation."
msgstr ""
+"Gibt zurück einen Inter- bzw. Extrapolationsfaktor unter Berücksichtigung "
+"des Zahlenraums von [code]from[/code] bis [code]to[/code], und dem "
+"interpolierten Wert in [code]weight[/code]. Der Rückgabewert liegt zwischen "
+"[code]0.0[/code] und [code]1.0[/code] wenn [code]weight[/code] zwischen "
+"[code]from[/code] und [code]to[/code] (einschließlich). Liegt [code]weight[/"
+"code] außerhalb dieses Bereichs, wird ein Extrapolationsfaktor zurückgegeben "
+"(Rückgabewert kleiner als [code]0.0[/code] oder größer als [code]1.0[/"
+"code]).\n"
+"[codeblock]\n"
+"# Die Interpolationsratio im `lerp()`-Aufruf unten beträgt 0.75.\n"
+"var middle = lerp(20, 30, 0.75)\n"
+"# `middle` beträgt nun 27.5.\n"
+"# Angenommen, die ursprüngliche Ratio ist nun nicht mehr bekannt und soll "
+"zurückerrechnet werden.\n"
+"var ratio = inverse_lerp(20, 30, 27.5)\n"
+"# `ratio` beträgt nun 0.75.\n"
+"[/codeblock]\n"
+"Siehe auch [method lerp] für die Umkehrung dieser Funktion."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1619,6 +1645,45 @@ msgid ""
"3\n"
"[/codeblock]"
msgstr ""
+"Gibt zurück ein Array mit der angegebenen Reichweite. Range kann 1 Argument "
+"[code]N[/code] (0 bis [code]N[/code] - 1), zwei Argumente ([code]initial[/"
+"code], [code]final - 1[/code]) oder drei Argumente ([code]initial[/code], "
+"[code]final - 1[/code], [code]increment[/code]) aufnehmen. Gibt ein leeres "
+"Array zurück, falls die Reichweite ungültig ist (z.B. [code]range(2, 5, -1)[/"
+"code] oder [code]range(5, 5, 1)[/code]).\n"
+"Gibt zurück ein Array mit der angegebenen Reichweite. [code]range()[/code] "
+"kann 1 Argument N ([code]0[/code] bis [code]N - 1[/code]), zwei Argumente "
+"([code]initial[/code], [code]final - 1[/code]) oder drei Argumente "
+"([code]initial[/code], [code]final - 1[/code], [code]increment[/code]) "
+"aufnehmen. [code]increment[/code] darf negativ sein. Ist [code]increment[/"
+"code] negativ, wird [code]final - 1[/code] zu [code]final + 1[/code]. Ferner "
+"muss, damit die Schleife durchlaufen werden kann, der Initialwert größer "
+"sein als der Finalwert.\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"Ausgabe:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"Um rückwärts durch ein [Array] zu iterieren:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"Ausgabe:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -4271,9 +4336,10 @@ msgid ""
"easing."
msgstr ""
"Weist darauf hin, dass eine Float-Eigenschaft über eine exponentielle Easing-"
-"Funktion bearbeitet werden soll. Der Hinweisstring kann [code]\"attenuation"
-"\"[/code] enthalten, um die Kurve horizontal zu spiegeln und/oder "
-"[code]\"inout\"[/code], um auch eine In/Out-Easing-Funktion zu verwenden."
+"Funktion bearbeitet werden soll. Der Hinweisstring kann "
+"[code]\"attenuation\"[/code] enthalten, um die Kurve horizontal zu spiegeln "
+"und/oder [code]\"inout\"[/code], um auch eine In/Out-Easing-Funktion zu "
+"verwenden."
#: doc/classes/@GlobalScope.xml
msgid "Deprecated hint, unused."
@@ -4345,8 +4411,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"Weist darauf hin, dass eine String-Eigenschaft ein absoluter Pfad zu einer "
"Datei außerhalb des Projektordners ist. Beim Bearbeiten wird ein Dateidialog "
@@ -4747,22 +4813,21 @@ msgstr ""
"[b]Hinweis:[/b] Im Gegensatz zu [Rect2] hat [AABB] keine Variante die "
"Ganzzahlen statt Kommazahlen nutzt."
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -5222,11 +5287,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5235,9 +5298,8 @@ msgstr "https://docs.godotengine.org/de/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5329,6 +5391,10 @@ msgstr ""
"Editor über das Bedienfeld SpriteFrames konfiguriert werden kann."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
"Gibt [code]true[/code] zurück, wenn gerade eine Animation abgespielt wird."
@@ -5549,10 +5615,6 @@ msgstr ""
"dedizierten Methoden. Prüfen Sie [enum TrackType], um die verfügbaren Typen "
"zu sehen."
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "Fügt der Animation eine Spur hinzu."
@@ -6128,25 +6190,6 @@ msgstr ""
"[AnimationNodeBlendTree] erstellen, andernfalls sollte stattdessen "
"[AnimationRootNode] verwendet werden."
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6405,6 +6448,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "unbekanntes Node."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -6414,9 +6467,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6441,9 +6493,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -7293,6 +7344,11 @@ msgstr ""
"Prozesszeit."
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "unbekanntes Node."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7676,6 +7732,10 @@ msgstr ""
"Animationen verwendet werden."
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
"Bewegt die Animationen manuell um die angegebene Zeit (in Sekunden) weiter."
@@ -8228,9 +8288,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
#, fuzzy
@@ -8525,23 +8584,19 @@ msgstr ""
"Dämpfung) ändern oder außer Kraft setzen."
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
#, fuzzy
@@ -8974,9 +9029,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -9175,13 +9233,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -9481,12 +9532,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -10612,9 +10657,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -10913,10 +10957,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -11308,11 +11350,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -11405,7 +11444,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -11450,15 +11491,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -11473,7 +11507,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11481,7 +11516,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11642,7 +11682,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11683,18 +11728,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -11732,12 +11773,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11950,8 +11991,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -11995,6 +12041,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -12206,11 +12261,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -12317,12 +12372,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12381,7 +12430,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12449,9 +12498,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12756,23 +12805,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -12783,15 +12826,13 @@ msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -12982,6 +13023,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -13016,6 +13065,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Entfernt die Animation mit dem key [code]name[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -13276,17 +13330,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -13328,9 +13380,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -13363,6 +13414,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -13766,15 +13824,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -14211,14 +14267,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -14413,7 +14467,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -14426,7 +14482,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -14732,7 +14790,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -14782,6 +14840,19 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "Gesendet wenn die Sichtbarkeit (versteckt/sichtbar) sich verändert."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -14862,20 +14933,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -15458,6 +15515,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -15545,9 +15603,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"Die Physikebene(n) des Bereichs. Kollidierbare Objekte können in jeder der "
@@ -15562,9 +15620,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"Die Physikebene(n) des Bereichs. Kollidierbare Objekte können in jeder der "
@@ -15579,12 +15637,12 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
-#, fuzzy
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
-msgstr "Wenn [code]true[/code], wird der [AnimationTree] verarbeitet."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
+msgstr ""
#: doc/classes/CollisionObject.xml
msgid ""
@@ -15677,9 +15735,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"Die Physikebene(n) des Bereichs. Kollidierbare Objekte können in jeder der "
@@ -15694,9 +15752,9 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"Die Physikebene(n) des Bereichs. Kollidierbare Objekte können in jeder der "
@@ -15707,14 +15765,6 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -15834,15 +15884,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "Kubische Interpolation."
#: doc/classes/CollisionShape.xml
msgid ""
@@ -15881,9 +15928,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -15928,19 +15974,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -17465,20 +17508,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Control Taste."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -17578,8 +17618,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -19596,12 +19636,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -19766,8 +19800,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -19856,7 +19890,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -19888,7 +19937,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19898,7 +19952,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19940,7 +19999,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -19964,7 +20029,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -20045,7 +20115,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -20122,7 +20198,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -20136,7 +20217,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -20243,7 +20329,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -20274,7 +20366,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -20318,13 +20416,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -20492,6 +20583,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -21205,11 +21304,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -21266,8 +21362,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -21276,7 +21372,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -21305,13 +21405,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -21434,12 +21527,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -22467,13 +22554,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -22505,8 +22585,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -22539,8 +22619,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -22650,11 +22730,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -22921,12 +22998,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -23800,13 +23871,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -24226,13 +24290,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -24558,9 +24615,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -24884,31 +24940,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/de/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -24968,12 +25028,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -25654,6 +25716,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -26259,11 +26325,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -26290,6 +26356,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Gibt den aktuell wiedergegebenen Animationszustand zurück."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -26431,20 +26514,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -26514,13 +26583,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -27563,7 +27625,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -28593,11 +28655,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -28624,10 +28688,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -28673,6 +28735,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+"Gibt ein Array aller Zellen mit der angegebenen Kachel [code]index[/code] "
+"zurück."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -28895,6 +28966,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -29232,21 +29311,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -30037,13 +30101,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -30189,11 +30246,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -30916,6 +30970,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -31109,7 +31167,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -31338,8 +31396,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31370,8 +31428,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31528,7 +31586,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -31663,15 +31726,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -31714,8 +31771,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31746,8 +31803,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31791,11 +31848,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -31962,17 +32016,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -32056,17 +32108,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -32077,13 +32133,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -32120,9 +32169,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -32249,13 +32302,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -33014,15 +33060,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -33070,6 +33107,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -33130,11 +33190,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -33149,9 +33206,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -33228,7 +33284,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -33238,18 +33298,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -33401,11 +33477,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -33657,11 +33730,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -34094,6 +34164,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -34291,13 +34365,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -36146,10 +36213,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -36381,22 +36444,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -36540,13 +36587,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -36795,13 +36835,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -36873,9 +36906,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -36912,6 +36944,11 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "The cell height to use for fields."
+msgstr "Der Anrufmodus, der für Spuren der Anrufmethode verwendet werden soll."
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -36940,9 +36977,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -37284,7 +37320,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -37852,6 +37888,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Gibt das letzte Node des Graphen zurück."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Gibt die inverse Quadratwurzel des Parameters zurück."
@@ -37874,6 +37915,10 @@ msgid "Returns the map's up direction."
msgstr "Gibt das letzte Node des Graphen zurück."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Beendet die Tonausgabe."
@@ -37914,18 +37959,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -38164,9 +38197,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -38456,16 +38492,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -38511,7 +38543,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38526,7 +38558,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38539,7 +38571,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38554,17 +38586,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -38574,14 +38606,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -38591,7 +38623,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -39303,6 +39335,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -39455,11 +39499,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -39626,9 +39667,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -39664,11 +39704,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -39805,8 +39845,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -39840,19 +39880,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -40055,8 +40088,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -40183,7 +40216,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -40372,6 +40405,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -40899,7 +40974,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -41164,8 +41248,8 @@ msgstr "Gibt das Endnode des übergebenen Übergangs zurück."
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -41418,6 +41502,12 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+"Gibt [code]true[/code] zurück, wenn der Graph das übergebene Node enthält."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -41541,6 +41631,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -42508,14 +42605,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -42668,13 +42763,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -42795,6 +42885,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -43540,11 +43634,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -46190,9 +46281,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
#, fuzzy
@@ -46622,6 +46712,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Liefert die Position des Punktes bei Index [code]Punkt[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -47930,8 +48025,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48017,8 +48112,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -48106,9 +48201,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -49489,12 +49584,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49589,6 +49686,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -49688,7 +49796,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50107,6 +50216,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -50125,9 +50240,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -50154,14 +50268,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr "Konstruiert ein Quaternion aus der gegebenen [Basis]."
@@ -50347,9 +50453,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -50799,8 +50904,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Gibt die inverse Quadratwurzel des Parameters zurück."
#: doc/classes/Rect2.xml
#, fuzzy
@@ -50828,7 +50934,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -50983,12 +51093,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -51057,7 +51161,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -51379,9 +51487,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -51601,6 +51708,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -51921,9 +52032,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -52118,9 +52232,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -52708,14 +52823,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -53313,11 +53426,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -53525,18 +53635,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -53997,10 +54095,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -54310,16 +54404,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -54650,12 +54734,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -54966,14 +55044,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -55065,17 +55140,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -55138,11 +55208,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -55283,8 +55358,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -55378,12 +55453,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -56751,9 +56820,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -56929,14 +56998,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -57316,6 +57400,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Gibt den gegebenen Übergang zurück."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Gibt den Sinus des Parameters zurück."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -57472,13 +57603,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -57761,7 +57885,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -57810,10 +57939,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -58182,12 +58311,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -60619,10 +60763,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -60726,12 +60866,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
-"Gibt [code]true[/code] zurück, wenn das Array [code]value[/code] enthält."
#: doc/classes/Theme.xml
msgid ""
@@ -61021,11 +61160,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -61100,15 +61240,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -61700,7 +61837,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -62534,17 +62676,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -62663,7 +62794,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -62688,6 +62820,14 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
+#, fuzzy
+msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+"Gibt den Namen von [code]animation[/code] zurück oder eine leere "
+"Zeichenkette, wenn nicht gefunden."
+
+#: doc/classes/Tree.xml
msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -62737,9 +62877,9 @@ msgstr "Gibt den Kosinus des Parameters zurück."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -62750,8 +62890,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -62792,7 +62932,7 @@ msgstr ""
#: doc/classes/Tree.xml
#, fuzzy
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "Trennt das Node, der mit dem angegebenen Eingang verbunden ist."
#: doc/classes/Tree.xml
@@ -63161,11 +63301,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -63202,12 +63341,30 @@ msgstr ""
"Index [code]Dreieck[/code]."
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Liefert die Position des Punktes bei Index [code]Punkt[/code] im Dreieck von "
+"Index [code]Dreieck[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"Liefert die Position des Punktes bei Index [code]Punkt[/code] im Dreieck von "
+"Index [code]Dreieck[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -63583,12 +63740,13 @@ msgstr ""
" Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)\n"
"tween.start()\n"
"[/codeblock]\n"
-"Viele Methoden erfordern einen Eigenschaftsnamen, wie z. B. [code]\"position"
-"\"[/code] oben. Sie können den richtigen Eigenschaftsnamen finden, indem Sie "
-"den Mauszeiger über die Eigenschaft im Inspektor bewegen. Sie können auch "
-"die Komponenten einer Eigenschaft direkt angeben, indem Sie [code]\"property:"
-"component\"[/code] verwenden (z. B. [code]position:x[/code]), wobei die "
-"Eigenschaft nur für diese bestimmte Komponente gelten würde.\n"
+"Viele Methoden erfordern einen Eigenschaftsnamen, wie z. B. "
+"[code]\"position\"[/code] oben. Sie können den richtigen Eigenschaftsnamen "
+"finden, indem Sie den Mauszeiger über die Eigenschaft im Inspektor bewegen. "
+"Sie können auch die Komponenten einer Eigenschaft direkt angeben, indem Sie "
+"[code]\"property:component\"[/code] verwenden (z. B. [code]position:x[/"
+"code]), wobei die Eigenschaft nur für diese bestimmte Komponente gelten "
+"würde.\n"
"Viele der Methoden akzeptieren [code]trans_type[/code] und [code]ease_type[/"
"code]. Die erste akzeptiert eine [enum TransitionType]-Konstante und bezieht "
"sich auf die Art und Weise, wie das Timing der Animation behandelt wird "
@@ -64607,12 +64765,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -64643,8 +64795,7 @@ msgstr ""
"Es werden Fließkommazahlen als Koordinaten benutzt."
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -65394,6 +65545,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -65605,28 +65764,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/de/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -65654,7 +65809,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Gibt den Aktualisierungsmodus einer Wertespur zurück."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -65750,7 +65907,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -66489,13 +66648,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -68288,13 +68440,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -68732,8 +68877,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69011,7 +69156,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -71352,6 +71500,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -71451,12 +71615,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -71913,13 +72071,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/de/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -72259,16 +72410,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/de/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -72317,8 +72461,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -74039,11 +74183,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -74067,6 +74211,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -74172,15 +74324,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -74245,6 +74397,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "Wird ausgegeben, wenn [member frame] geändert wurde."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/el.po b/doc/translations/el.po
index 91be47cf2d..ddec69fbd0 100644
--- a/doc/translations/el.po
+++ b/doc/translations/el.po
@@ -8,12 +8,13 @@
# lawfulRobot <czavantias@gmail.com>, 2020.
# Michalis <michalisntovas@yahoo.gr>, 2021.
# leriaz <leriaz@live.com>, 2021.
+# thealexanton <greektechmania@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-03-31 03:55+0000\n"
-"Last-Translator: leriaz <leriaz@live.com>\n"
+"PO-Revision-Date: 2022-01-24 02:06+0000\n"
+"Last-Translator: thealexanton <greektechmania@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot-"
"class-reference/el/>\n"
"Language: el\n"
@@ -21,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -29,7 +30,7 @@ msgstr "ΠεÏιγÏαφή"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Οδηγοί"
+msgstr "ΕγχειÏίδια"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -70,7 +71,7 @@ msgstr "ΠεÏιγÏαφές ιδιοτήτων"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "ΚληÏονομεί:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
@@ -82,7 +83,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "ΠÏοεπιλεγμένο"
#: doc/tools/make_rst.py
msgid "Setter"
@@ -90,7 +91,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "τιμή"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -3393,8 +3394,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3753,22 +3754,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4108,11 +4108,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4121,9 +4119,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4202,6 +4199,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4337,10 +4338,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4769,25 +4766,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4971,6 +4949,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4980,9 +4967,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5003,9 +4989,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5651,6 +5636,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5934,6 +5923,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6400,9 +6393,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6637,23 +6629,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7039,9 +7027,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7238,13 +7229,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7544,12 +7528,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8671,9 +8649,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8968,10 +8945,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9363,11 +9338,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9460,7 +9432,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9505,15 +9479,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9528,7 +9495,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9536,7 +9504,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9697,7 +9670,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9738,18 +9716,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9787,12 +9761,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9997,8 +9971,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10042,6 +10021,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10253,11 +10241,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10364,12 +10352,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10428,7 +10410,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10495,9 +10477,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10801,23 +10783,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10828,15 +10804,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11023,6 +10997,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11057,6 +11039,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11317,17 +11303,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11369,9 +11353,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11404,6 +11387,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11804,15 +11794,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12243,14 +12231,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12445,7 +12431,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12458,7 +12446,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12752,7 +12742,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12802,6 +12792,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12882,20 +12884,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13454,6 +13442,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13538,9 +13527,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13549,9 +13538,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13561,10 +13550,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13657,9 +13647,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13668,22 +13658,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13803,15 +13785,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13850,9 +13828,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13897,19 +13874,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15367,20 +15341,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15480,8 +15450,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17464,12 +17434,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17634,8 +17598,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17724,7 +17688,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17756,7 +17735,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17766,7 +17750,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17808,7 +17797,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17832,7 +17827,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17913,7 +17913,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17988,7 +17994,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18002,7 +18013,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18103,7 +18119,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18134,7 +18156,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18178,13 +18206,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18350,6 +18371,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19063,11 +19092,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19122,8 +19148,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19132,7 +19158,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19161,13 +19191,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19290,12 +19313,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20323,13 +20340,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20361,8 +20371,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20395,8 +20405,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20506,11 +20516,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20773,12 +20780,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21649,13 +21650,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22070,13 +22064,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22398,9 +22385,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22719,31 +22705,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22803,12 +22793,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23487,6 +23479,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24088,11 +24084,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24119,6 +24115,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "ΕπιστÏέφει την εφαπτομένη της παÏαμέτÏου."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24259,20 +24272,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24342,13 +24341,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25391,7 +25383,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26389,11 +26381,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26420,10 +26414,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26470,6 +26462,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26691,6 +26689,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27022,21 +27028,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27827,13 +27818,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27978,11 +27962,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28700,6 +28681,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28892,7 +28877,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29121,8 +29106,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29150,8 +29135,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29308,7 +29293,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29443,15 +29433,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29494,8 +29478,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29526,8 +29510,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29571,11 +29555,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29742,17 +29723,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29836,17 +29815,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29857,13 +29840,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29900,9 +29876,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30029,13 +30009,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30790,15 +30763,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30846,6 +30810,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30906,11 +30893,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30925,9 +30909,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31004,7 +30987,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31014,18 +31001,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31177,11 +31180,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31430,11 +31430,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31863,6 +31860,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32060,13 +32061,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33913,10 +33907,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34148,22 +34138,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34307,13 +34281,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34555,13 +34522,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34633,9 +34593,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34672,6 +34631,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34700,9 +34663,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35025,7 +34987,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35581,6 +35543,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "ΕπιστÏέφει το τόξο ημιτόνου της παÏαμέτÏου."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "ΕπιστÏέφει το αντίστÏοφο της τετÏαγωνικής Ïίζας της παÏαμέτÏου."
@@ -35602,6 +35569,10 @@ msgid "Returns the map's up direction."
msgstr "ΕπιστÏέφει το τόξο ημιτόνου της παÏαμέτÏου."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
@@ -35642,18 +35613,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35892,9 +35851,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36184,16 +36146,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36239,7 +36197,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36254,7 +36212,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36267,7 +36225,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36282,17 +36240,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36302,14 +36260,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36319,7 +36277,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37028,6 +36986,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37180,11 +37150,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37351,9 +37318,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37389,11 +37355,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37530,8 +37496,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37565,19 +37531,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37780,8 +37739,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37905,7 +37864,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38094,6 +38053,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38620,7 +38621,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38884,8 +38894,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39136,6 +39146,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "ΕπιστÏέφει το συνημίτονο της παÏαμέτÏου."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39246,6 +39261,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40189,14 +40211,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40347,13 +40367,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40473,6 +40488,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41218,11 +41237,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43802,9 +43818,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44214,6 +44229,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45511,8 +45531,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45598,8 +45618,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45687,9 +45707,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47070,12 +47090,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47170,6 +47192,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47269,7 +47302,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47688,6 +47722,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47706,9 +47746,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47735,14 +47774,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47907,9 +47938,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48345,8 +48375,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "ΕπιστÏέφει το αντίστÏοφο της τετÏαγωνικής Ïίζας της παÏαμέτÏου."
#: doc/classes/Rect2.xml
msgid ""
@@ -48373,7 +48404,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48528,12 +48563,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48602,7 +48631,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48920,9 +48953,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49142,6 +49174,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49458,9 +49494,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49655,9 +49694,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50242,14 +50282,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50847,11 +50885,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51058,18 +51093,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51525,10 +51548,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51838,16 +51857,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52175,12 +52184,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52490,14 +52493,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -52581,17 +52581,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52654,11 +52649,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52799,8 +52799,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52894,12 +52894,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54246,9 +54240,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54424,14 +54418,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54805,6 +54814,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "ΕπιστÏέφει την εφαπτομένη της παÏαμέτÏου."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54958,13 +55014,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55229,7 +55278,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55278,10 +55332,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55646,12 +55700,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58055,10 +58124,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58146,7 +58211,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58424,11 +58490,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58503,15 +58570,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59100,7 +59164,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59931,17 +60000,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60058,7 +60116,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60084,6 +60143,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60132,9 +60196,9 @@ msgstr "ΕπιστÏέφει το συνημίτονο της παÏαμέτÏο
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60145,8 +60209,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60186,8 +60250,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "ΕπιστÏέφει το αντίστÏοφο της τετÏαγωνικής Ïίζας της παÏαμέτÏου."
#: doc/classes/Tree.xml
msgid ""
@@ -60555,11 +60620,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60593,12 +60657,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -61947,12 +62025,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61979,8 +62051,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62638,6 +62709,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62849,28 +62928,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62898,7 +62973,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "ΕπιστÏέφει την αντίθετη τιμή της παÏαμέτÏου."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62990,7 +63067,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63713,13 +63792,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65477,13 +65549,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65919,8 +65984,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66194,7 +66259,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68514,6 +68582,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68613,12 +68697,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69075,13 +69153,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69421,16 +69492,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69479,8 +69543,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71187,11 +71251,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71215,6 +71279,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71320,15 +71392,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71392,6 +71464,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/es.po b/doc/translations/es.po
index bec08603ba..9bd808d8c4 100644
--- a/doc/translations/es.po
+++ b/doc/translations/es.po
@@ -5,7 +5,7 @@
#
# 44pes Games <44pes.games@gmail.com>, 2020.
# Megamega53 <Christopher.Morales21@myhunter.cuny.edu>, 2020, 2021.
-# Javier Ocampos <xavier.ocampos@gmail.com>, 2020, 2021.
+# Javier Ocampos <xavier.ocampos@gmail.com>, 2020, 2021, 2022.
# Serk Lintur <serk.lintur@gmail.com>, 2020.
# Lambientan <pedrogtzr@protonmail.com>, 2020.
# paco <pacosoftfree@protonmail.com>, 2020, 2021.
@@ -29,12 +29,13 @@
# Rémi Verschelde <akien@godotengine.org>, 2021.
# Rémi Verschelde <remi@godotengine.org>, 2021.
# Alfonso V <alfonsov96@gmail.com>, 2022.
+# Alejandro Pérez <alejandro.pr.rz@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-09 14:56+0000\n"
-"Last-Translator: Alfonso V <alfonsov96@gmail.com>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: Alejandro Pérez <alejandro.pr.rz@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/es/>\n"
"Language: es\n"
@@ -42,7 +43,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -91,7 +92,7 @@ msgstr "Descripciones de Propiedades"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr "Hereda de:"
+msgstr "Herencia:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
@@ -102,7 +103,6 @@ msgid "(overrides %s)"
msgstr "(sobreescribe %s)"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Default"
msgstr "Por defecto"
@@ -128,13 +128,12 @@ msgstr ""
"tenga algún efecto."
#: doc/tools/make_rst.py
-#, fuzzy
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
"Este método no tiene efectos secundarios. No modifica ninguna de las "
-"variables miembras de la instancia."
+"variables miembro de la instancia."
#: doc/tools/make_rst.py
msgid ""
@@ -144,7 +143,6 @@ msgstr ""
"descritos aquí."
#: doc/tools/make_rst.py
-#, fuzzy
msgid "This method is used to construct a type."
msgstr "Este método se utiliza para construir un tipo."
@@ -1487,8 +1485,8 @@ msgstr ""
"[/codeblock]\n"
"[b]Nota:[/b] Los errores imprimidos de esta manera no pausaran la ejecución "
"del proyecto. Para imprimir un mensaje de error y pausar la ejecución del "
-"proyecto en compilaciones de depuración, usa [code]assert(false, \"test error"
-"\")[/code] en su lugar."
+"proyecto en compilaciones de depuración, usa [code]assert(false, \"test "
+"error\")[/code] en su lugar."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -4398,8 +4396,8 @@ msgid ""
"or_greater\"[/code]."
msgstr ""
"Sugiere que una propiedad entera o real debe estar dentro de un rango "
-"exponencial especificado mediante la string de sugerencias [code]\"min,max"
-"\"[/code] o [code]\"min,max,paso\"[/code]. La string de sugerencias puede "
+"exponencial especificado mediante la string de sugerencias [code]\"min,"
+"max\"[/code] o [code]\"min,max,paso\"[/code]. La string de sugerencias puede "
"incluir opcionalmente [code]\"or_greater\"[/code] y/o [code]\"or_lesser\"[/"
"code] para permitir la entrada manual que va respectivamente por encima del "
"máximo o por debajo de los valores mínimos. Ejemplo: [code]\"0.01,100,0.01,"
@@ -4496,8 +4494,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"Sugiere que una propiedad string es una ruta absoluta a un archivo fuera de "
"la carpeta del proyecto. Al editarla se mostrará un diálogo de archivo para "
@@ -4897,22 +4895,22 @@ msgstr ""
"utiliza típicamente para pruebas de superposición rápida.\n"
"Utiliza coordenadas reales."
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
-msgstr ""
+#, fuzzy
+msgid "Vector math"
+msgstr "Vector utilizado para las matemáticas 2D usando coordenadas enteras."
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -5381,11 +5379,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5394,9 +5390,8 @@ msgstr "https://docs.godotengine.org/es/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5489,6 +5484,10 @@ msgstr ""
"configurado en el editor a través del panel de SpriteFrames."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr "Devuelve [code]true[/code] si se está reproduciendo una animación."
@@ -5703,10 +5702,6 @@ msgstr ""
"tienen diferentes tipos, cada una con su propio conjunto de métodos "
"dedicados. Consulta [enum TrackType] para ver los tipos disponibles."
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "Añade una pista a la animación."
@@ -6277,25 +6272,6 @@ msgstr ""
"[AnimationNodeBlendTree], de lo contrario se debe usar [AnimationRootNode] "
"en su lugar."
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6548,6 +6524,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Nodo desconocido."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -6557,9 +6543,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6583,9 +6568,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -7417,6 +7401,11 @@ msgstr ""
"ejecucion."
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Nodo desconocido."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7800,6 +7789,10 @@ msgstr ""
"editar animaciones."
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
"Avanza manualmente las animaciones en el tiempo especificado (en segundos)."
@@ -8361,9 +8354,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
#, fuzzy
@@ -8682,23 +8674,19 @@ msgstr ""
"(gravedad, amortiguación)."
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
#, fuzzy
@@ -9210,9 +9198,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -9498,13 +9489,6 @@ msgstr ""
"los modos primitivos de triangulo."
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -9926,12 +9910,6 @@ msgstr ""
"XRCamera3D puede quedarse unos milisegundos atrás de lo que se utiliza para "
"el renderizado como resultado."
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -11547,9 +11525,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -11921,10 +11898,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -12455,11 +12430,8 @@ msgstr ""
"el sonido. Luego devuelve la muestra grabada."
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -12577,7 +12549,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -12625,15 +12599,8 @@ msgstr ""
"su reproducción a través de una interfaz de voz."
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -12648,9 +12615,11 @@ msgstr ""
"[code]at_position[/code]."
#: doc/classes/AudioServer.xml
+#, fuzzy
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
"Nombre del dispositivo actual para la entrada de audio (ver [method "
"capture_get_device_list])."
@@ -12662,10 +12631,13 @@ msgstr ""
"detectados en el sistema."
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
-"Establece qué dispositivo de entrada de audio se utiliza para la captura de "
-"audio."
#: doc/classes/AudioServer.xml
msgid "Generates an [AudioBusLayout] using the available buses and effects."
@@ -12859,10 +12831,13 @@ msgstr "Número de buses de audio disponibles."
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
-"Nombre del dispositivo actual para la salida de audio (ver [method "
-"get_device_list])."
#: doc/classes/AudioServer.xml
msgid ""
@@ -12908,18 +12883,15 @@ msgstr ""
"[AudioStreamOGGVorbis])."
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr "Efecto de audio para audio."
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -12957,12 +12929,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -13193,9 +13165,14 @@ msgstr ""
"Reproduce el audio desde la posición dada [code]de_posición[/code], en "
"segundos."
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
-msgstr "Ãreas en las que se reproduce este sonido."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Dampens audio over distance with this as an exponent."
@@ -13241,6 +13218,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -13501,11 +13487,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -13636,12 +13622,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -13700,7 +13680,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -13772,9 +13752,9 @@ msgstr "La altura de la cápsula."
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -14138,23 +14118,18 @@ msgstr ""
"transformaciones\"."
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/using_transforms.html"
+msgid "Using 3D transforms"
+msgstr "Utiliza esto cuando uses las transformadas 3D."
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -14165,15 +14140,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -14429,6 +14402,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
"Crea un mapa de bits con el tamaño especificado, lleno de [code]false[/code]."
@@ -14470,6 +14451,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Llena la imagen con un determinado [Color]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -14844,17 +14830,15 @@ msgstr "Forma de caja 3D que puede ser un hijo de un [PhysicsBody] o [Area]."
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -14915,9 +14899,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -14957,6 +14940,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr "El texto del botón que se mostrará dentro del área del botón."
@@ -15498,15 +15488,13 @@ msgstr ""
"get_camera_screen_center] para obtener la posición real."
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -16089,14 +16077,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -16362,8 +16348,10 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr "Devuelve la matriz de transformación de este objeto canvas."
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
-msgstr "Devuelve la posición global del ratón."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the global transform matrix of this item."
@@ -16377,8 +16365,10 @@ msgstr ""
"el canvas."
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
-msgstr "Devuelve la posición del ratón relativa a la posición de este objeto."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the transform matrix of this item."
@@ -16760,8 +16750,9 @@ msgstr ""
"capa 1+ o superior), o para los fondos (en la capa -1 o inferior)."
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr ""
+#, fuzzy
+msgid "Canvas layers"
+msgstr "Capa de dibujo de canvas."
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -16818,6 +16809,19 @@ msgstr "La escala de la capa."
msgid "The layer's transform."
msgstr "La transformada de la capa."
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "Emitido cuando el VisibilityNotifier sale de la vista de una [Camera]."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr "Tiñe todo el canvas."
@@ -16907,20 +16911,6 @@ msgstr ""
"Al establecer varias propiedades en este objeto, puede controlar cómo se "
"mostrarán los caracteres individuales en un [RichTextEffect]."
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
#, fuzzy
msgid ""
@@ -17682,6 +17672,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr "Devuelve el [RID] del objeto."
@@ -17778,9 +17769,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"La(s) capa(s) física(s) del área. Los objetos coleccionables pueden existir "
@@ -17795,9 +17786,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"La(s) capa(s) física(s) del área. Los objetos coleccionables pueden existir "
@@ -17815,14 +17806,17 @@ msgstr ""
"Si [code]true[/code], el [CollisionObject] continuará recibiendo eventos de "
"entrada mientras el ratón es arrastrado a través de sus formas."
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#, fuzzy
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
-"Si [code]true[/code], las formas de [ColisiónObjeto] responderán a las de "
-"[RayCast]."
+"Si [code]true[/code], este objeto es seleccionable. Un objeto seleccionable "
+"puede detectar el puntero del ratón entrando y saliendo, y si el ratón está "
+"dentro de él, informar de los eventos de entrada. Requiere al menos un bit "
+"[code]collision_layer[/code] para ser establecido."
#: doc/classes/CollisionObject.xml
#, fuzzy
@@ -17948,9 +17942,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"La(s) capa(s) física(s) del área. Los objetos coleccionables pueden existir "
@@ -17965,9 +17959,9 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"La(s) capa(s) física(s) del área. Los objetos coleccionables pueden existir "
@@ -17978,18 +17972,6 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-"Si [code]true[/code], este objeto es seleccionable. Un objeto seleccionable "
-"puede detectar el puntero del ratón entrando y saliendo, y si el ratón está "
-"dentro de él, informar de los eventos de entrada. Requiere al menos un bit "
-"[code]collision_layer[/code] para ser establecido."
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -18154,15 +18136,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "Interpolación cúbica."
#: doc/classes/CollisionShape.xml
#, fuzzy
@@ -18213,9 +18192,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
#, fuzzy
@@ -18282,19 +18260,16 @@ msgstr ""
"un Color siempre se evaluará a [code]true[/code]."
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -20125,20 +20100,17 @@ msgstr ""
"como [method add_font_override]. Puedes anular el tema con el inspector."
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Tecla Control."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -20301,8 +20273,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -21718,8 +21690,8 @@ msgid ""
"highlight or insert text."
msgstr ""
"Muestra el cursor del ratón del sistema I-beam cuando el usuario pasa por "
-"encima del nodo. El puntero del I-beam tiene una forma similar a la de la \"I"
-"\". Le dice al usuario que puede resaltar o insertar texto."
+"encima del nodo. El puntero del I-beam tiene una forma similar a la de la "
+"\"I\". Le dice al usuario que puede resaltar o insertar texto."
#: doc/classes/Control.xml
msgid ""
@@ -22993,12 +22965,6 @@ msgstr ""
"la aceleración por hardware, pero puede no funcionar en dispositivos más "
"antiguos."
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
#, fuzzy
msgid ""
@@ -23246,8 +23212,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -23384,8 +23350,23 @@ msgid "A CSG Box shape."
msgstr "Una forma de caja CSG."
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
-msgstr "Este nodo permite crear una caja para usarla con el sistema CSG."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
+msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
msgid "Depth of the box measured from the center of the box."
@@ -23417,7 +23398,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
"Para arreglos complejos de formas, a veces es necesario añadir estructura a "
"sus nodos CSG. El nodo CSGCombiner3D te permite crear esta estructura. El "
@@ -23435,9 +23421,13 @@ msgstr "Una forma de cilindro CSG."
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Este nodo permite crear un cilindro (o cono) para su uso con el sistema CSG."
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
@@ -23485,11 +23475,14 @@ msgstr "Una forma de malla de CSG que utiliza un recurso de malla."
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Este nodo CSG permite utilizar cualquier recurso de malla como una forma "
-"CSG, siempre que esté cerrado, no se auto-interfiera, no contenga caras "
-"internas y no tenga bordes que se conecten a más de dos caras."
#: modules/csg/doc_classes/CSGMesh.xml
msgid "The [Material] used in drawing the CSG shape."
@@ -23512,7 +23505,12 @@ msgstr "Extrae una forma de polígono 2D para crear una malla 3D."
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -23595,10 +23593,14 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-#, fuzzy
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
-"Una array de puntos que define la forma que vamos a realizar la extrusión."
#: modules/csg/doc_classes/CSGPolygon.xml
#, fuzzy
@@ -23680,11 +23682,13 @@ msgstr "Clase base para primitivas CSG."
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Clase padre para varias primitivas de CSG. Contiene el código y la "
-"funcionalidad que es común entre ellos. No puede ser usado directamente. En "
-"su lugar, usa una de las varias clases que heredan de ella."
#: modules/csg/doc_classes/CSGPrimitive.xml
msgid "Invert the faces of the mesh."
@@ -23697,10 +23701,13 @@ msgstr "La clase base del CSG."
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Esta es la clase base de CSG que proporciona el soporte de operación de CSG "
-"a los diversos nodos de CSG en Godot."
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
#: doc/classes/SoftBody.xml
@@ -23834,8 +23841,14 @@ msgid "A CSG Sphere shape."
msgstr "Una forma de esfera CSG."
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
-msgstr "Este nodo permite crear una esfera para usarla con el sistema CSG."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
msgid "The material used to render the sphere."
@@ -23868,8 +23881,14 @@ msgid "A CSG Torus shape."
msgstr "Una forma de Toroide CSG."
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
-msgstr "Este nodo permite crear un toroide para su uso con el sistema CSG."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
msgid "The inner radius of the torus."
@@ -23921,13 +23940,6 @@ msgstr ""
"Vea también [GodotSharp]."
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/step_by_step/"
-"animations.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr "Devuelve una nueva instancia del script."
@@ -24115,6 +24127,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -25134,11 +25154,8 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -25215,9 +25232,10 @@ msgstr ""
"array dada."
#: doc/classes/Dictionary.xml
+#, fuzzy
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -25226,7 +25244,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
"Devuelve un valor entero hash que representa el contenido del diccionario. "
"Esto puede ser usado para comparar los diccionarios por su valor:\n"
@@ -25273,13 +25295,6 @@ msgstr ""
"transformada DirectionalLight3D (origen). Sólo se utiliza la base para "
"determinar la dirección de la luz."
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -25458,12 +25473,6 @@ msgstr ""
" print(\"Se produjo un error al intentar acceder al camino.\")\n"
"[/codeblock]"
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -26898,13 +26907,6 @@ msgstr ""
" return OK\n"
"[/codeblock]"
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -26944,8 +26946,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -26960,8 +26962,8 @@ msgstr ""
"func get_option_visibility(option, options):\n"
" # Sólo muestra el ajuste de calidad de pérdida si el modo de compresión "
"está ajustado a \"pérdida\".\n"
-" if option == \"compress/lossy_quality\" y options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" y options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" retorno true\n"
@@ -27003,8 +27005,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
"Obtiene el tipo de recurso Godot asociado a este cargador. Por ejemplo, "
"[code]\"Mesh\"[/code] o [code]\"Animation\"[/code]."
@@ -27171,11 +27173,8 @@ msgstr ""
"En cada una de estas llamadas, las funciones \"add\" pueden ser llamadas."
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
#, fuzzy
@@ -27504,12 +27503,6 @@ msgstr ""
"[EditorScript] para añadir funciones al editor."
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -28684,13 +28677,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -29295,13 +29281,6 @@ msgstr ""
"el tutorial en la documentación para más información."
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -29706,9 +29685,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -30136,11 +30114,18 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
"Recurso para los nodos del entorno (como [WorldEnvironment]) que definen "
"múltiples operaciones del entorno (como el fondo [Sky] o [Color], la luz "
@@ -30153,22 +30138,19 @@ msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/es/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -30250,13 +30232,16 @@ msgstr ""
"la luz."
#: doc/classes/Environment.xml
+#, fuzzy
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
"Define la cantidad de luz que el cielo trae a la escena. Un valor de 0 "
"significa que la emisión de luz del cielo no tiene efecto en la iluminación "
@@ -30824,8 +30809,8 @@ msgstr ""
"Mantiene en pantalla cada píxel dibujado en el fondo. Este es el modo de "
"fondo más rápido, pero sólo puede ser usado con seguridad en escenas de "
"interior (sin reflejos visibles en el cielo o en el cielo). Si se activa en "
-"una escena en la que el fondo es visible, los artefactos de \"rastro fantasma"
-"\" serán visibles al mover la cámara."
+"una escena en la que el fondo es visible, los artefactos de \"rastro "
+"fantasma\" serán visibles al mover la cámara."
#: doc/classes/Environment.xml
msgid ""
@@ -31165,6 +31150,10 @@ msgstr ""
"godotengine.org/es/latest/tutorials/io/data_paths.html]Rutas de datos[/url]."
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -31920,12 +31909,14 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
-msgstr ""
+#, fuzzy
+msgid "Wikipedia: Double-precision floating-point format"
+msgstr "Pone un real de double-precision en el stream."
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
-msgstr ""
+#, fuzzy
+msgid "Wikipedia: Single-precision floating-point format"
+msgstr "Pone un real de single-precision en el stream."
#: doc/classes/float.xml
msgid ""
@@ -31964,6 +31955,24 @@ msgstr ""
"devolverá 1 mientras que si se llama a [code]float(\"1e3a2\")[/code] "
"devolverá 1000.0."
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "Clase de base para contenedores de caja."
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Devuelve la posición de scrolling actual."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr "Soporte de fuentes y dibujos de texto internacionalizados."
@@ -32157,20 +32166,6 @@ msgstr ""
"proyecto."
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -32277,13 +32272,6 @@ msgstr ""
"con una de las clases base del script."
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr "Devuelve el código de bytes para el código fuente del script."
@@ -33723,7 +33711,7 @@ msgstr ""
"usando [member ProjectSettings.rendering/quality/gi_probes/quality]."
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -34986,11 +34974,13 @@ msgstr ""
"El número de columnas en el [GridContainer]. Si se modifica, el "
"[GridContainer] reordena sus hijos para acomodar el nuevo diseño."
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr "La separación horizontal de los nodos de los niños."
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr "La separación vertical de los nodos de los hijos."
@@ -35030,10 +35020,8 @@ msgstr ""
"tiene las mismas dimensiones y puede contener varias células."
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -35091,6 +35079,15 @@ msgstr ""
"el mapa de la cuadrícula."
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+"Devuelve una array de todas las celdas con el [code]index[/code] del tile "
+"dado."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -35391,6 +35388,16 @@ msgstr ""
"Ancho de los datos del mapa de altura. Si se cambia esto, se redimensionará "
"el [member map_data]."
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal flow container."
+msgstr "Contenedor de caja horizontal."
+
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal version of [FlowContainer]."
+msgstr "Contenedor dividido horizontalmente."
+
#: doc/classes/HingeJoint.xml
#, fuzzy
msgid "A hinge between two 3D PhysicsBodies."
@@ -35794,21 +35801,6 @@ msgstr ""
"añadiendo el [code]Access-Control-Allow-Origin: *[/code] encabezado HTTP."
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
"Cierra la conexión actual, permitiendo la reutilización de este [HTTPClient]."
@@ -35983,8 +35975,8 @@ msgstr ""
"Para crear una petición POST con cadenas de consulta para empujar al "
"servidor, hazlo:\n"
"[codeblock]\n"
-"var campos = {\"nombreUsuario\" : \"usuario\", \"password\" : \"contrasena"
-"\"}\n"
+"var campos = {\"nombreUsuario\" : \"usuario\", \"password\" : "
+"\"contrasena\"}\n"
"var query = http_client.query_string_from_dict(campos)\n"
"var headers = [\"Content-Type: application/x-www-form-urlencoded\", "
"\"Content-Length: \" + str(query_string.length())]]\n"
@@ -37004,13 +36996,6 @@ msgstr ""
"añadiendo el [code]Access-Control-Allow-Origin: *[/code] encabezado HTTP."
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr "Cancela la solicitud actual."
@@ -37201,11 +37186,8 @@ msgstr ""
"importarán."
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -38198,6 +38180,12 @@ msgstr ""
"La textura de la fuente (antes de la compresión) es una textura normal (por "
"ejemplo, puede ser comprimida en dos canales)."
+#: doc/classes/Image.xml
+#, fuzzy
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+"La textura de la fuente (antes de la compresión) está en el espacio sRGB."
+
#: doc/classes/ImageTexture.xml
#, fuzzy
msgid "A [Texture] based on an [Image]."
@@ -38420,7 +38408,7 @@ msgstr ""
"clase [InputMap]."
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -38701,8 +38689,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"Devuelve [code]true[/code] si está pulsando el evento de acción. Ten en "
@@ -38742,8 +38730,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -38964,8 +38952,13 @@ msgstr ""
"exportación. iOS no admite duración."
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
-msgstr "Establece la posición del ratón en el vector especificado."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
+msgstr ""
#: doc/classes/Input.xml
msgid "Emitted when a joypad device has been connected or disconnected."
@@ -39135,15 +39128,9 @@ msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
"Clase base de todo tipo de evento de entrada. Ver [method Node._input]."
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -39197,8 +39184,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"Devuelve [code]true[/code] si se está pulsando la acción dada (y no es un "
@@ -39243,8 +39230,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"Devuelve [code]true[/code] si se está pulsando la acción dada (y no es un "
@@ -39306,10 +39293,8 @@ msgstr ""
#: doc/classes/InputEventAction.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/inputs/inputevent."
-"html#actions"
+msgid "InputEvent: Actions"
+msgstr "Tipo de evento de entrada para las acciones."
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -39544,17 +39529,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -39639,27 +39622,23 @@ msgstr ""
"botón [enum ButtonList] o una combinación de ellas."
#: doc/classes/InputEventMouse.xml
-#, fuzzy
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
-"La posición local del ratón relativa al [Viewport]. Si se utiliza en [method "
-"Control._gui_input], la posición es relativa al [Control] actual que está "
-"bajo el ratón."
#: doc/classes/InputEventMouse.xml
-#, fuzzy
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
-"La posición local del ratón relativa al [Viewport]. Si se utiliza en [method "
-"Control._gui_input], la posición es relativa al [Control] actual que está "
-"bajo el ratón."
#: doc/classes/InputEventMouseButton.xml
msgid "Input event type for mouse button events."
@@ -39670,13 +39649,6 @@ msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
"Contiene información sobre los clics del ratón. Ver [method Node._input]."
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -39722,9 +39694,9 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
msgstr ""
"Contiene información sobre el movimiento del ratón y el bolígrafo. Soporta "
"posiciones y velocidades relativas y absolutas. Ver [method Node._input].\n"
@@ -39733,10 +39705,15 @@ msgstr ""
"llama a [method Input.set_use_accumulated_input] con [code]false[/code] para "
"que los eventos se emitan lo más a menudo posible. Si utilizas "
"InputEventMouseMotion para dibujar líneas, considera la posibilidad de "
-"implementar [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]el algoritmo de línea de Bresenham[/url] también para "
-"evitar los huecos visibles en las líneas si el usuario mueve el ratón "
-"rápidamente."
+"implementar [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]el algoritmo de línea de Bresenham[/url] "
+"también para evitar los huecos visibles en las líneas si el usuario mueve el "
+"ratón rápidamente."
+
+#: doc/classes/InputEventMouseMotion.xml
+#, fuzzy
+msgid "Mouse and input coordinates"
+msgstr "Medio desplazamiento en la coordenada X."
#: doc/classes/InputEventMouseMotion.xml
msgid ""
@@ -39899,13 +39876,6 @@ msgstr ""
"action_add_event]. Ver [method Node._input]."
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -40914,15 +40884,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -40977,6 +40938,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
#, fuzzy
msgid "A wrapper class for native JavaScript objects."
@@ -41041,11 +41025,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -41063,9 +41044,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -41161,7 +41141,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -41171,18 +41155,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -41380,11 +41380,8 @@ msgstr ""
"pero que no requieren de una física avanzada."
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -41756,10 +41753,8 @@ msgstr ""
#: doc/classes/KinematicBody2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
+msgstr "Nodo 2D del cuerpo cinético."
#: doc/classes/KinematicBody2D.xml
#, fuzzy
@@ -42341,6 +42336,10 @@ msgstr ""
"de luz heredan de ella. Light3D contiene las variables y parámetros comunes "
"usados para la iluminación."
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -42609,13 +42608,6 @@ msgstr ""
"y varios otros parámetros (relacionados con el rango y las sombras).\n"
"[b]Nota:[/b] Light2D también puede ser usado como una máscara."
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr "El [Color] de la Light2D."
@@ -45008,12 +45000,8 @@ msgid ""
msgstr ""
"Nodo utilizado para mostrar una [Mesh] en 2D. Puede ser construido a partir "
"de un [Sprite2D] existente mediante una herramienta en la barra de "
-"herramientas del editor. Selecciona \"Sprite2D\" y luego \"Convertir a Mesh2D"
-"\", selecciona los ajustes en el popup y pulsa \"Crear Mesh2D\"."
-
-#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
+"herramientas del editor. Selecciona \"Sprite2D\" y luego \"Convertir a "
+"Mesh2D\", selecciona los ajustes en el popup y pulsa \"Crear Mesh2D\"."
#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
@@ -45030,8 +45018,8 @@ msgid ""
msgstr ""
"El mapa normal que se utilizará si se utiliza el [CanvasItemMaterial] "
"predeterminado.\n"
-"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y Z"
-"+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y "
+"Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -45333,22 +45321,6 @@ msgstr ""
"Dado que las instancias pueden tener cualquier comportamiento, el AABB "
"utilizado para la visibilidad debe ser proporcionado por el usuario."
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -45517,13 +45489,6 @@ msgstr ""
#: doc/classes/MultiMeshInstance.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -45885,13 +45850,6 @@ msgstr ""
"proteger una sección crítica; sin embargo, hay que tener cuidado de evitar "
"los bloqueos."
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -45986,9 +45944,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
#, fuzzy
@@ -46037,6 +45994,11 @@ msgstr ""
"(radio, altura, etc.) se consideran en el cálculo del camino, de lo "
"contrario se ignoran."
+#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "The cell height to use for fields."
+msgstr "El modo de llamada a utilizar para las Call Method Tracks."
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -46071,9 +46033,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -46429,7 +46390,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -47077,6 +47038,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Devuelve el tamaño del array."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -47102,6 +47068,11 @@ msgstr "Devuelve las dimensiones del mapa de bits."
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr "Devuelve la transformada aplicada a la malla de navegación del objeto."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map up direction."
msgstr "Detiene el audio."
@@ -47145,18 +47116,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -47503,8 +47462,12 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr "API multijugador de alto nivel."
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -47935,16 +47898,12 @@ msgstr ""
"redes de alto nivel y las demostraciones correspondientes."
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -48012,7 +47971,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Llamado cuando hay un evento de entrada. El evento de entrada se propaga a "
"través del árbol de nodos hasta que un nodo lo consume.\n"
@@ -48040,7 +47999,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Llamado durante el paso de procesamiento físico del bucle principal. El "
"procesamiento físico significa que la velocidad de fotograma está "
@@ -48055,6 +48014,7 @@ msgstr ""
"de la escena (es decir, si no es huérfano)."
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called during the processing step of the main loop. Processing happens at "
"every frame and as fast as possible, so the [code]delta[/code] time since "
@@ -48064,7 +48024,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Llamado durante la etapa de procesamiento del bucle principal. El "
"procesamiento se realiza en cada fotograma y lo más rápido posible, por lo "
@@ -48079,6 +48039,7 @@ msgstr ""
"de la escena (es decir, si no es huérfano)."
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when the node is \"ready\", i.e. when both the node and its children "
"have entered the scene tree. If the node has children, their [method _ready] "
@@ -48090,10 +48051,10 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
"Se llama cuando el nodo está \"listo\", es decir, cuando tanto el nodo como "
"sus hijos han entrado en el árbol de la escena. Si el nodo tiene hijos, sus "
@@ -48115,8 +48076,8 @@ msgstr ""
#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -48126,7 +48087,7 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Llamado cuando un [InputEvent] no ha sido consumido por [method _input] o "
"cualquier GUI. El evento de entrada se propaga a través del árbol de nodos "
@@ -48146,8 +48107,8 @@ msgstr ""
#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -48157,7 +48118,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Llamado cuando un [InputEventKey] no ha sido consumido por [method _input] o "
"cualquier GUI. El evento de entrada se propaga a través del árbol de nodos "
@@ -49243,6 +49204,18 @@ msgstr ""
"devoluciones de procesamiento ejecutadas primero."
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr "Emitido cuando el nodo esté listo."
@@ -49424,11 +49397,8 @@ msgstr ""
"nodo."
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -49646,17 +49616,16 @@ msgstr ""
"@\"../C\" # El nodo hermano C.\n"
"# Una barra inclinada significa que es absoluta del Ãrbol de Escenas.\n"
"@\"/root\" # Equivalente a get_tree().get_root().\n"
-"@\"/root/Main\" # Si el nodo raíz de tu escena principal se llamara \"Main"
-"\".\n"
+"@\"/root/Main\" # Si el nodo raíz de tu escena principal se llamara "
+"\"Main\".\n"
"@\"/root/MyAutoload\" # Si tienes un nodo o escena autocargada.\n"
"[/codeblock]"
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
#, fuzzy
@@ -49706,8 +49675,8 @@ msgstr ""
"\"Path2D/PathFollow2D/Sprite2D:texture\"\n"
"# Apunta al nodo Sprite2D y su propiedad de \"posición\".\n"
"\"Path2D/PathFollow2D/Sprite2D:position\"\n"
-"# Apunta al nodo Sprite2D y al componente \"x\" de su propiedad \"posición"
-"\".\n"
+"# Apunta al nodo Sprite2D y al componente \"x\" de su propiedad "
+"\"posición\".\n"
"\"Path2D/PathFollow2D/Sprite2D:position:x\"\n"
"# Camino absoluto (desde la \"raíz\")\n"
"\"/root/Level/Path2D\"\n"
@@ -49719,11 +49688,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -49755,8 +49724,8 @@ msgstr ""
"([code]:[/code]) como separador, es decir, el lado derecho del primer punto "
"del recorrido de un nodo.\n"
"[codeblock]\n"
-"var ruta_nodo = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path"
-"\")\n"
+"var ruta_nodo = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:"
+"load_path\")\n"
"print(ruta_nodo.get_concatenated_subnames()) #textura:texture:load_path\n"
"[/codeblock]"
@@ -49806,8 +49775,8 @@ msgstr ""
"Obtiene el nombre del recurso o propiedad indicado por [code]idx[/code] (0 a "
"[method get_subname_count]).\n"
"[codeblock]\n"
-"var ruta_nodo = NodePath(\"Path2D/PathFollow2D/Sprite2D:textura:load_path"
-"\")\n"
+"var ruta_nodo = NodePath(\"Path2D/PathFollow2D/Sprite2D:textura:"
+"load_path\")\n"
"print(ruta_nodo.get_subname(0)) # texture\n"
"print(ruta_nodo.get_subname(1)) # load_path\n"
"[/codeblock]"
@@ -49938,8 +49907,8 @@ msgstr "Clase base para todos los tipos no integrados."
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -50006,19 +49975,12 @@ msgstr ""
"clases de datos en lugar de [Object]."
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -50347,8 +50309,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -50515,9 +50477,10 @@ msgid ""
msgstr "Elimina una entrada determinada de los metadatos del objeto."
#: doc/classes/Object.xml
+#, fuzzy
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -50765,6 +50728,52 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual hole point position."
+msgstr "Establece un bit individual en la [member collision_mask]."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual polygon point position."
+msgstr "Establece un bit individual en la [member collision_mask]."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the hole geometry from code."
+msgstr "Dibuja una geometría simple desde código."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the polygon geometry from code."
+msgstr "Dibuja una geometría simple desde código."
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -51410,7 +51419,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
"Ejecute el archivo en la ruta dada con los argumentos pasados como un "
"conjunto de strings. La resolución de la ruta de la plataforma tendrá lugar. "
@@ -51796,8 +51814,8 @@ msgstr "Devuelve la identificación del nodo de entrada de una función."
#: doc/classes/OS.xml
#, fuzzy
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -52130,6 +52148,11 @@ msgstr ""
"desplazados por uno."
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Devuelve [code]true[/code] si el archivo está actualmente abierto."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -52289,6 +52312,16 @@ msgstr ""
"[b]Nota:[/b] Este método está implementado en Linux, macOS y Windows."
#: doc/classes/OS.xml
+#, fuzzy
+msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+"Establece una disposición de teclado activa.\n"
+"[b]Nota:[/b] Este método está implementado en Linux, macOS y Windows."
+
+#: doc/classes/OS.xml
msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
@@ -53548,14 +53581,12 @@ msgstr ""
"padre y contenedor para otros tipos de nodos [Control]."
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -53756,13 +53787,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -53897,6 +53923,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
"Devuelve un rectángulo que contiene las posiciones de todas las partículas "
@@ -54084,8 +54114,8 @@ msgstr ""
"de esta textura en el mismo punto que la [member emission_point_texture]. Se "
"utiliza sólo en [constant EMISSION_SHAPE_DIRECTED_POINTS]. Se puede crear "
"automáticamente a partir de la malla o del nodo seleccionando \"Crear puntos "
-"de emisión a partir de la malla o del nodo\" en la herramienta \"Partículas"
-"\" de la barra de herramientas."
+"de emisión a partir de la malla o del nodo\" en la herramienta "
+"\"Partículas\" de la barra de herramientas."
#: doc/classes/ParticlesMaterial.xml
msgid ""
@@ -54928,11 +54958,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -58365,9 +58392,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
#, fuzzy
@@ -58949,6 +58975,11 @@ msgstr ""
#: doc/classes/PopupMenu.xml
#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Establece el icono del artículo en el índice [code]idx[/code]."
+
+#: doc/classes/PopupMenu.xml
+#, fuzzy
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr "Enviado cuando el nodo pierde el enfoque."
@@ -60643,8 +60674,8 @@ msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
-"\" está activado en el menú de Depuración."
+"Color de las formas de colisión, visible cuando \"Formas de colisión "
+"visibles\" está activado en el menú de Depuración."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -60660,13 +60691,13 @@ msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
-"\" está activado en el menú de Depuración."
+"Color de las formas de colisión, visible cuando \"Formas de colisión "
+"visibles\" está activado en el menú de Depuración."
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
"Color de la geometría de navegación desactivada, visible cuando la "
"\"Navegación visible\" está activada en el menú de depuración."
@@ -60676,8 +60707,8 @@ msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-"Color de la geometría de navegación, visible cuando la \"Navegación visible"
-"\" está activada en el menú de depuración."
+"Color de la geometría de navegación, visible cuando la \"Navegación "
+"visible\" está activada en el menú de depuración."
#: doc/classes/ProjectSettings.xml
msgid "Custom image for the mouse cursor (limited to 256×256)."
@@ -60767,8 +60798,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -60888,9 +60919,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
"Extensiones de archivo basadas en texto para incluir en la función \"Buscar "
@@ -62548,12 +62579,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -62661,6 +62694,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -62769,10 +62813,12 @@ msgstr ""
"sobregiro, cuando se utilizan materiales complejos e iluminación."
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
"El tamaño de la sombra direccional en píxeles. Valores más altos resultarán "
"en sombras más nítidas, a costa del rendimiento. El valor se redondeará a la "
@@ -63310,6 +63356,12 @@ msgstr ""
"Tamaño de la celda usada para la cuadrícula de hash 2D que usa "
"[VisibilityNotifier2D]."
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr "Nodo de detección de proximidad de propósito general."
@@ -63333,9 +63385,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
#, fuzzy
@@ -63372,14 +63423,6 @@ msgstr ""
"particular) son más eficientes y robustas contra los errores de reales."
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr "Construye un cuaternario a partir de la [Basis] dada."
@@ -63604,8 +63647,8 @@ msgstr ""
#: doc/classes/RandomNumberGenerator.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr "Coloca la semilla para el generador de números aleatorios."
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -64183,7 +64226,8 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr "Devuelve el área de la [Rect2]."
#: doc/classes/Rect2.xml
@@ -64220,8 +64264,12 @@ msgstr ""
"la dirección del [enum Margin]."
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
-msgstr "Devuelve [code]true[/code] si la [Rect2] está plana o vacía."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
+msgstr ""
#: doc/classes/Rect2.xml
msgid ""
@@ -64428,12 +64476,6 @@ msgstr ""
#: doc/classes/ReflectionProbe.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
-#, fuzzy
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -64525,7 +64567,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
"Establece la máxima distancia de la sonda a la que puede estar un objeto "
"antes de ser seleccionado. Equivalente a [member ReflectionProbe."
@@ -65004,9 +65050,8 @@ msgstr ""
"o agruparse en otro objeto, como un [Node] u otro recurso."
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -65328,6 +65373,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
#, fuzzy
msgid "The default import order."
msgstr "El color de texto por defecto."
@@ -65740,9 +65789,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
#, fuzzy
@@ -66001,17 +66053,19 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
"El texto de la etiqueta en formato BBCode. No es representativo de las "
"modificaciones manuales de la pila de etiquetas internas. Borra los cambios "
"realizados por otros métodos cuando se edita.\n"
"[b]Nota:[/b] No se aconseja utilizar el operador [code]+=[/code] con "
-"[code]bbcode_text[/code] (por ejemplo, [code]bbcode_text += \"alguna string"
-"\"[/code]) ya que reemplaza todo el texto y puede causar ralentizaciones. "
-"Utilice [method append_bbcode] para añadir el texto en su lugar."
+"[code]bbcode_text[/code] (por ejemplo, [code]bbcode_text += \"alguna "
+"string\"[/code]) ya que reemplaza todo el texto y puede causar "
+"ralentizaciones. Utilice [method append_bbcode] para añadir el texto en su "
+"lugar."
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -66126,11 +66180,11 @@ msgid ""
"insert the data into the tag stack."
msgstr ""
"Se activa cuando el usuario hace clic en el contenido entre las meta "
-"etiquetas. Si el meta se define en texto, por ejemplo, [code][url={\"data\"="
-"\"hi\"}]hi[/url][/code], entonces el parámetro para esta señal será del tipo "
-"[String]. Si se desea un tipo o un objeto determinado, se debe utilizar el "
-"método [method push_meta] para insertar manualmente los datos en la pila de "
-"etiquetas."
+"etiquetas. Si el meta se define en texto, por ejemplo, [code]"
+"[url={\"data\"=\"hi\"}]hi[/url][/code], entonces el parámetro para esta "
+"señal será del tipo [String]. Si se desea un tipo o un objeto determinado, "
+"se debe utilizar el método [method push_meta] para insertar manualmente los "
+"datos en la pila de etiquetas."
#: doc/classes/RichTextLabel.xml
msgid "Triggers when the mouse exits a meta tag."
@@ -66803,14 +66857,12 @@ msgstr ""
"fuerzas personalizada. Ver [member custom_integrator]."
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -67154,8 +67206,8 @@ msgid ""
"Continuous collision detection enabled using shapecasting. This is the "
"slowest CCD method and the most precise."
msgstr ""
-"Detección de colisión continua habilitada mediante el uso de \"shapecasting"
-"\". Este es el método CCD más lento y más preciso."
+"Detección de colisión continua habilitada mediante el uso de "
+"\"shapecasting\". Este es el método CCD más lento y más preciso."
#: doc/classes/Room.xml
msgid "Room node, used to group objects together locally for [Portal] culling."
@@ -67509,11 +67561,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -67797,18 +67846,6 @@ msgstr ""
"escenas, y por lo tanto se encarga del bucle del juego."
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/es/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -68404,10 +68441,6 @@ msgstr ""
"clase de ese objeto coincide con una de las clases base del script."
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr "Devuelve [code]true[/code] si el script puede ser instanciado."
@@ -68796,16 +68829,6 @@ msgstr ""
"información de las partículas. Para una explicación detallada y el uso, por "
"favor vea los tutoriales enlazados a continuación."
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -69251,12 +69274,6 @@ msgstr ""
"hijos y actúa como un único punto de acceso a sus huesos."
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -69603,16 +69620,11 @@ msgstr "Un cuerpo físico de malla suave."
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-"Un cuerpo físico deformable. Se usa para crear objetos elásticos o "
-"deformables como tela, goma u otros materiales flexibles."
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
#, fuzzy
@@ -69733,17 +69745,12 @@ msgstr ""
"@GDScript.deg2rad]."
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
#, fuzzy
@@ -69831,20 +69838,18 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
-"Se rota a sí mismo para que el eje -Z local apunte hacia la posición del "
-"[code]target[/code].\n"
-"La transformación girará primero alrededor del vector [code]up[/code] dado, "
-"y luego se alineará completamente con el objetivo mediante una nueva "
-"rotación alrededor de un eje perpendicular tanto al vector [code]target[/"
-"code] como al [code]up[/code].\n"
-"Las operaciones tienen lugar en el espacio global."
#: doc/classes/Spatial.xml
msgid ""
@@ -70032,8 +70037,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
"Parte de la rotación de la transformación local en radianes, especificada en "
"términos de ángulos YXZ-Euler en el formato (ángulo X, ángulo Y, ángulo Z).\n"
@@ -70159,12 +70164,6 @@ msgstr ""
"codigo shader. Consulte el siguiente tutorial para obtener más detalles."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
"Devuelve [code]true[/code], si el [enum Feature] especificado está activado."
@@ -70468,8 +70467,8 @@ msgid ""
msgstr ""
"Textura que especifica la normalidad por píxel de la superposición de "
"detalles.\n"
-"[b]Nota:[/b] Godot espera que el mapa de normales utilice las coordenadas X"
-"+, Y-, y Z+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa de normales utilice las coordenadas "
+"X+, Y-, y Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -70625,8 +70624,8 @@ msgid ""
"areas are transparent. Useful for overlaying shadows onto a camera feed in "
"AR."
msgstr ""
-"Si [code]true[/code], habilita el modo de representación \"sombra a opacidad"
-"\" en el que la iluminación modifica el alfa de modo que las áreas "
+"Si [code]true[/code], habilita el modo de representación \"sombra a "
+"opacidad\" en el que la iluminación modifica el alfa de modo que las áreas "
"sombreadas son opacas y las áreas no sombreadas son transparentes. Es útil "
"para superponer sombras en una cámara de alimentación en AR."
@@ -70735,8 +70734,8 @@ msgstr ""
"[code]normal_texture[/code] sólo utiliza los canales rojo y verde. El normal "
"leído de [code]normal_texture[/code] se orienta alrededor del normal de la "
"superficie proporcionado por la [Mesh].\n"
-"[b]Nota:[/b] Godot espera que el mapa de normales utilice las coordenadas X"
-"+, Y-, y Z+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa de normales utilice las coordenadas "
+"X+, Y-, y Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -71884,9 +71883,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -72023,8 +72022,8 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"El mapa normal da profundidad al Sprite2D.\n"
-"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y Z"
-"+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y "
+"Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -72125,20 +72124,30 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
-"Un valor de color que se multiplica, podría ser usado para colorear el "
-"estado de ánimo o para simular el color de la luz."
#: doc/classes/SpriteBase3D.xml
-#, fuzzy
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
-"La visibilidad de los objetos en una escala desde [code]0[/code] totalmente "
-"invisible hasta [code]1[/code] totalmente visible."
#: doc/classes/SpriteBase3D.xml
msgid "The size of one pixel's width on the sprite to scale it in 3D."
@@ -72609,6 +72618,54 @@ msgstr ""
"Si [code]true[/code], este [StreamPeer] usará el formato big-endian para "
"codificar y decodificar."
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Data buffer stream peer."
+msgstr "SSL stream peer."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Devuelve la posición de scrolling actual."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Devuelve el seno del parámetro."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr "SSL stream peer."
@@ -72799,13 +72856,6 @@ msgstr ""
"sobre escritura, por lo que pasarlas es barato en recursos."
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr "Construye una nueva String a partir del [bool] dado."
@@ -73132,8 +73182,13 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
-msgstr "Hashea la string y devuelve un entero de 32 bits."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
+msgstr ""
#: doc/classes/String.xml
msgid ""
@@ -73209,10 +73264,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -73467,8 +73522,8 @@ msgid ""
"\"this/is/path\"[/code]."
msgstr ""
"Si la string es un camino, esto concatena [code]file[/code] al final del "
-"string como un sub camino. Por ejemplo, [code]\"this/is\".plus_file(\"path"
-"\") == \"this/is/path\"[/code]."
+"string como un sub camino. Por ejemplo, [code]\"this/is\"."
+"plus_file(\"path\") == \"this/is/path\"[/code]."
#: doc/classes/String.xml
msgid ""
@@ -73683,15 +73738,28 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
-"Convierte una cadena que contiene un número decimal en un [code]float[/code]."
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
-"Convierte una string que contiene un número entero en un [code]int[/code]."
#: doc/classes/String.xml
msgid "Returns the string converted to lowercase."
@@ -74435,8 +74503,8 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"El mapa normal para usar al dibujar este cuadro de estilo.\n"
-"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y Z"
-"+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y "
+"Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -76784,10 +76852,6 @@ msgstr ""
"archivo [code].theme[/code], vea la documentación para más información."
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr "Borra todos los valores del tema."
@@ -76911,7 +76975,8 @@ msgstr ""
#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
"Devuelve la [Font] en [code]name[/code] si el tema tiene [code]type[/code]."
@@ -77302,11 +77367,12 @@ msgstr ""
"o [Semaphore] si se trabaja con objetos compartidos."
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
#, fuzzy
@@ -77391,15 +77457,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -78150,8 +78213,13 @@ msgid "Sets the tile's material."
msgstr "Establece el material del tile."
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
-msgstr "Establece el color de modulación del tile."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
+msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the tile's name."
@@ -78174,8 +78242,8 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"Establece la textura normal del mapa del tile.\n"
-"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y Z"
-"+. Ver [url=http://wiki.polycount.com/wiki/"
+"[b]Nota:[/b] Godot espera que el mapa normal use las coordenadas X+, Y-, y "
+"Z+. Ver [url=http://wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]esta página[/url] "
"para una comparación de las coordenadas del mapa normal esperadas por los "
"motores populares."
@@ -79177,17 +79245,6 @@ msgstr ""
"Las traducciones son recursos que pueden ser cargados y descargados a "
"pedido. Mapean una string a otra string."
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -79253,8 +79310,8 @@ msgid ""
"Returns a locale's language and its variant (e.g. [code]\"en_US\"[/code] "
"would return [code]\"English (United States)\"[/code])."
msgstr ""
-"Devuelve el locale de un lenguaje y su variante (por ejemplo, [code]\"en_US"
-"\"[/code] devolvería [code]\"English (United States)\"[/code])."
+"Devuelve el locale de un lenguaje y su variante (por ejemplo, "
+"[code]\"en_US\"[/code] devolvería [code]\"English (United States)\"[/code])."
#: doc/classes/TranslationServer.xml
msgid "Removes the given translation from the server."
@@ -79328,8 +79385,10 @@ msgid "Clears the tree. This removes all items."
msgstr "Despeja el árbol. Esto elimina todos los elementos."
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -79365,6 +79424,14 @@ msgstr ""
"sólo es visible en el modo [constant SELECT_MULTI]."
#: doc/classes/Tree.xml
+#, fuzzy
+msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+"Devuelve el índice de la columna en la [code]position[/code], o -1 si no hay "
+"ningún elemento."
+
+#: doc/classes/Tree.xml
msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -79426,10 +79493,11 @@ msgid "Returns the column for the currently edited item."
msgstr "Devuelve el número de elementos actualmente en la lista."
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
"Devuelve el área del rectángulo para el artículo especificado. Si se "
"especifica [code]column[/code], sólo se obtiene la posición y el tamaño de "
@@ -79445,9 +79513,10 @@ msgstr ""
"la posición de origen del árbol)."
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -79511,7 +79580,7 @@ msgstr ""
#: doc/classes/Tree.xml
#, fuzzy
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "Devuelve la [Transform] de la instancia especificada."
#: doc/classes/Tree.xml
@@ -79994,11 +80063,10 @@ msgstr ""
#, fuzzy
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
"Añade un botón con [Texture2D] [code]button[/code] en la columna "
"[code]column[/code]. El índice [code]button_idx[/code] se utiliza para "
@@ -80047,6 +80115,15 @@ msgstr ""
"columna [code]column[/code]."
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Devuelve la string de sugerencia para el botón en el índice "
+"[code]button_idx[/code] en la columna [code]column[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
@@ -80056,6 +80133,15 @@ msgstr ""
"especificó ningún índice."
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"Devuelve la string de sugerencia para el botón en el índice "
+"[code]button_idx[/code] en la columna [code]column[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -81919,12 +82005,6 @@ msgstr ""
"Las modificaciones de un contenedor modificarán todas las referencias a él. "
"Debe crearse un [Mutex] para bloquearlo si se desea un acceso multihilo."
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr "Contenedor de caja vertical."
@@ -81959,8 +82039,7 @@ msgstr ""
"siempre evaluará a [code]true[/code]."
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -82891,6 +82970,16 @@ msgstr ""
"todas las ruedas, tu vehículo será propenso a volcarse, mientras que un "
"valor de 0.0 resistirá el balanceo de la carrocería."
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "Contenedor de caja vertical."
+
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical version of [FlowContainer]."
+msgstr "Versión vertical del [Separator]."
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr "Control para la reproducción de streams de vídeo."
@@ -83164,28 +83253,24 @@ msgstr ""
"textura asociada para dibujar."
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
#, fuzzy
@@ -83217,7 +83302,10 @@ msgid "Returns the topmost modal in the stack."
msgstr "Devuelve la posición en el [AudioStream]."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+#, fuzzy
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr "Devuelve la posición del ratón en relación con la viewport."
#: doc/classes/Viewport.xml
@@ -83333,8 +83421,10 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr "Fuerza la actualización de los mundos 2D y 3D."
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
-msgstr "Desplaza el ratón a una posición relativa al viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
+msgstr ""
#: doc/classes/Viewport.xml
#, fuzzy
@@ -84271,13 +84361,6 @@ msgstr ""
"o cuando escribas plugins para el."
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
"Añade una señal personalizada con el nombre especificado al VisualScript."
@@ -86478,13 +86561,6 @@ msgstr ""
"eventualmente se une al lienzo."
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/es/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
"Establece las imágenes que deben ser renderizadas en el margen de la ventana."
@@ -87033,8 +87109,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
"Color mostrado para áreas claras de la escena (si se utilizan los modos de "
"fondo Color personalizado o Color+Sky)."
@@ -87402,10 +87478,11 @@ msgstr "Establece la [Transform] del dueño de la forma dada."
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
-"Devuelve [code]true[/code] si se han hecho cambios en los datos del "
-"VisualServer. Normalmente se llama [method force_draw] si esto ocurre."
#: doc/classes/VisualServer.xml
msgid "Not yet implemented. Always returns [code]false[/code]."
@@ -90391,6 +90468,22 @@ msgstr ""
"Realiza un desenfoque de 3x3 en la salida de SSAO. Usa esto para un SSAO más "
"suave."
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr "Un programa shader personalizado con un editor visual."
@@ -90502,12 +90595,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -91149,13 +91236,6 @@ msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -91652,19 +91732,12 @@ msgstr ""
"enlace)."
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/es/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
-"Una de las varias constantes de entrada en minúsculas como: \"vértice"
-"\"([code]VERTEX[/code]) o \"tamaño_punto\"([code]POINT_SIZE[/code])."
+"Una de las varias constantes de entrada en minúsculas como: "
+"\"vértice\"([code]VERTEX[/code]) o \"tamaño_punto\"([code]POINT_SIZE[/code])."
#: doc/classes/VisualShaderNodeIs.xml
msgid ""
@@ -91727,8 +91800,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
"Este nodo shader visual está presente en todos los gráficos shader en forma "
"de bloque de \"Salida\" con múltiples puertos de valor de salida."
@@ -93954,11 +94027,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -93982,6 +94055,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -94087,15 +94168,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -94160,6 +94241,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "Emitido cuando [member frame] cambió."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
#, fuzzy
msgid "Base class for window dialogs."
diff --git a/doc/translations/fa.po b/doc/translations/fa.po
index 4e18b8c1e3..a6260337ca 100644
--- a/doc/translations/fa.po
+++ b/doc/translations/fa.po
@@ -3819,8 +3819,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4179,22 +4179,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4534,11 +4533,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4547,9 +4544,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4628,6 +4624,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4762,10 +4762,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5194,25 +5190,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5396,6 +5373,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5405,9 +5391,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5428,9 +5413,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -6076,6 +6060,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6359,6 +6347,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6825,9 +6817,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -7062,23 +7053,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7464,9 +7451,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7663,13 +7653,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7969,12 +7952,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9096,9 +9073,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9392,10 +9368,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9787,11 +9761,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9884,7 +9855,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9929,15 +9902,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9952,7 +9918,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9960,7 +9927,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10121,7 +10093,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10162,18 +10139,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -10211,12 +10184,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10421,8 +10394,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10466,6 +10444,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10677,11 +10664,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10788,12 +10775,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10852,7 +10833,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10919,9 +10900,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11224,23 +11205,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -11251,15 +11226,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11446,6 +11419,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11480,6 +11461,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11740,17 +11725,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11792,9 +11775,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11827,6 +11809,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12226,15 +12215,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12661,14 +12648,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12863,7 +12848,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12876,7 +12863,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13170,7 +13159,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -13220,6 +13209,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13300,20 +13301,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13872,6 +13859,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13956,9 +13944,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13967,9 +13955,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13979,10 +13967,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14075,9 +14064,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14086,22 +14075,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14221,15 +14202,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14268,9 +14245,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14315,19 +14291,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15785,20 +15758,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15898,8 +15867,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17876,12 +17845,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18046,8 +18009,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18136,7 +18099,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18168,7 +18146,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18178,7 +18161,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18220,7 +18208,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18244,7 +18238,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18325,7 +18324,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18400,7 +18405,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18414,7 +18424,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18515,7 +18530,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18546,7 +18567,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18590,13 +18617,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18762,6 +18782,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19472,11 +19500,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19531,8 +19556,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19541,7 +19566,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19569,13 +19598,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19698,12 +19720,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20731,13 +20747,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20769,8 +20778,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20803,8 +20812,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20914,11 +20923,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21181,12 +21187,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22057,13 +22057,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22478,13 +22471,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22805,9 +22791,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23126,31 +23111,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -23210,12 +23199,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23893,6 +23884,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24494,11 +24489,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24525,6 +24520,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24665,20 +24676,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24748,13 +24745,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25797,7 +25787,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26793,11 +26783,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26824,10 +26816,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26874,6 +26864,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27095,6 +27091,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27426,21 +27430,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28231,13 +28220,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28382,11 +28364,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29103,6 +29082,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29294,7 +29277,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29523,8 +29506,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29552,8 +29535,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29710,7 +29693,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29845,15 +29833,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29896,8 +29878,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29928,8 +29910,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29973,11 +29955,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30144,17 +30123,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30238,17 +30215,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30259,13 +30240,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30302,9 +30276,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30431,13 +30409,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31191,15 +31162,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31247,6 +31209,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31307,11 +31292,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31326,9 +31308,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31405,7 +31386,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31415,18 +31400,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31578,11 +31579,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31831,11 +31829,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32264,6 +32259,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32460,13 +32459,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34313,10 +34305,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34547,22 +34535,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34706,13 +34678,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34960,13 +34925,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35038,9 +34996,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -35077,6 +35034,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35105,9 +35066,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35418,7 +35378,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35970,6 +35930,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35990,6 +35954,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -36029,18 +35997,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36279,9 +36235,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36571,16 +36530,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36626,7 +36581,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36641,7 +36596,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36654,7 +36609,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36669,17 +36624,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36689,14 +36644,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36706,7 +36661,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37415,6 +37370,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37567,11 +37534,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37738,9 +37702,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37776,11 +37739,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37917,8 +37880,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37952,19 +37915,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38167,8 +38123,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38292,7 +38248,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38481,6 +38437,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39007,7 +39005,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39268,8 +39275,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39518,6 +39525,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39628,6 +39639,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40583,14 +40601,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40741,13 +40757,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40867,6 +40878,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41610,11 +41625,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44190,9 +44202,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44602,6 +44613,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45898,8 +45913,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45985,8 +46000,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46074,9 +46089,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47457,12 +47472,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47557,6 +47574,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47656,7 +47684,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48075,6 +48104,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48093,9 +48128,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -48122,14 +48156,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48298,9 +48324,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48736,7 +48761,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48764,7 +48789,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48919,12 +48948,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48993,7 +49016,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49311,9 +49338,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49533,6 +49559,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49849,9 +49879,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -50046,9 +50079,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50633,14 +50667,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51238,11 +51270,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51449,18 +51478,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51916,10 +51933,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52229,16 +52242,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52566,12 +52569,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52881,16 +52878,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52972,17 +52966,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53045,11 +53034,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53190,8 +53184,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53285,12 +53279,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54637,9 +54625,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54815,14 +54803,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55196,6 +55199,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55349,13 +55397,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55620,7 +55661,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55669,10 +55715,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56037,12 +56083,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58440,10 +58501,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58531,7 +58588,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58809,11 +58867,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58888,15 +58947,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59485,7 +59541,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60316,17 +60377,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60442,7 +60492,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60468,6 +60519,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60515,9 +60571,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60528,8 +60584,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60569,7 +60625,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60938,11 +60994,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60977,12 +61032,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -62330,12 +62397,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62362,8 +62423,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63019,6 +63079,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63229,28 +63297,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63277,7 +63341,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63368,7 +63434,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64091,13 +64159,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65852,13 +65913,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66293,8 +66347,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66567,7 +66621,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68875,6 +68932,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68974,12 +69047,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69436,13 +69503,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69780,16 +69840,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69838,8 +69891,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71545,11 +71598,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71573,6 +71626,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71678,15 +71739,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71750,6 +71811,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/fi.po b/doc/translations/fi.po
index 717b65f172..780df6468f 100644
--- a/doc/translations/fi.po
+++ b/doc/translations/fi.po
@@ -3406,8 +3406,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3766,22 +3766,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4121,11 +4120,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4134,7 +4131,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4214,6 +4211,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4349,10 +4350,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4781,25 +4778,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4983,6 +4961,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4992,7 +4979,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5014,7 +5001,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5661,6 +5648,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5944,6 +5935,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6416,7 +6411,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6652,20 +6647,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7052,9 +7045,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7251,13 +7247,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7557,12 +7546,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8684,7 +8667,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8980,10 +8963,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9375,11 +9356,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9472,7 +9450,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9517,12 +9497,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9538,7 +9513,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9546,7 +9522,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9707,7 +9688,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9748,16 +9734,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9796,12 +9779,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10006,8 +9989,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10051,6 +10039,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10262,11 +10259,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10373,12 +10370,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10437,7 +10428,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10504,9 +10495,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10810,21 +10801,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10836,12 +10822,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -11029,6 +11015,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11063,6 +11057,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11323,14 +11322,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11373,7 +11372,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11407,6 +11406,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11807,12 +11813,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12245,14 +12251,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12447,7 +12451,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12460,7 +12466,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12754,7 +12762,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12804,6 +12812,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12884,20 +12904,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13456,6 +13462,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13541,9 +13548,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13552,9 +13559,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13564,10 +13571,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13660,9 +13668,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13671,22 +13679,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13806,15 +13806,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13853,7 +13849,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13899,15 +13895,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15366,20 +15362,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15479,8 +15471,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17463,12 +17455,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17633,8 +17619,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17723,7 +17709,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17755,7 +17756,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17765,7 +17771,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17807,7 +17818,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17831,7 +17848,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17912,7 +17934,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17987,7 +18015,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18001,7 +18034,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18102,7 +18140,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18133,7 +18177,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18177,13 +18227,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18349,6 +18392,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19062,11 +19113,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19121,8 +19169,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19131,7 +19179,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19160,13 +19212,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19289,12 +19334,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20322,13 +20361,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20360,8 +20392,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20394,8 +20426,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20505,11 +20537,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20772,12 +20801,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21648,13 +21671,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22069,13 +22085,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22397,9 +22406,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22718,29 +22726,34 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22801,12 +22814,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23485,6 +23500,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24086,11 +24105,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24117,6 +24136,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Palauttaa parametrin sinin."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24257,20 +24293,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24340,13 +24362,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25389,7 +25404,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26393,11 +26408,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26424,10 +26441,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26473,6 +26488,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26695,6 +26717,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27026,21 +27056,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27831,13 +27846,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27982,11 +27990,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28704,6 +28709,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28896,7 +28905,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29125,8 +29134,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29154,8 +29163,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29312,7 +29321,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29447,15 +29461,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29498,8 +29506,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29530,8 +29538,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29575,11 +29583,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29746,17 +29751,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29840,17 +29843,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29861,13 +29868,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29904,9 +29904,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30033,13 +30037,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30794,15 +30791,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30850,6 +30838,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30910,11 +30921,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30929,7 +30937,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -31007,7 +31015,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31017,18 +31029,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31180,11 +31208,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31433,11 +31458,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31867,6 +31889,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32064,13 +32090,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33917,10 +33936,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34152,22 +34167,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34311,13 +34310,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34559,13 +34551,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34637,7 +34622,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34675,6 +34660,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34703,7 +34692,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -35028,7 +35017,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35584,6 +35573,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Palauttaa parametrin arkussinin."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Palauttaa parametrin käänteisen neliöjuuren."
@@ -35605,6 +35599,10 @@ msgid "Returns the map's up direction."
msgstr "Palauttaa parametrin arkussinin."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Palauttaa parametrin sinin."
@@ -35645,18 +35643,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35895,7 +35881,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -36186,16 +36176,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36241,7 +36227,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36256,7 +36242,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36269,7 +36255,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36284,17 +36270,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36304,14 +36290,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36321,7 +36307,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37030,6 +37016,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37182,11 +37180,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37353,7 +37348,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37390,11 +37385,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37531,8 +37526,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37566,19 +37561,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37781,8 +37769,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37906,7 +37894,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38095,6 +38083,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38621,7 +38651,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38885,8 +38924,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39137,6 +39176,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Palauttaa parametrin kosinin."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39247,6 +39291,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40190,11 +40241,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40346,13 +40397,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40472,6 +40518,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41217,11 +41267,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43801,7 +43848,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -44212,6 +44259,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45509,8 +45561,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45596,8 +45648,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45685,9 +45737,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47068,12 +47120,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47168,6 +47222,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47267,7 +47332,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47686,6 +47752,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47704,7 +47776,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47732,13 +47804,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47903,9 +47968,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48341,8 +48405,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Palauttaa parametrin käänteisen neliöjuuren."
#: doc/classes/Rect2.xml
msgid ""
@@ -48369,7 +48434,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48524,11 +48593,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48597,7 +48661,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48915,9 +48983,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49137,6 +49204,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49453,7 +49524,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49649,9 +49724,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50236,11 +50312,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50839,11 +50915,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51050,18 +51123,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51517,10 +51578,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51830,16 +51887,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52168,11 +52215,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52482,16 +52524,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52573,17 +52612,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52646,11 +52680,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52791,8 +52830,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52886,12 +52925,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54239,9 +54272,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54417,14 +54450,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54798,6 +54846,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Palauttaa parametrin tangentin."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Palauttaa parametrin sinin."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54951,13 +55046,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55222,7 +55310,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55271,10 +55364,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55639,12 +55732,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58049,10 +58157,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58141,7 +58245,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58419,11 +58524,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
#: doc/classes/Thread.xml
msgid ""
@@ -58498,13 +58604,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -59094,7 +59198,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59925,15 +60034,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60050,7 +60150,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60076,6 +60177,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60124,9 +60230,9 @@ msgstr "Palauttaa parametrin kosinin."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60137,8 +60243,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60178,8 +60284,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Palauttaa parametrin käänteisen neliöjuuren."
#: doc/classes/Tree.xml
msgid ""
@@ -60547,11 +60654,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60585,12 +60691,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -61939,11 +62059,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61970,8 +62085,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62632,6 +62746,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62843,23 +62965,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62888,7 +63010,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Palauttaa parametrin vasta-arvon."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62980,7 +63104,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63703,13 +63829,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65468,13 +65587,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65910,8 +66022,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66185,7 +66297,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68505,6 +68620,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68604,12 +68735,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69066,13 +69191,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69412,14 +69530,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69468,8 +69581,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71178,11 +71291,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71206,6 +71319,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71311,15 +71432,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71383,6 +71504,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/fil.po b/doc/translations/fil.po
index 71953d6a2e..27b84c2f14 100644
--- a/doc/translations/fil.po
+++ b/doc/translations/fil.po
@@ -3387,8 +3387,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3747,22 +3747,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4102,11 +4101,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4115,9 +4112,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4196,6 +4192,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4330,10 +4330,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4762,25 +4758,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4964,6 +4941,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4973,9 +4959,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -4996,9 +4981,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5644,6 +5628,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5927,6 +5915,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6393,9 +6385,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6630,23 +6621,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7032,9 +7019,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7231,13 +7221,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7537,12 +7520,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8664,9 +8641,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8960,10 +8936,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9355,11 +9329,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9452,7 +9423,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9497,15 +9470,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9520,7 +9486,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9528,7 +9495,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9689,7 +9661,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9730,18 +9707,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9779,12 +9752,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9989,8 +9962,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10034,6 +10012,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10245,11 +10232,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10356,12 +10343,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10420,7 +10401,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10487,9 +10468,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10792,23 +10773,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10819,15 +10794,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11014,6 +10987,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11048,6 +11029,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11308,17 +11293,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11360,9 +11343,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11395,6 +11377,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11794,15 +11783,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12229,14 +12216,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12431,7 +12416,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12444,7 +12431,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12738,7 +12727,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12788,6 +12777,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12868,20 +12869,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13440,6 +13427,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13524,9 +13512,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13535,9 +13523,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13547,10 +13535,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13643,9 +13632,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13654,22 +13643,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13789,15 +13770,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13836,9 +13813,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13883,19 +13859,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15353,20 +15326,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15466,8 +15435,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17444,12 +17413,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17614,8 +17577,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17704,7 +17667,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17736,7 +17714,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17746,7 +17729,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17788,7 +17776,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17812,7 +17806,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17893,7 +17892,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17968,7 +17973,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17982,7 +17992,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18083,7 +18098,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18114,7 +18135,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18158,13 +18185,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18330,6 +18350,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19040,11 +19068,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19099,8 +19124,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19109,7 +19134,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19137,13 +19166,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19266,12 +19288,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20299,13 +20315,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20337,8 +20346,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20371,8 +20380,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20482,11 +20491,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20749,12 +20755,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21625,13 +21625,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22046,13 +22039,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22373,9 +22359,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22694,31 +22679,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22778,12 +22767,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23461,6 +23452,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24062,11 +24057,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24093,6 +24088,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24233,20 +24244,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24316,13 +24313,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25365,7 +25355,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26361,11 +26351,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26392,10 +26384,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26442,6 +26432,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26663,6 +26659,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26994,21 +26998,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27799,13 +27788,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27950,11 +27932,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28671,6 +28650,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28862,7 +28845,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29091,8 +29074,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29120,8 +29103,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29278,7 +29261,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29413,15 +29401,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29464,8 +29446,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29496,8 +29478,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29541,11 +29523,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29712,17 +29691,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29806,17 +29783,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29827,13 +29808,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29870,9 +29844,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29999,13 +29977,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30759,15 +30730,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30815,6 +30777,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30875,11 +30860,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30894,9 +30876,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -30973,7 +30954,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30983,18 +30968,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31146,11 +31147,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31399,11 +31397,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31832,6 +31827,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32028,13 +32027,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33881,10 +33873,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34115,22 +34103,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34274,13 +34246,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34522,13 +34487,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34600,9 +34558,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34639,6 +34596,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34667,9 +34628,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -34980,7 +34940,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35532,6 +35492,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35552,6 +35516,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35591,18 +35559,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35841,9 +35797,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36133,16 +36092,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36188,7 +36143,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36203,7 +36158,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36216,7 +36171,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36231,17 +36186,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36251,14 +36206,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36268,7 +36223,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36977,6 +36932,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37129,11 +37096,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37300,9 +37264,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37338,11 +37301,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37479,8 +37442,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37514,19 +37477,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37729,8 +37685,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37854,7 +37810,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38043,6 +37999,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38569,7 +38567,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38830,8 +38837,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39080,6 +39087,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39190,6 +39201,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40133,14 +40151,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40291,13 +40307,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40417,6 +40428,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41160,11 +41175,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43740,9 +43752,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44152,6 +44163,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45448,8 +45463,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45535,8 +45550,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45624,9 +45639,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47007,12 +47022,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47107,6 +47124,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47206,7 +47234,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47625,6 +47654,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47643,9 +47678,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47672,14 +47706,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47844,9 +47870,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48282,7 +48307,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48310,7 +48335,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48465,12 +48494,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48539,7 +48562,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48857,9 +48884,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49079,6 +49105,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49395,9 +49425,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49592,9 +49625,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50179,14 +50213,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50784,11 +50816,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -50995,18 +51024,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51462,10 +51479,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51775,16 +51788,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52112,12 +52115,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52427,16 +52424,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52518,17 +52512,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52591,11 +52580,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52736,8 +52730,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52831,12 +52825,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54183,9 +54171,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54361,14 +54349,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54742,6 +54745,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54895,13 +54943,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55166,7 +55207,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55215,10 +55261,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55583,12 +55629,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57986,10 +58047,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58077,7 +58134,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58355,11 +58413,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58434,15 +58493,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59031,7 +59087,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59862,17 +59923,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59988,7 +60038,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60014,6 +60065,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60061,9 +60117,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60074,8 +60130,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60115,7 +60171,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60484,11 +60540,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60523,12 +60578,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61876,12 +61943,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61908,8 +61969,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62565,6 +62625,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62775,28 +62843,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62823,7 +62887,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62914,7 +62980,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63637,13 +63705,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65398,13 +65459,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65839,8 +65893,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66113,7 +66167,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68421,6 +68478,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68520,12 +68593,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68982,13 +69049,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69326,16 +69386,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69384,8 +69437,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71091,11 +71144,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71119,6 +71172,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71224,15 +71285,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71296,6 +71357,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/fr.po b/doc/translations/fr.po
index c651d2489c..aa9d4a2ee3 100644
--- a/doc/translations/fr.po
+++ b/doc/translations/fr.po
@@ -22,7 +22,7 @@
# Puckid <yannroth@msn.com>, 2020.
# Boris Petrov <boris.v.petrov@protonmail.com>, 2020.
# Joseph Boudou <joseph.boudou@matabio.net>, 2020.
-# Helix Sir <vincentbarkmann@gmail.com>, 2020, 2021.
+# Helix Sir <vincentbarkmann@gmail.com>, 2020, 2021, 2022.
# Yvanvan 37 <yvanvan.37@gmail.com>, 2020.
# Synkied <synkx@hotmail.fr>, 2020, 2021.
# Théo Tavernier <tavernier.2002@gmail.com>, 2020.
@@ -39,26 +39,28 @@
# Perrier Mathis <mathis.perrier73@gmail.com>, 2021.
# Blackiris <divjvc@free.fr>, 2021.
# AndyNekena <andy.nekena@gmail.com>, 2021.
-# Legorel <Legorel412@gmail.com>, 2021.
+# Legorel <Legorel412@gmail.com>, 2021, 2022.
# Romain Hebert <romain.hebert0442@gmail.com>, 2021.
# Tim Krief <tim@timkrief.com>, 2021.
# Rémi Verschelde <akien@godotengine.org>, 2021.
# blfr <contact.blfr@gmail.com>, 2021.
# Urbain <urbain.lantres@tutanota.com>, 2021.
# syns <jpo.drt@gmail.com>, 2021.
-# Gallonigher <meduse1500@ovh.fr>, 2021.
+# Gallonigher <meduse1500@ovh.fr>, 2021, 2022.
# Timothée MB <timothee.me@gmail.com>, 2021.
# Florent <fnuttens@dabao.fr>, 2021.
# Benjamin Peter <benji.peter@hotmail.fr>, 2021.
-# Maxime Leroy <lisacintosh@gmail.com>, 2021.
-# ASTRALE <jules.cercy@etu.univ-lyon1.fr>, 2021.
+# Maxime Leroy <lisacintosh@gmail.com>, 2021, 2022.
+# ASTRALE <jules.cercy@etu.univ-lyon1.fr>, 2021, 2022.
+# Pierre-Alexandre Arènes <palex95870@gmail.com>, 2022.
+# KikooDX <kikoodx@paranoici.org>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-27 15:29+0000\n"
-"Last-Translator: ASTRALE <jules.cercy@etu.univ-lyon1.fr>\n"
+"PO-Revision-Date: 2022-02-13 20:11+0000\n"
+"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fr/>\n"
"Language: fr\n"
@@ -66,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -109,25 +111,24 @@ msgid "Method Descriptions"
msgstr "Descriptions des méthodes"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "Description des propriétés"
+msgstr "Description des propriétés de thème"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "Hérite de :"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "Hérité par :"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(remplace %s)"
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "Défaut"
#: doc/tools/make_rst.py
msgid "Setter"
@@ -135,7 +136,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "valeur"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -145,33 +146,43 @@ msgstr ""
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"Cette méthode doit typiquement être écrasée par l'utilisateur pour avoir un "
+"effet."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Cette methode n'a pas d'effets secondaires. Elle ne modifie aucune des "
+"variables membres de l'instance."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"Cette methode accepte n'importe quel nombre d'arguments après ceux décris "
+"ici."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "Cette methode est utilisée pour construire un type."
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Cette méthode n'a pas besoin d'instance pour être appelée, elle peut donc "
+"être directement appelée en utilisant le nom de la classe."
#: doc/tools/make_rst.py
msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"Cette méthode décrit un opérateur valide à utiliser avec ce type comme "
+"membre de droite."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -1358,17 +1369,17 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
-"Converti un argument ou plus en chaine de caractères de la meilleur manière "
-"possible et les affiches dans la console\n"
+"Converti un ou plusieurs arguments en chaîne de caractères de la meilleur "
+"façon possible et les imprimes dans la console\n"
"[codeblock]\n"
"a = [1, 2, 3]\n"
"print(\"a\", \"=\", a) # Affiche a=[1, 2, 3]\n"
"[/codeblock]\n"
-"[b]Note : [/b] Pensez à utiliser [method push_error] et [method "
+"[b]Note : [/b] Envisagez d'utiliser [method push_error] et [method "
"push_warning] pour afficher les messages d'erreur et d'avertissement au lieu "
-"de [method print]. Cela les distingue des messages d'impression utilisés à "
-"des fins de débogage, tout en affichant une trace de la pile lorsqu'une "
-"erreur ou un avertissement est affiché."
+"de [method print]. Cela les distingue des messages affichés utilisés à des "
+"fins de débogage, tout en affichant une trace de la pile lorsqu'une erreur "
+"ou un avertissement est affiché."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Like [method print], but prints only when used in debug mode."
@@ -1476,8 +1487,8 @@ msgstr ""
"[/codeblock]\n"
"[b]Note :[/b] Les erreurs affichées ainsi n'interrompent pas l'exécution du "
"projet. Pour afficher un message d'erreur et interrompre l'exécution du "
-"projet dans un build de débogage, utilisez [code]assert(false, \"test error"
-"\")[/code]."
+"projet dans un build de débogage, utilisez [code]assert(false, \"test "
+"error\")[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -2206,14 +2217,57 @@ msgid ""
"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
"\"idle_frame\")[/code] from the above example."
msgstr ""
+"Stoppe l'exécution de la fonction et renvoie l'état suspendu courant à la "
+"fonction appelante.\n"
+"Depuis l'appelant, appeler [method GDScriptFunctionState.resume] sur l'état "
+"pour reprendre l'exécution. Cela invalide l'état. Dans la fonction reprise, "
+"[code]yield()[/code] renvoie renvoie l'argument qui a été passé lors de "
+"l'appel à la fonction [code]resume()[/code].\n"
+"Si la fonction a reçu comme argument un objet et un signal, l'exécution est "
+"reprise quand l'objet émet le signal donnée. Dans ce cas, [code]yield()[/"
+"code] renvoie l'argument passé lors de l'appel à [code]emit_signal()[/code] "
+"si le signal ne prend qu'un seul argument, ou un tableau contenant tous les "
+"arguments passés lors de l'appel à [code]emit_signal()[/code] si le signal "
+"prend plusieurs arguments.\n"
+"Vous pouvez aussi utilisez [code]yield[/code] pour attendre la fin de "
+"l'exécution d'une fonction:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # attente que la fonction countdown() "
+"se termine\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # renvoie un objet de type "
+"GDScriptFunctionState à _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# affiche:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"Lors d'une attente sur une fonction, le signal [code]completed[/code] sera "
+"émis automatiquement quand la fonction se termine. Le signal peut donc être "
+"utilisé comme paramètre [code]signal[/code] de la méthode [code]yield[/code] "
+"à reprendre.\n"
+"Pour attendre sur une fonction, la fonction résultante devrait aussi "
+"renvoyer un [code]GDScriptFunctionState[/code]. Notez "
+"[code]yield(get_tree(), \"idle_frame\")[/code] dans l'exemple ci-dessus."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Constant that represents how many times the diameter of a circle fits around "
"its perimeter. This is equivalent to [code]TAU / 2[/code]."
msgstr ""
-"Constante qui représente le nombre de fois que le diamètre d'un cercle "
-"s'adapte autour de son périmètre. Cela équivaut à [code]TAU / 2[/code]."
+"Constante égale au rapport du périmètre sur le diamètre. Cela équivaut à "
+"[code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -2237,6 +2291,16 @@ msgid ""
"code] will not result in [constant INF] and will result in a run-time error "
"instead."
msgstr ""
+"L'infini positif représenté en virgule flottante. C'est le résultat d'un "
+"nombre à virgule flottante divisé par [code]0.0[/code]. L'infini négatif est "
+"représenté par [code]-INF[/code]. Diviser par [code]-0.0[/code] donnera une "
+"infinité négative si le numérateur est positif, donc diviser par [code]0.0[/"
+"code] n'est pas la même chose que de diviser par [code]-0.0[/code] (même si "
+"[code]0.0 == -0.0[/code] est toujours [code]true[/code]).\n"
+"[b]Note:[/b] L'infini numérique est un concept seulement pour les nombres à "
+"virgule flottante, et n'a pas d'équivalent pour les entiers. Diviser un "
+"nombre entier par [code]0[/code] est invalide et entraînera toujours une "
+"erreur d'exécution."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -2250,6 +2314,16 @@ msgid ""
"[code]0[/code] will not result in [constant NAN] and will result in a run-"
"time error instead."
msgstr ""
+"\"Not a Number\" (\"n'est pas un nombre\"), une valeur en virgule flottante "
+"invalide. [constant NAN] a des propriétés particulières, notamment le fait "
+"qu'elle n'est pas égale à elle-même ([code]NAN == NAN[/code] retourne "
+"[code]false[/code]). Elle est produite par certaines opérations invalides, "
+"comme la division d'un flottant [code]0.0[/code] par [code]0.0[/code].\n"
+"[b]Note:[/b] \"Not a Number\" est un concept spécifique aux nombres à "
+"virgule flottante (et aux problèmes de précision de ces nombres), et n'a pas "
+"d'équivalent pour les nombres entiers. La division d'un entier [code]0[/"
+"code] par [code]0[/code] ne résultera pas en [constant NAN] mais entraînera "
+"directement une erreur d'exécution."
#: doc/classes/@GlobalScope.xml
msgid "Global scope constants and variables."
@@ -2330,19 +2404,16 @@ msgid "The [Marshalls] singleton."
msgstr "Le singleton [Marshalls]."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "The [Navigation2DServer] singleton."
-msgstr "Le singleton [TranslationServer]."
+msgstr "Le singleton du [Navigation2DServer]."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "The [NavigationMeshGenerator] singleton."
-msgstr "Le singleton [EditorNavigationMeshGenerator]."
+msgstr "Le singleton du [NavigationMeshGenerator]."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "The [NavigationServer] singleton."
-msgstr "Le singleton [TranslationServer]."
+msgstr "Le singleton du [NavigationServer]."
#: doc/classes/@GlobalScope.xml
msgid "The [OS] singleton."
@@ -2373,9 +2444,8 @@ msgid "The [ResourceSaver] singleton."
msgstr "Le singleton [ResourceLoader]."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "The [Time] singleton."
-msgstr "Le singleton [Engine]."
+msgstr "Le singleton du [Time]."
#: doc/classes/@GlobalScope.xml
msgid "The [TranslationServer] singleton."
@@ -2392,8 +2462,8 @@ msgstr "Le singleton [VisualServer]."
#: doc/classes/@GlobalScope.xml
msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
-"Marge de gauche, généralement utilisée pour les classes dérivées de "
-"[Control] ou [StyleBox]."
+"Marge gauche, généralement utilisée pour les classes dérivées de [Control] "
+"ou [StyleBox]."
#: doc/classes/@GlobalScope.xml
msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
@@ -2435,7 +2505,7 @@ msgid ""
"General vertical alignment, usually used for [Separator], [ScrollBar], "
"[Slider], etc."
msgstr ""
-"Alignement vertical général, habituellement utilisé pour les [Separator], "
+"Alignement vertical général, généralement utilisé pour les [Separator], "
"[ScrollBar], [Slider], etc."
#: doc/classes/@GlobalScope.xml
@@ -2443,7 +2513,7 @@ msgid ""
"General horizontal alignment, usually used for [Separator], [ScrollBar], "
"[Slider], etc."
msgstr ""
-"Alignement horizontal général, habituellement utilisé pour les [Separator], "
+"Alignement horizontal général, généralement utilisé pour les [Separator], "
"[ScrollBar], [Slider], etc."
#: doc/classes/@GlobalScope.xml
@@ -2533,7 +2603,7 @@ msgstr "Touche d'effacement."
#: doc/classes/@GlobalScope.xml
msgid "Home key."
-msgstr "Touche Maison."
+msgstr "Touche Accueil."
#: doc/classes/@GlobalScope.xml
msgid "End key."
@@ -2541,7 +2611,7 @@ msgstr "Touche de fin."
#: doc/classes/@GlobalScope.xml
msgid "Left arrow key."
-msgstr "Touche fléchée gauche."
+msgstr "Touche de la flèche gauche."
#: doc/classes/@GlobalScope.xml
msgid "Up arrow key."
@@ -2549,7 +2619,7 @@ msgstr "Touche de flèche vers le haut."
#: doc/classes/@GlobalScope.xml
msgid "Right arrow key."
-msgstr "Touche fléchée droite."
+msgstr "Touche de la flèche droite."
#: doc/classes/@GlobalScope.xml
msgid "Down arrow key."
@@ -3661,6 +3731,11 @@ msgid ""
"- Linux: Up to 80 buttons.\n"
"- Windows and macOS: Up to 128 buttons."
msgstr ""
+"Le nombre maximum de boutons de contrôleurs de jeu supporté par le moteur. "
+"La limite réelle peut être plus basse sur des plateformes spécifiques.\n"
+"- Android : Jusqu'à 36 boutons.\n"
+"- Linux : Jusqu'à 80 boutons.\n"
+"- Window et macOS : Jusqu'à 128 boutons."
#: doc/classes/@GlobalScope.xml
msgid "DualShock circle button."
@@ -3755,7 +3830,7 @@ msgstr "Bouton Select de la manette."
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button Start."
-msgstr "Bouton Start de la manette."
+msgstr "Le bouton « Start » de la manette."
#: doc/classes/@GlobalScope.xml
msgid "Gamepad DPad up."
@@ -3815,7 +3890,7 @@ msgstr "Gâchette gauche de manette de jeu SDL."
#: doc/classes/@GlobalScope.xml
#, fuzzy
msgid "Gamepad left trigger."
-msgstr "Axe du déclencheur gauche du contrôleur de jeu."
+msgstr "Axe de la gâchette gauche de la manette."
#: doc/classes/@GlobalScope.xml
msgid "Gamepad left stick click."
@@ -3827,9 +3902,8 @@ msgid "Gamepad right Shoulder button."
msgstr "Gâchette droite de manette de jeu SDL."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad right trigger."
-msgstr "Axe du déclencheur gauche du contrôleur de jeu."
+msgstr "Axe de la gâchette droite de la manette."
#: doc/classes/@GlobalScope.xml
msgid "Gamepad right stick click."
@@ -3907,12 +3981,16 @@ msgid ""
"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
+"L'axe X du pavé tactile pour OpenVR (par exemple l'axe du joystick sur les "
+"contrôleurs Oculus Touch et Windows MR)."
#: doc/classes/@GlobalScope.xml
msgid ""
"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
+"L'axe Y du pavé tactile pour OpenVR (par exemple l'axe du joystick sur les "
+"contrôleurs Oculus Touch et Windows MR)."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4101,11 +4179,11 @@ msgstr "Fichier : Erreur d'impossibilité d'ouverture."
#: doc/classes/@GlobalScope.xml
msgid "File: Can't write error."
-msgstr "Fichier : Erreur d'impossibilité d’écriture."
+msgstr "Fichier: Erreur d'écriture."
#: doc/classes/@GlobalScope.xml
msgid "File: Can't read error."
-msgstr "Fichier : Erreur de lecture impossible."
+msgstr "Fichier: Erreur de lecture."
#: doc/classes/@GlobalScope.xml
msgid "File: Unrecognized error."
@@ -4125,11 +4203,11 @@ msgstr "Fichier : Erreur fin de ficher(EOF)."
#: doc/classes/@GlobalScope.xml
msgid "Can't open error."
-msgstr "Impossible d’ouvrir l’erreur."
+msgstr "Erreur d'ouverture."
#: doc/classes/@GlobalScope.xml
msgid "Can't create error."
-msgstr "Impossible de créer une erreur."
+msgstr "Erreur de création."
#: doc/classes/@GlobalScope.xml
msgid "Query failed error."
@@ -4137,7 +4215,7 @@ msgstr "Erreur d'échec de la requête."
#: doc/classes/@GlobalScope.xml
msgid "Already in use error."
-msgstr "Erreur : déjà utilisé."
+msgstr "Erreur quand déjà utilisé."
#: doc/classes/@GlobalScope.xml
msgid "Locked error."
@@ -4149,11 +4227,11 @@ msgstr "Erreur de délai d’expiration."
#: doc/classes/@GlobalScope.xml
msgid "Can't connect error."
-msgstr "Erreur de connexion impossible."
+msgstr "Erreur de connexion."
#: doc/classes/@GlobalScope.xml
msgid "Can't resolve error."
-msgstr "Impossible de résoudre l’erreur."
+msgstr "Erreur de résolution."
#: doc/classes/@GlobalScope.xml
msgid "Connection error."
@@ -4293,8 +4371,8 @@ msgid ""
msgstr ""
"Indique qu'une propriété nombre entier, décimal ou chaîne de caractères est "
"une valeur énumérée qui doit être choisie depuis une liste spécifiée par une "
-"chaine de caractères d'indication telle que [code]\"Bonjour,Truc,AutreTruc"
-"\"[/code]."
+"chaine de caractères d'indication telle que [code]\"Bonjour,Truc,"
+"AutreTruc\"[/code]."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4378,8 +4456,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"Indique qu'une propriété de chaîne de caractères est un chemin d'accès "
"absolu à un fichier en dehors du répertoire du projet. En l'éditant, une "
@@ -4552,7 +4630,7 @@ msgstr "La variable est de type [int]."
#: doc/classes/@GlobalScope.xml
msgid "Variable is of type [float] (real)."
-msgstr "La variable est de type [float] (real)."
+msgstr "La variable est de type [float] (réel)."
#: doc/classes/@GlobalScope.xml
msgid "Variable is of type [String]."
@@ -4778,22 +4856,24 @@ msgstr ""
"Une AABB est constituée en une position, une taille, et plusieurs fonctions "
"utilitaires. Principalement utilisée pour des tests de chevauchement rapides."
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+#, fuzzy
+msgid "Vector math"
msgstr ""
+"Vecteur utilisé pour les mathématiques 2D utilisant des coordonnées "
+"d'entiers."
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/fr/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4981,7 +5061,6 @@ msgstr ""
"résultat."
#: doc/classes/AcceptDialog.xml
-#, fuzzy
msgid ""
"Adds a button with label [code]text[/code] and a custom [code]action[/code] "
"to the dialog and returns the created button. [code]action[/code] will be "
@@ -4991,15 +5070,16 @@ msgid ""
"You can use [method remove_button] method to remove a button created with "
"this method from the dialog."
msgstr ""
-"Ajoute un bouton avec l'étiquette [code]text[/code] et un [code]action[/"
-"code] personnalisé à la de dialogue et retourne le bouton créé. "
-"[code]action[/code] sera passé au signal [signal_custom_action] quand on le "
-"pousse.\n"
-"Si [code]true[/code], [code]right[/code] placera le bouton à la droite de "
-"tous ses boutons fraternels."
+"Ajoute un bouton avec l'étiquette [code]text[/code] et une [code]action[/"
+"code] personnalisée à la boite de dialogue et retourne le bouton créé. "
+"L'[code]action[/code] sera passée au signal [signal_custom_action] quand le "
+"bouton est pressé.\n"
+"Si [code]true[/code], [code]right[/code] placera le bouton à la droite des "
+"autres boutons voisins.\n"
+"Vous pouvez utiliser la méthode [method remove_button] pour supprimer de la "
+"boite de dialogue un bouton créé avec cette méthode."
#: doc/classes/AcceptDialog.xml
-#, fuzzy
msgid ""
"Adds a button with label [code]name[/code] and a cancel action to the dialog "
"and returns the created button.\n"
@@ -5007,7 +5087,9 @@ msgid ""
"this method from the dialog."
msgstr ""
"Ajoute un bouton avec l'étiquette [code]name[/code] et une action "
-"d'annulation à la boîte de dialogue avant de retourner le bouton créé."
+"d'annulation à la boîte de dialogue avant de retourner le bouton créé.\n"
+"Vous pouvez utiliser la méthode [method remove_button] pour supprimer de la "
+"boite de dialogue un bouton un bouton créé avec cette méthode."
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -5030,8 +5112,8 @@ msgid ""
"Registers a [LineEdit] in the dialog. When the enter key is pressed, the "
"dialog will be accepted."
msgstr ""
-"Enregistre une [LineEdit] dans la boîte de dialogue. Lorsque la touche "
-"entrée est appuyée, la boîte de dialogue sera acceptée."
+"Ajoute une [LineEdit] dans le dialogue. Quand on appuie sur la touche "
+"entrée, le dialogue sera accepté."
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -5041,6 +5123,9 @@ msgid ""
"the [code]button[/code] will no longer emit this dialog's [signal "
"custom_action] signal or cancel this dialog."
msgstr ""
+"Enlever le [code]bouton[/code] de la boite de la boîte de dialogue. Ne "
+"libère pas le bouton. Le bouton dois être un [Button] ajouté avec la méthode "
+"[method add_button] ou [method add_cancel] ."
#: doc/classes/AcceptDialog.xml
msgid "Sets autowrapping for the text in the dialog."
@@ -5060,18 +5145,18 @@ msgid ""
"dialog if the input is valid. As such, this property can't be used in "
"[FileDialog] to disable hiding the dialog when pressing OK."
msgstr ""
-"Si [code]vrai[/code], la boîte de dialogue est cachée quand le bouton OK est "
+"Si [code]true[/code], la boîte de dialogue est cachée quand le bouton OK est "
"pressé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par "
"exemple, valider l'entrée quand le signal [signal confirmed] est reçu et "
-"gérer la dissimulation de la boîte de dialogue dans votre propre logique.\n"
+"masquer manuellement la boîte de dialogue.\n"
"[b]Note:[/b] Plusieurs nœuds dérivés de cette classe peuvent avoir une "
-"valeur défaut différent et potentiellement leur propre logique intégrée qui "
-"outrepassera ce réglage. Par exemple [FileDialog] fait défaut à [code]false[/"
-"code], et contient sa propre logique pour valider l'entrée qui est appelée "
-"quand vous pressez OK, qui éventuellement cache le dialogue si l'entrée est "
-"valide. Comme tel, cette propriété ne peut pas être utilisé dans "
-"[FileDialog] pour désactiver la dissimulation de la boîte de dialogue quand "
-"OK est pressé."
+"valeur par défaut différente mais aussi leur propre logique intégrée qui "
+"outrepassera ce réglage. Par exemple [FileDialog] utilise par défaut "
+"[code]false[/code], et contient sa propre logique pour valider l'entrée qui "
+"est appelée quand vous pressez OK, puis va cacher le dialogue si cette "
+"entrée est valide. Telle quelle, cette propriété ne peut pas être utilisée "
+"dans [FileDialog] pour désactiver la dissimulation de la boîte de dialogue "
+"quand OK est pressé."
#: doc/classes/AcceptDialog.xml
msgid "The text displayed by the dialog."
@@ -5172,18 +5257,16 @@ msgstr ""
"Ferme ce contexte AES afin qu’il puisse être recommencé. Voir [method start]."
#: doc/classes/AESContext.xml
-#, fuzzy
msgid ""
"Get the current IV state for this context (IV gets updated when calling "
"[method update]). You normally don't need this function.\n"
"[b]Note:[/b] This function only makes sense when the context is started with "
"[constant MODE_CBC_ENCRYPT] or [constant MODE_CBC_DECRYPT]."
msgstr ""
-"Obtiens l'état IV actuel pour ce contexte (L'IV est mis à jour lors que vous "
-"appelez [method update]). Vous n'avez généralement pas besoin de cette "
-"fonction.\n"
-"Note : Cette fonction a seulement du sens quand le contexte est initialisé "
-"avec [constant MODE_CBC_ENCRYPT] ou [constant MODE_CBC_DECRYPT]."
+"Obtiens l'état IV actuel pour ce contexte (L'IV est mis à jour en appelant "
+"[method update]). Vous n'avez généralement pas besoin de cette fonction.\n"
+"[b]Note:[/b] Cette fonction a seulement du sens quand le contexte est "
+"initialisé avec [constant MODE_CBC_ENCRYPT] ou [constant MODE_CBC_DECRYPT]."
#: doc/classes/AESContext.xml
msgid ""
@@ -5248,11 +5331,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5261,9 +5342,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5355,6 +5435,10 @@ msgstr ""
"peut être configuré dans l'éditeur avec le tableau SpriteFrames."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr "Retourne [code]true[/code] si une animation joue présentement."
@@ -5572,10 +5656,6 @@ msgstr ""
"méthodes spécialisées. Voyez [enum TrackType] pour voir les types "
"disponibles."
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "Ajoute une piste à l’animation."
@@ -5887,9 +5967,7 @@ msgstr "Déplace une piste vers le bas."
msgid ""
"Changes the index position of track [code]idx[/code] to the one defined in "
"[code]to_idx[/code]."
-msgstr ""
-"Change la position de l'index de la piste [code]idx[/code] à celui définie "
-"par [code]to_idx[/code]."
+msgstr "Déplace la piste à l'index [code]idx[/code] vers [code]to_idx[/code]."
#: doc/classes/Animation.xml
msgid "Moves a track up."
@@ -6038,8 +6116,8 @@ msgid ""
"Emitted when there's a change in the list of tracks, e.g. tracks are added, "
"moved or have changed paths."
msgstr ""
-"Émit quand des pistes subissent des changements, par exemple quand elles "
-"sont ajoutées, déplacées ou ont changé de chemin."
+"Émis quand la liste des pistes est modifiée, par exemple, quand une piste "
+"est ajoutée, déplacée ou que le chemin d'une piste a changé."
#: doc/classes/Animation.xml
msgid ""
@@ -6054,9 +6132,9 @@ msgid ""
"Transform tracks are used to change node local transforms or skeleton pose "
"bones. Transitions are interpolated."
msgstr ""
-"Les pistes de transformation sont utilisées pour modifier des "
-"transformations locales ou l'attitude des os d'un squelette. Les transitions "
-"sont interpolées."
+"Les pistes de transformations sont utilisées pour modifier les "
+"transformations locales ou les os de pose d'un squelette. Ces transitions "
+"sont toujours interpolées."
#: doc/classes/Animation.xml
msgid "Method tracks call functions with given arguments per key."
@@ -6070,9 +6148,10 @@ msgid ""
"also be used to animate sub-properties of vectors and colors (e.g. alpha "
"value of a [Color])."
msgstr ""
-"Les pistes de Bezier servent à interpoler une valeur en utilisant des "
-"courbes personnalisées. Elles peuvent aussi servir à animer les sous-"
-"propriétés de vecteurs et de couleurs (par exemple l'alpha d'une [Color])."
+"Les pistes de Bézier sont utilisées pour calculer une valeur par "
+"interpolation en utilisant des courbes personnalisées. Elles peuvent "
+"également être utilisées pour animer des sous-propriétés de vecteurs et de "
+"couleurs (par exemple, l'opacité d'une [Color])."
#: doc/classes/Animation.xml
msgid ""
@@ -6107,7 +6186,7 @@ msgstr "Mise à jour entre les images clés."
#: doc/classes/Animation.xml
msgid "Update at the keyframes and hold the value."
-msgstr "Mettez à jour aux clés d'animation et conservez la valeur."
+msgstr "Met à jour les images clés et conserve la valeur."
#: doc/classes/Animation.xml
msgid "Update at the keyframes."
@@ -6139,25 +6218,6 @@ msgstr ""
"Héritez ceci pour créer des nœuds principalement utilisés dans "
"[AnimationNodeBlendTree], sinon utilisez [AnimationRootNode]."
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6273,7 +6333,7 @@ msgstr ""
#: doc/classes/AnimationNode.xml
msgid "Returns [code]true[/code] whether a given path is filtered."
-msgstr "Renvoie [code]true[/code] si le chemin donné est filtré."
+msgstr "Retourne [code]true[/code] si un chemin donné est filtré."
#: doc/classes/AnimationNode.xml
msgid ""
@@ -6298,7 +6358,7 @@ msgstr ""
#: doc/classes/AnimationNode.xml
msgid "Removes an input, call this only when inactive."
-msgstr "Supprime une input, n'appeller que si il est inactif."
+msgstr "Supprime une entrée, n'appeler que si le nœud est inactif."
#: doc/classes/AnimationNode.xml
msgid "Adds or removes a path for the filter."
@@ -6335,7 +6395,7 @@ msgstr ""
#: doc/classes/AnimationNode.xml
msgid "Do not use filtering."
-msgstr "N’utilisez pas de filtrage."
+msgstr "Ne pas utiliser de filtrage."
#: doc/classes/AnimationNode.xml
msgid "Paths matching the filter will be allowed to pass."
@@ -6372,8 +6432,8 @@ msgid ""
"code] when calling [method AnimationNode.blend_input], forcing the blended "
"animations to update every frame."
msgstr ""
-"Si [code]true[/code], fixe le [code]optimisation[/code] à [code]false[/code] "
-"à l'appel de [method AnimationNode.blend_input], forçant les animations "
+"Si [code]true[/code], fixe [code]optimization[/code] à [code]false[/code] à "
+"l'appel de [method AnimationNode.blend_input], forçant les animations "
"mélangées à se mettre à jour à chaque image."
#: doc/classes/AnimationNodeAdd3.xml
@@ -6381,7 +6441,7 @@ msgid ""
"Blends two of three animations additively inside of an "
"[AnimationNodeBlendTree]."
msgstr ""
-"Mélange deux des trois animations de façon additive à l'intérieur d'un "
+"Mélange deux des trois animations de manière additive à l'intérieur d'un "
"[AnimationNodeBlendTree]."
#: doc/classes/AnimationNodeAdd3.xml
@@ -6396,15 +6456,25 @@ msgid ""
"- A +add animation to blend with when the blend amount is in the [code][0.0, "
"1.0][/code] range"
msgstr ""
-"Une ressource à ajouter à un [AnimationNodeBlendTree]. Mélange deux "
-"animations de manière additive sur trois en fonction d'une valeur dans la "
-"plage [code][-1.0, 1.0][/code].\n"
-"Ce nœud a trois entrées :\n"
-"- L'animation de base à ajouter\n"
-"- Une animation -add à mélanger lorsque la quantité de mélange est dans la "
-"plage [code][-1.0, 0.0][/code].\n"
-"- Une animation + ajouter à mélanger lorsque la quantité de mélange est dans "
-"la plage [code][0.0, 1.0][/code]"
+"Une ressource à ajouter à un [AnimationNodeBlendTree]. Ceci mélange deux "
+"animations (sur 3) ensemble de manière additive sur la base d'une valeur "
+"dans la plage [code][-1.0, 1.0][/code].\n"
+"Ce nœud comporte trois entrées :\n"
+"- L'animation de base à ajouter aux autres\n"
+"- L'animation à mélanger quand la valeur est dans la plage [code][-1.0, 0.0]"
+"[/code].\n"
+"- L'animation à mélanger quand la valeur est dans la plage [code][0.0, 1.0][/"
+"code]."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Nœud d'animation."
#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
#: doc/classes/AnimationNodeBlend2.xml
@@ -6419,8 +6489,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6444,15 +6514,15 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
"Animation to use as an output. It is one of the animations provided by "
"[member AnimationTree.anim_player]."
msgstr ""
-"Animation à utiliser comme sortie. C'est une des animations fournies par "
+"L'animation à utiliser comme sortie. C'est l'une des animations fournies par "
"[member AnimationTree.anim_player]."
#: doc/classes/AnimationNodeBlend2.xml
@@ -6490,12 +6560,23 @@ msgid ""
"- A +blend animation to blend with when the blend amount is in the [code]"
"[0.0, 1.0][/code] range"
msgstr ""
+"Une ressource à ajouter à un [AnimationNodeBlendTree]. Mélange deux "
+"animations linéairement sur la base d'une valeur dans la plage [code][-1.0, "
+"1.0][/code].\n"
+"Ce nœud a trois entrées:\n"
+"- L'animation de base\n"
+"- Une animation de mélange - pour mélanger avec quand le taux de mélange est "
+"dans la plage [code][-1.0, 0.0][/code].\n"
+"- Une animation de mélange + pour mélanger avec quand le taux de mélange est "
+"dans la plage [code][0.0, 1.0][/code]"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
"Blends linearly between two of any number of [AnimationNode] of any type "
"placed on a virtual axis."
msgstr ""
+"Mélange linéairement de deux sur n'importe quel nombre de [AnimationNode] de "
+"n'importe quel type placées sur un axe virtuel."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
@@ -6507,6 +6588,13 @@ msgid ""
"You can set the extents of the axis using the [member min_space] and [member "
"max_space]."
msgstr ""
+"Une ressource à ajouter à un [AnimationNodeBlendTree].\n"
+"Il s'agit d'un axe virtuel sur lequel peut s'ajouter n'importe quel type "
+"d'[AnimationNode] en utilisant [method add_blend_point].\n"
+"Donne en sortie le mélange linéaire des deux [AnimationNode]s les plus "
+"proches de la valeur courante du nœud.\n"
+"Les extrémités de l'axe peuvent être définies via [member min_space] et "
+"[member max_space]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
@@ -6542,6 +6630,7 @@ msgstr "Retourne la position du point à l'index [code]point[/code]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid "Removes the point at index [code]point[/code] from the blend axis."
msgstr ""
+"Supprime le point de l'axe de blend situé à l'index [code]point[/code]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
@@ -6549,6 +6638,8 @@ msgid ""
"Changes the [AnimationNode] referenced by the point at index [code]point[/"
"code]."
msgstr ""
+"Remplace l'[AnimationNode] référencé par le point à l'index [code]point[/"
+"code]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
@@ -6556,32 +6647,40 @@ msgid ""
"Updates the position of the point at index [code]point[/code] on the blend "
"axis."
msgstr ""
+"Met à jour la position du point à l'index [code]point[/code] sur l'axe de "
+"blend."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
"The blend space's axis's upper limit for the points' position. See [method "
"add_blend_point]."
msgstr ""
+"La limite supérieure de position pour des points sur l'axe de l'espace "
+"blend. Voir [method add_blend_point]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
"The blend space's axis's lower limit for the points' position. See [method "
"add_blend_point]."
msgstr ""
+"La limite inférieure de position pour des points sur l'axe de l'espace "
+"blend. Voir [method add_blend_point]."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid "Position increment to snap to when moving a point on the axis."
-msgstr ""
+msgstr "Incrément de position (snap) quand un point est déplacé sur l'axe."
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid "Label of the virtual axis of the blend space."
-msgstr ""
+msgstr "Étiquette de l'axe virtuel de l'espace blend."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Blends linearly between three [AnimationNode] of any type placed in a 2D "
"space."
msgstr ""
+"Mélange linéairement trois [AnimationNode] de n'importe quel type placés "
+"dans un espace 2D."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6593,6 +6692,14 @@ msgid ""
"[code]true[/code]. Otherwise, use [method add_triangle] and [method "
"remove_triangle] to create up the blend space by hand."
msgstr ""
+"Une ressource a ajouter à un [AnimationNodeBlendTree].\n"
+"Ce nœud vous permet la transition linéaire entre trois animations en "
+"utilisant une intensité [Vector2].\n"
+"Vous pouvez ajouter des sommets à l'espace blend avec [method "
+"add_blend_point] et automatiquement le trianguler en configurant [member "
+"auto_triangles] à [code]true[/code]. Autrement, utilisez [method "
+"add_triangle] et [method remove_triangle] pour créer l'espace blend "
+"manuellement."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6602,6 +6709,11 @@ msgid ""
"[code]at_index[/code], the point is inserted at the end of the blend points "
"array."
msgstr ""
+"Ajoute un nouveau point qui représente un [code]node[/code] à la position "
+"désignée par [code]pos[/code]. Vous pouvez l' insérer à un index spécifique "
+"en utilisant l'argument [code]at_index[/code]. Si vous utilisez une valeur "
+"par défaut pour [code]at_index[/code], le point est inséré à la fin de la "
+"séquence de points blend."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6611,35 +6723,46 @@ msgid ""
"default value for [code]at_index[/code], the point is inserted at the end of "
"the blend points array."
msgstr ""
+"Créer un nouveau triangle en utilisant trois points [code]x[/code], [code]y[/"
+"code], et [code]z[/code]. Les triangles peuvent se superposer. Vous pouvez "
+"insérer un triangle à un index spécifique en utilisant l'argument "
+"[code]at_index[/code]. Si vous utilisez une valeur par défaut pour "
+"[code]at_index[/code], le point est inséré à la fin de la séquence de points "
+"blend."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Returns the number of points in the blend space."
-msgstr ""
+msgstr "Retourne le nombre de points dans le blend space."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Returns the [AnimationRootNode] referenced by the point at index "
"[code]point[/code]."
msgstr ""
+"Retourne l'[AnimationRootNode] référencé par le point à l'index [code]point[/"
+"code]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Returns the number of triangles in the blend space."
-msgstr ""
+msgstr "Retourne le nombre de triangles dans le blend space."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Returns the position of the point at index [code]point[/code] in the "
"triangle of index [code]triangle[/code]."
msgstr ""
+"Retourne la position du point à l'index [code]point[/code] dans le triangle "
+"d'index [code]triangle[/code]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Removes the point at index [code]point[/code] from the blend space."
-msgstr ""
+msgstr "Supprime le point à l'index [code]point[/code] du blend space."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Removes the triangle at index [code]triangle[/code] from the blend space."
msgstr ""
+"Supprime le triangle à l'index [code]triangle[/code] de l'espace blend."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6647,42 +6770,54 @@ msgid ""
"mesh updates every time you add or remove points with [method "
"add_blend_point] and [method remove_blend_point]."
msgstr ""
+"Si [code]true[/code], le blend space est triangulé automatiquement. Le "
+"maillage se met à jour à chaque ajout ou suppression de points via [method "
+"add_blend_point] et [method remove_blend_point]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Controls the interpolation between animations. See [enum BlendMode] "
"constants."
msgstr ""
+"Contrôle l'interpolation entre animations. Voir les constantes [enum "
+"BlendMode]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"The blend space's X and Y axes' upper limit for the points' position. See "
"[method add_blend_point]."
msgstr ""
+"La limite supérieure pour les positions des point sur les axes X/Y de "
+"l'espace de mélange. Voir [method add_blend_point]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"The blend space's X and Y axes' lower limit for the points' position. See "
"[method add_blend_point]."
msgstr ""
+"La limite inférieure pour les positions des point sur les axes X/Y de "
+"l'espace de mélange. Voir [method add_blend_point]."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Position increment to snap to when moving a point."
msgstr ""
+"L' incrément de position à laquelle s'accrocher lorsque l'on bouge un point."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Name of the blend space's X axis."
-msgstr ""
+msgstr "Nom de l'axe X de l'espace de mélange."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Name of the blend space's Y axis."
-msgstr ""
+msgstr "Nom de l'axe Y de l'espace de mélange."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Emitted every time the blend space's triangles are created, removed, or when "
"one of their vertices changes position."
msgstr ""
+"Émis à chaque création, suppression de triangles ou changement de position "
+"de l'un de leurs sommets dans le blend space."
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "The interpolation between animations is linear."
@@ -6724,22 +6859,23 @@ msgstr ""
#: doc/classes/AnimationNodeBlendTree.xml
msgid "Disconnects the node connected to the specified input."
-msgstr ""
+msgstr "Supprime la connexion du nœud à l'entrée spécifiée."
#: doc/classes/AnimationNodeBlendTree.xml
msgid "Returns the sub-node with the specified [code]name[/code]."
-msgstr ""
+msgstr "Retourne le sous-nœud de nom [code]name[/code]."
#: doc/classes/AnimationNodeBlendTree.xml
msgid ""
"Returns the position of the sub-node with the specified [code]name[/code]."
-msgstr ""
+msgstr "Retourne la position du sous-nœud de nom [code]name[/code]."
#: doc/classes/AnimationNodeBlendTree.xml
msgid ""
"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
"exists."
msgstr ""
+"Retourne [code]true[/code] si un sous-nœud de nom[code]name[/code] existe."
#: doc/classes/AnimationNodeBlendTree.xml
msgid "Removes a sub-node."
@@ -6776,7 +6912,7 @@ msgstr "Le nœud de sortie est [code]null[/code]."
#: doc/classes/AnimationNodeBlendTree.xml
msgid "Input and output nodes are the same."
-msgstr "Les nœuds d’entrée et de sortie sont les mêmes."
+msgstr "Les nœuds d’entrée et de sortie sont identiques."
#: doc/classes/AnimationNodeBlendTree.xml
msgid "The specified connection already exists."
@@ -6798,6 +6934,7 @@ msgid ""
"If [code]true[/code], the sub-animation will restart automatically after "
"finishing."
msgstr ""
+"Si [code]true[/code], la sous-animation redémarrera automatiquement à la fin."
#: doc/classes/AnimationNodeOneShot.xml
msgid "The delay after which the automatic restart is triggered, in seconds."
@@ -6810,6 +6947,9 @@ msgid ""
"seconds) between 0 and this value will be added to [member "
"autorestart_delay]."
msgstr ""
+"Si [member autorestart] est [code]true[/code], un délai additionnel (en "
+"secondes) aléatoirement choisi entre 0 et cette valeur sera ajouté à [member "
+"autorestart_delay]."
#: doc/classes/AnimationNodeOutput.xml
msgid "Generic output node to be added to [AnimationNodeBlendTree]."
@@ -6832,14 +6972,24 @@ msgid ""
"state_machine.travel(\"some_state\")\n"
"[/codeblock]"
msgstr ""
+"Contient plusieurs nœuds représentant des états d'animation, connectés dans "
+"un graphe. Les transitions peuvent être configurées pour se déclencher "
+"automatiquement ou programmatiquement, par algorithme du chemin le plus "
+"court. Pour un contrôle programmatique, il faut récupérer l'objet "
+"[AnimationNodeStateMachinePlayback] du nœud [AnimationTree].\n"
+"[b]Exemple :[/b]\n"
+"[codeblock]\n"
+"var automate = $AnimationTree.get(\"parameters/playback\")\n"
+"automate.travel(\"un_etat\")\n"
+"[/codeblock]"
#: doc/classes/AnimationNodeStateMachine.xml
msgid ""
"Adds a new node to the graph. The [code]position[/code] is used for display "
"in the editor."
msgstr ""
-"Ajoute un nouveau nœud au graphique. La [code]position [/code] est utilisée "
-"pour l’affichage dans l’éditeur."
+"Ajoute un nouveau nœud au graphe. La [code]position[/code] est utilisée pour "
+"l’affichage dans l’éditeur."
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Adds a transition between the given nodes."
@@ -6847,7 +6997,7 @@ msgstr "Ajoute une transition entre les nœuds donnés."
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Returns the graph's end node."
-msgstr "Retourne le nœud final du graphique."
+msgstr "Retourne le nœud final du graphe."
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Returns the draw offset of the graph. Used for display in the editor."
@@ -6872,7 +7022,7 @@ msgstr "Retourne la transition donnée."
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Returns the number of connections in the graph."
-msgstr ""
+msgstr "Retourne le nombre de connections dans le graphe."
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Returns the given transition's start node."
@@ -6946,7 +7096,7 @@ msgstr ""
#: doc/classes/AnimationNodeStateMachinePlayback.xml
msgid "Returns the currently playing animation state."
-msgstr ""
+msgstr "Retourne l'actuel état d'animation joué."
#: doc/classes/AnimationNodeStateMachinePlayback.xml
#, fuzzy
@@ -7021,7 +7171,7 @@ msgstr ""
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid "Emitted when [member advance_condition] is changed."
-msgstr ""
+msgstr "Émis quand [member advance_condition] est changé."
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid ""
@@ -7117,6 +7267,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Nœud d'animation."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7343,7 +7498,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml
msgid "Notifies when an animation finished playing."
-msgstr ""
+msgstr "Notifie quand une animation a fini de jouer."
#: doc/classes/AnimationPlayer.xml
msgid "Notifies when an animation starts playing."
@@ -7360,16 +7515,20 @@ msgid ""
"Process animation during the physics process. This is especially useful when "
"animating physics bodies."
msgstr ""
+"Met à jour l'animation durant les trames de physique. C'est particulièrement "
+"utile pour animer les corps physiques."
#: doc/classes/AnimationPlayer.xml doc/classes/AnimationTreePlayer.xml
msgid "Process animation during the idle process."
-msgstr ""
+msgstr "Met à jour l'animation durant les trames de repos."
#: doc/classes/AnimationPlayer.xml
msgid ""
"Do not process animation. Use [method advance] to process the animation "
"manually."
msgstr ""
+"Ne met à jour l'animation. Utilisez [method advance] pour mettre à jour "
+"l'animation manuellement."
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7400,6 +7559,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+#, fuzzy
+msgid "Using AnimationTree"
+msgstr "Réinitialise cet [AnimationTreePlayer]."
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7741,7 +7905,7 @@ msgstr "Supprime l’animation avec la touche [code]name[/code]."
#: doc/classes/AnimationTreePlayer.xml
msgid "Resets this [AnimationTreePlayer]."
-msgstr ""
+msgstr "Réinitialise cet [AnimationTreePlayer]."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7861,54 +8025,50 @@ msgid "The thread in which to update animations."
msgstr ""
#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
msgid "Output node."
-msgstr "Nœud de texte."
+msgstr "Nœud de sortie."
#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
msgid "Animation node."
-msgstr "Nœud inconnu."
+msgstr "Nœud d'animation."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "OneShot node."
-msgstr "Nœud de texte."
+msgstr "Nœud à lancement unique (OneShot)."
#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
msgid "Mix node."
-msgstr "Nœud de texte."
+msgstr "Nœud de mixage."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "Blend2 node."
-msgstr "Nœud de commentaire."
+msgstr "Nœud de mélange à 2 entrées (Blend2)."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "Blend3 node."
-msgstr "Nœud de commentaire."
+msgstr "Nœud de mélange à 3 entrées (Blend3)."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "Blend4 node."
-msgstr "Nœud de commentaire."
+msgstr "Nœud de mélange à 4 entrées (Blend4)."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "TimeScale node."
-msgstr "Nœud de texte."
+msgstr "Nœud d'étirement du temps (TimeScale)."
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
msgid "TimeSeek node."
-msgstr "Nœud de texte."
+msgstr "Nœud de positionnement temporel (TimeSeek)."
#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
msgid "Transition node."
-msgstr "Le type de transition."
+msgstr "Nœud de transition."
#: doc/classes/Area.xml
msgid "3D area for detection and physics and audio influence."
@@ -7923,8 +8083,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -8159,23 +8319,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -8585,9 +8741,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -8784,13 +8943,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8820,7 +8972,7 @@ msgstr ""
#: doc/classes/ArrayMesh.xml
msgid "Removes all surfaces from this [ArrayMesh]."
-msgstr ""
+msgstr "Retirer toutes les surfaces de ce [ArrayMesh]."
#: doc/classes/ArrayMesh.xml
msgid "Returns the number of blend shapes that the [ArrayMesh] holds."
@@ -9007,7 +9159,7 @@ msgstr "Un tableau d'index sera utilisé."
#: doc/classes/ARVRAnchor.xml
msgid "An anchor point in AR space."
-msgstr ""
+msgstr "Un point d'ancrage dans l'espace AR."
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9105,12 +9257,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr "Nœud spatial représentant un contrôleur suivi spatialement."
@@ -9335,9 +9481,8 @@ msgid "[code]true[/code] if this is the primary interface."
msgstr "[code]true[/code] (vrai) si c'est l'interface principale."
#: doc/classes/ARVRInterface.xml
-#, fuzzy
msgid "No ARVR capabilities."
-msgstr "Pas de capacité XR."
+msgstr "Pas de capacité ARVR."
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -9657,9 +9802,8 @@ msgid "Returns the number of trackers currently registered."
msgstr "Retourne le nombre de traqueurs actuellement enregistrés."
#: doc/classes/ARVRServer.xml
-#, fuzzy
msgid "Removes this interface."
-msgstr "Supprime l'élément."
+msgstr "Supprime cette interface."
#: doc/classes/ARVRServer.xml
#, fuzzy
@@ -9926,7 +10070,7 @@ msgstr ""
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid "Clears all the points and segments."
-msgstr ""
+msgstr "Retire tous les points et segments."
#: doc/classes/AStar.xml
msgid ""
@@ -10052,7 +10196,7 @@ msgstr ""
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid "Returns an array of all points."
-msgstr ""
+msgstr "Retourne la liste des tous les points."
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
@@ -10299,8 +10443,8 @@ msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr "Démo de spectre audio"
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -10554,7 +10698,7 @@ msgstr ""
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], [code]tap1[/code] will be enabled."
-msgstr ""
+msgstr "Si [code]true[/code], [code]tap1[/code] sera activé."
#: doc/classes/AudioEffectDelay.xml
msgid "[code]tap1[/code] delay time in milliseconds."
@@ -10568,7 +10712,7 @@ msgstr ""
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
-msgstr ""
+msgstr "Si [code]true[/code], [code]tap2[/code] sera activé."
#: doc/classes/AudioEffectDelay.xml
msgid "[b]Tap2[/b] delay time in milliseconds."
@@ -10602,10 +10746,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -11000,11 +11142,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -11097,9 +11236,11 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
-msgstr ""
+msgstr "Démo de spectre audio"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml
#: doc/classes/AudioStreamGenerator.xml
@@ -11124,7 +11265,7 @@ msgstr ""
#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml
msgid "Use the average value as magnitude."
-msgstr ""
+msgstr "Utiliser la valeur moyenne comme magnitude."
#: doc/classes/AudioEffectSpectrumAnalyzerInstance.xml
msgid "Use the maximum value as magnitude."
@@ -11143,14 +11284,8 @@ msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr "Démo de spectre audio"
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -11165,7 +11300,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11173,7 +11309,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11289,7 +11430,7 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid "Removes the bus at index [code]index[/code]."
-msgstr ""
+msgstr "Retire le bus à l'index [code]index[/code]."
#: doc/classes/AudioServer.xml
msgid ""
@@ -11334,7 +11475,12 @@ msgstr "Nombre de bus audio disponibles."
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11349,7 +11495,7 @@ msgstr "Émis lorsque le [AudioBusLayout] change."
#: doc/classes/AudioServer.xml
msgid "Two or fewer speakers were detected."
-msgstr ""
+msgstr "Deux enceintes ou moins sont détectées."
#: doc/classes/AudioServer.xml
msgid "A 3.1 channel surround setup was detected."
@@ -11375,18 +11521,16 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
+msgstr "Démo de spectre audio"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr "Démo de spectre audio"
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -11424,12 +11568,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11488,7 +11632,7 @@ msgstr "Pilote de flux audio OGG Vorbis."
#: modules/minimp3/doc_classes/AudioStreamMP3.xml
#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
msgid "Contains the audio data in bytes."
-msgstr ""
+msgstr "Contient les données audio en octets."
#: modules/minimp3/doc_classes/AudioStreamMP3.xml
#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
@@ -11554,6 +11698,8 @@ msgstr "Arrête l'audio."
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid "If [code]true[/code], audio plays when added to scene tree."
msgstr ""
+"Si [code]true[/code], il commence à jouer dès qu'il est ajouté à l'arbre des "
+"scènes."
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid "Bus on which this audio is playing."
@@ -11579,26 +11725,28 @@ msgstr "Si [code]true[/code], l'audio est en cours de lecture."
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid "The [AudioStream] object to be played."
-msgstr ""
+msgstr "L'objet [AudioStream] à jouer."
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid ""
"If [code]true[/code], the playback is paused. You can resume it by setting "
"[code]stream_paused[/code] to [code]false[/code]."
msgstr ""
+"Si [code]true[/code], la lecture est en pause. Vous pouvez la reprendre en "
+"mettant [code]stream_paused[/code] à [code]false[/code]."
#: doc/classes/AudioStreamPlayer.xml
msgid "Volume of sound, in dB."
-msgstr "Volume du son, en dB."
+msgstr "Le volume du son, en décibels (dB)."
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
#: doc/classes/AudioStreamPlayer3D.xml
msgid "Emitted when the audio stops playing."
-msgstr ""
+msgstr "Émis quand l'audio a fini de jouer."
#: doc/classes/AudioStreamPlayer.xml
msgid "The audio will be played only on the first channel."
-msgstr ""
+msgstr "L'audio ne sera joué que sur le premier canal."
#: doc/classes/AudioStreamPlayer.xml
msgid "The audio will be played on all surround channels."
@@ -11610,9 +11758,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
-#, fuzzy
msgid "Plays positional sound in 2D space."
-msgstr "Lecture audio en 2D."
+msgstr "Joue un son localisé dans un espace 2D."
#: doc/classes/AudioStreamPlayer2D.xml
msgid ""
@@ -11625,32 +11772,42 @@ msgid ""
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
+#, fuzzy
msgid "Returns the position in the [AudioStream]."
-msgstr ""
+msgstr "Retourne la position dans le [AudioStream]."
#: doc/classes/AudioStreamPlayer2D.xml
msgid ""
"Returns the [AudioStreamPlayback] object associated with this "
"[AudioStreamPlayer2D]."
msgstr ""
+"Retourne l'objet [AudioStreamPlayback] associé avec cet "
+"[AudioStreamPlayer2D]."
#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
msgid ""
"Plays the audio from the given position [code]from_position[/code], in "
"seconds."
msgstr ""
+"Lance la piste audio au moment donné [code]from_position[/code], en secondes "
+"depuis le début de la piste."
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Dampens audio over distance with this as an exponent."
-msgstr ""
+msgstr "Atténue l'audio avec la distance avec cette valeur comme exposant."
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Maximum distance from which audio is still hearable."
-msgstr ""
+msgstr "Distance maximale à laquelle cette piste audio peut être entendue"
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Base volume without dampening."
@@ -11658,7 +11815,7 @@ msgstr "Volume de base sans amortissement."
#: doc/classes/AudioStreamPlayer3D.xml
msgid "Plays positional sound in 3D space."
-msgstr ""
+msgstr "Joue un son localisé dans un espace 3D."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -11682,6 +11839,16 @@ msgid ""
"Returns the [AudioStreamPlayback] object associated with this "
"[AudioStreamPlayer3D]."
msgstr ""
+"Retourne l'objet [AudioStreamPlayback] associé avec ce [AudioStreamPlayer3D]."
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -11700,6 +11867,9 @@ msgid ""
"logarithmically, or not be affected by distance, effectively disabling "
"attenuation."
msgstr ""
+"Décide si la piste audio doit s'atténuer avec la distance de manière "
+"linéaire, quadratique, logarithmique ou ne pas être affectée par la "
+"distance, désactivant ainsi l'atténuation."
#: doc/classes/AudioStreamPlayer3D.xml
#, fuzzy
@@ -11724,13 +11894,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid "The angle in which the audio reaches cameras undampened."
-msgstr ""
+msgstr "L'angle auquel la piste audio atteint les caméras sans atténuation"
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
"If [code]true[/code], the audio should be dampened according to the "
"direction of the sound."
msgstr ""
+"Si [code]true[/code], le piste audia devrait être atténuée par rapport à la "
+"direction du son."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -11747,12 +11919,16 @@ msgid ""
"Sets the distance from which the [member out_of_range_mode] takes effect. "
"Has no effect if set to 0."
msgstr ""
+"Défini la distance à partir de laquelle le [member out_of_range_mode] prend "
+"effet. N'a aucun effet si la valeur est mise à 0."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
"Decides if audio should pause when source is outside of [member "
"max_distance] range."
msgstr ""
+"Décide si la piste audio devrait être mise en pause quand la source est hors "
+"de portée définie par [member max_distance]."
#: doc/classes/AudioStreamPlayer3D.xml
#, fuzzy
@@ -11777,15 +11953,17 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid "Linear dampening of loudness according to distance."
-msgstr ""
+msgstr "Atténuation linéaire de l'intensité sonore en fonction de la distance."
#: doc/classes/AudioStreamPlayer3D.xml
msgid "Squared dampening of loudness according to distance."
msgstr ""
+"Atténuation quadratique de l'intensité sonore en fonction de la distance."
#: doc/classes/AudioStreamPlayer3D.xml
msgid "Logarithmic dampening of loudness according to distance."
msgstr ""
+"Atténuation logarithmique de l'intensité sonore en fonction de la distance."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -11899,11 +12077,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -12010,12 +12188,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12074,7 +12246,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12143,9 +12315,9 @@ msgstr "La hauteur de la capsule."
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12298,10 +12470,13 @@ msgid ""
msgstr ""
#: doc/classes/BaseButton.xml
+#, fuzzy
msgid ""
"Returns [code]true[/code] if the mouse has entered the button and has not "
"left it yet."
msgstr ""
+"Retourne [code]true[/code] si la souris est entrée dans le bouton mais ne "
+"l'a pas encore quitté."
#: doc/classes/BaseButton.xml
msgid ""
@@ -12318,6 +12493,8 @@ msgid ""
"Determines when the button is considered clicked, one of the [enum "
"ActionMode] constants."
msgstr ""
+"Détermine quand le bouton a été bien cliqué, c'est une des constantes de "
+"[enum ActionMode]."
#: doc/classes/BaseButton.xml
msgid ""
@@ -12341,7 +12518,7 @@ msgstr ""
#: doc/classes/BaseButton.xml
msgid "[ButtonGroup] associated to the button."
-msgstr "[ButtonGroup] associé au bouton."
+msgstr "Le [ButtonGroup] associé au bouton."
#: doc/classes/BaseButton.xml
msgid ""
@@ -12364,13 +12541,15 @@ msgstr ""
#: doc/classes/BaseButton.xml
msgid "[ShortCut] associated to the button."
-msgstr "[ShortCut] associé au bouton."
+msgstr "Le [ShortCut] associé au bouton."
#: doc/classes/BaseButton.xml
msgid ""
"If [code]true[/code], the button will add information about its shortcut in "
"the tooltip."
msgstr ""
+"Si [code]true[/code], le bouton ajoutera des informations sur son raccourci "
+"dans l'infobulle."
#: doc/classes/BaseButton.xml
msgid ""
@@ -12453,23 +12632,18 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
+msgid "Using 3D transforms"
+msgstr "Utilise ça lors des transformations 3D."
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -12480,15 +12654,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
#, fuzzy
@@ -12558,7 +12730,7 @@ msgstr ""
#: doc/classes/Basis.xml
msgid "Returns the inverse of the matrix."
-msgstr ""
+msgstr "Retourne l'inverse de la matrice."
#: doc/classes/Basis.xml
#, fuzzy
@@ -12680,6 +12852,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -12714,6 +12894,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Supprime l’animation avec la touche [code]name[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12756,7 +12941,7 @@ msgstr ""
#: doc/classes/BitmapFont.xml
msgid "Adds a texture to the [BitmapFont]."
-msgstr ""
+msgstr "Ajoute une texture à la [BitmapFont]."
#: doc/classes/BitmapFont.xml
msgid "Clears all the font data and settings."
@@ -12986,17 +13171,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -13038,9 +13221,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -13073,6 +13255,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -13091,7 +13280,7 @@ msgstr "Alignez le texte vers la droite."
#: doc/classes/Button.xml
msgid "Default text [Color] of the [Button]."
-msgstr ""
+msgstr "La [Color] du texte par défaut du [Button]."
#: doc/classes/Button.xml
msgid "Text [Color] used when the [Button] is disabled."
@@ -13433,13 +13622,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera.xml
-#, fuzzy
msgid ""
"Disables [url=https://en.wikipedia.org/wiki/Doppler_effect]Doppler effect[/"
"url] simulation (default)."
msgstr ""
-"Désactive la simulation [url=https://en.wikipedia.org/wiki/"
-"Doppler_effect]effet Doppler[/url] (par défaut)."
+"Désactive la simulation de [url=https://fr.wikipedia.org/wiki/"
+"Effet_Doppler]l'effet Doppler[/url] (par défaut)."
#: doc/classes/Camera.xml
msgid ""
@@ -13481,15 +13669,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -13781,7 +13967,7 @@ msgstr "Aucun indice pour la propriété en cours d'édition."
#: doc/classes/CameraFeed.xml
msgid "Feed supplies RGB images."
-msgstr ""
+msgstr "Le flux fournis des images au format RGB."
#: doc/classes/CameraFeed.xml
msgid "Feed supplies YCbCr images that need to be converted to RGB."
@@ -13794,9 +13980,8 @@ msgid ""
msgstr ""
#: doc/classes/CameraFeed.xml
-#, fuzzy
msgid "Unspecified position."
-msgstr "La position de glissement."
+msgstr "Position non renseignée."
#: doc/classes/CameraFeed.xml
msgid "Camera is mounted at the front of the device."
@@ -13809,6 +13994,7 @@ msgstr ""
#: doc/classes/CameraServer.xml
msgid "Server keeping track of different cameras accessible in Godot."
msgstr ""
+"Le serveur garde la liste des différentes caméras accessibles dans Godot."
#: doc/classes/CameraServer.xml
msgid ""
@@ -13859,11 +14045,10 @@ msgid "The RGBA camera image."
msgstr "L’image de la caméra RGBA."
#: doc/classes/CameraServer.xml
-#, fuzzy
msgid "The [url=https://en.wikipedia.org/wiki/YCbCr]YCbCr[/url] camera image."
msgstr ""
-"Utilise la méthode de compression [url=https://en.wikipedia.org/wiki/"
-"DEFLATE]DEFLATE[/url]."
+"L'image de la caméra au format [url=https://fr.wikipedia.org/wiki/"
+"YCbCr]YCbCr[/url]."
#: doc/classes/CameraServer.xml
msgid "The Y component camera image."
@@ -13933,14 +14118,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -14165,8 +14348,10 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr "Retourne la matrice de transformation de la toile de cet objet."
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
-msgstr "Retourne la position globale de la souris."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the global transform matrix of this item."
@@ -14180,17 +14365,19 @@ msgstr ""
"la toile."
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
-"Retourne la position de la souris par rapport à la position de cet élément."
#: doc/classes/CanvasItem.xml
msgid "Returns the transform matrix of this item."
-msgstr ""
+msgstr "Retourne la matrice de transformation de cet élément."
#: doc/classes/CanvasItem.xml
+#, fuzzy
msgid "Returns the viewport's boundaries as a [Rect2]."
-msgstr ""
+msgstr "Retourne le [Rect2] de la fenêtre d'affichage."
#: doc/classes/CanvasItem.xml
msgid "Returns this item's transform in relation to the viewport."
@@ -14198,7 +14385,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the [World2D] where this item is in."
-msgstr ""
+msgstr "Retourne le [World2D] dans lequel est cet élément."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -14475,8 +14662,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr ""
+#, fuzzy
+msgid "Canvas layers"
+msgstr "Couche de dessin de toile."
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -14525,6 +14713,19 @@ msgstr "L'échelle du calque."
msgid "The layer's transform."
msgstr "Le transform du calque."
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "Émis lorsque le VisibilityNotifier3D quitte la vue d'un [Camera3D]."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr "Teindre toute la toile."
@@ -14607,20 +14808,6 @@ msgstr ""
"En réglant les diverses propriétés de cet objet, il est possible de "
"contrôler le rendu de caractères individuels dans un [RichTextEffect]."
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
#, fuzzy
msgid ""
@@ -14838,7 +15025,7 @@ msgstr ""
#: doc/classes/CheckBox.xml doc/classes/CheckButton.xml
msgid "The [StyleBox] to display as a background."
-msgstr ""
+msgstr "Le [StyleBox] a affiché en arrière-plan."
#: doc/classes/CheckBox.xml
msgid ""
@@ -15082,6 +15269,8 @@ msgstr ""
msgid ""
"Sets [code]property[/code] value of [code]class[/code] to [code]value[/code]."
msgstr ""
+"Définit la valeur de la [code]property[/code] de la [code]class[/code] à "
+"[code]value[/code]."
#: doc/classes/ClassDB.xml
msgid "Returns the names of all the classes available."
@@ -15235,6 +15424,7 @@ msgstr "Retourne si la [code]class[/code] spécifiée est disponible ou non."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr "Retourne le [RID] de l'objet."
@@ -15322,9 +15512,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15333,9 +15523,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15345,12 +15535,12 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
-#, fuzzy
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
-msgstr "Si [code]true[/code], la frontière de la ligne sera anti-aliasée."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
+msgstr ""
#: doc/classes/CollisionObject.xml
msgid ""
@@ -15442,9 +15632,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15453,22 +15643,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -15589,15 +15771,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "Interpolation cubique."
#: doc/classes/CollisionShape.xml
#, fuzzy
@@ -15641,9 +15820,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
#, fuzzy
@@ -15695,19 +15873,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -16097,12 +16272,10 @@ msgid "Beige color."
msgstr "Couleur beige."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Bisque color."
msgstr "Couleur bisque."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Black color."
msgstr "Couleur noire."
@@ -16123,7 +16296,6 @@ msgid "Brown color."
msgstr "Couleur marron."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Burly wood color."
msgstr "Couleur bois robuste."
@@ -16132,7 +16304,6 @@ msgid "Cadet blue color."
msgstr "Couleur bleu cadet."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Chartreuse color."
msgstr "Couleur chartreuse."
@@ -16145,7 +16316,6 @@ msgid "Coral color."
msgstr "Couleur corail."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Cornflower color."
msgstr "Couleur bleuet."
@@ -16154,7 +16324,6 @@ msgid "Corn silk color."
msgstr "Couleur soie de maïs."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Crimson color."
msgstr "Couleur cramoisie."
@@ -16242,7 +16411,6 @@ msgid "Deep sky blue color."
msgstr "Couleur bleu ciel profond."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Dim gray color."
msgstr "Couleur gris pâle."
@@ -16326,7 +16494,6 @@ msgid "Lavender color."
msgstr "Couleur lavande."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Lavender blush color."
msgstr "Couleur blush lavande."
@@ -16400,7 +16567,6 @@ msgid "Lime green color."
msgstr "Couleur vert citron."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Linen color."
msgstr "Couleur lin."
@@ -16409,7 +16575,6 @@ msgid "Magenta color."
msgstr "Couleur magenta."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Maroon color."
msgstr "Couleur marron."
@@ -16460,7 +16625,6 @@ msgid "Mint cream color."
msgstr "Couleur crème menthe."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Misty rose color."
msgstr "Couleur rose brumeuse."
@@ -16469,17 +16633,14 @@ msgid "Moccasin color."
msgstr "Couleur mocassin."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Navajo white color."
msgstr "Couleur blanche Navajo."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Navy blue color."
msgstr "Couleur bleu marine."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Old lace color."
msgstr "Couleur vieille dentelle."
@@ -16488,7 +16649,6 @@ msgid "Olive color."
msgstr "Couleur olive."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Olive drab color."
msgstr "Couleur olive terne."
@@ -16526,7 +16686,6 @@ msgid "Papaya whip color."
msgstr "Couleur de fouet de papaye."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Peach puff color."
msgstr "Couleur pêche bouffie."
@@ -16539,7 +16698,6 @@ msgid "Pink color."
msgstr "Couleur rose."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Plum color."
msgstr "Couleur prune."
@@ -16561,7 +16719,6 @@ msgid "Red color."
msgstr "Couleur rouge."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Rosy brown color."
msgstr "Couleur brun rosé."
@@ -16570,7 +16727,6 @@ msgid "Royal blue color."
msgstr "Couleur bleu royal."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Saddle brown color."
msgstr "Couleur marron selle."
@@ -16604,12 +16760,10 @@ msgid "Sky blue color."
msgstr "Couleur bleu ciel."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Slate blue color."
msgstr "Couleur bleu ardoise."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Slate gray color."
msgstr "Couleur gris ardoise."
@@ -16626,7 +16780,6 @@ msgid "Steel blue color."
msgstr "Couleur bleu acier."
#: doc/classes/Color.xml
-#, fuzzy
msgid "Tan color."
msgstr "Couleur fauve."
@@ -16673,7 +16826,7 @@ msgstr "Couleur marron Web."
#: doc/classes/Color.xml
#, fuzzy
msgid "Web purple color."
-msgstr "Couleur pourpre Web."
+msgstr "Couleur violet Web."
#: doc/classes/Color.xml
msgid "Wheat color."
@@ -16901,7 +17054,7 @@ msgstr ""
#: doc/classes/ColorPickerButton.xml
msgid "[StyleBox] used when the [ColorPickerButton] is disabled."
-msgstr ""
+msgstr "La [StyleBox] utilisée pour les [ColorPickerButton] désactivés."
#: doc/classes/ColorPickerButton.xml
msgid ""
@@ -17154,7 +17307,7 @@ msgstr ""
#: doc/classes/ConfigFile.xml
msgid "Returns [code]true[/code] if the specified section exists."
-msgstr ""
+msgstr "Retourne [code]true[/code] si la section spécifiée existe."
#: doc/classes/ConfigFile.xml
msgid "Returns [code]true[/code] if the specified section-key pair exists."
@@ -17320,20 +17473,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Touche contrôle."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -17433,8 +17583,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -18367,19 +18517,19 @@ msgstr ""
#: doc/classes/Control.xml
msgid "Emitted when the node gains keyboard focus."
-msgstr ""
+msgstr "Émis quand le nœud prend le focus du clavier."
#: doc/classes/Control.xml
msgid "Emitted when the node loses keyboard focus."
-msgstr ""
+msgstr "Émis quand le nœud perd le focus du clavier."
#: doc/classes/Control.xml
msgid "Emitted when the node receives an [InputEvent]."
-msgstr ""
+msgstr "Émis quand le nœud reçoit un [InputEvent]."
#: doc/classes/Control.xml
msgid "Emitted when the node's minimum size changes."
-msgstr ""
+msgstr "Émis quand la taille minimale du nœud change."
#: doc/classes/Control.xml
#, fuzzy
@@ -18862,7 +19012,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml
msgid "CPU-based 3D particle emitter."
-msgstr ""
+msgstr "Émetteur de particules 3D sur CPU."
#: doc/classes/CPUParticles.xml
msgid ""
@@ -18955,7 +19105,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Angular velocity randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de vélocité angulaire."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -18969,7 +19119,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Animation offset randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire du décalage de l'animation."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -18983,7 +19133,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Animation speed randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de la vitesse de l'animation."
#: doc/classes/CPUParticles.xml
msgid ""
@@ -19008,7 +19158,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "The rate at which particles lose velocity."
-msgstr ""
+msgstr "Le vitesse à la laquelle les particules perdent leur vitesse."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#, fuzzy
@@ -19025,11 +19175,13 @@ msgstr "Ratio d’amortissement aléatoire."
#: doc/classes/ParticlesMaterial.xml
msgid "Unit vector specifying the particles' emission direction."
msgstr ""
+"Le vecteur unitaire définissant la direction d'émission des particules."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
msgid "Particle draw order. Uses [enum DrawOrder] values."
msgstr ""
+"L'ordre d'affichage des particules. Utilise les valeurs de [enum DrawOrder]."
#: doc/classes/CPUParticles.xml
msgid ""
@@ -19170,7 +19322,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Initial velocity randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de la vélocité initiale."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
@@ -19183,7 +19335,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Particle lifetime randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de la durée de vie d'une particule."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -19198,7 +19350,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Linear acceleration randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire pour l'accélération linéaire."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
@@ -19236,7 +19388,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Orbital velocity randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de la vélocité orbitale."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles2D.xml
@@ -19257,12 +19409,12 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Radial acceleration randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de l'accélération radiale."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles2D.xml
msgid "Emission lifetime randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de durée de vie de l'émission."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -19275,9 +19427,8 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
-#, fuzzy
msgid "Scale randomness ratio."
-msgstr "Rapport d'aléa d'échelle."
+msgstr "Facteur d'échelle aléatoire."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles2D.xml
@@ -19307,7 +19458,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Tangential acceleration randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de l'accélération tangentielle."
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
@@ -19457,7 +19608,7 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml
msgid "CPU-based 2D particle emitter."
-msgstr ""
+msgstr "Émetteur de particules 2D sur CPU."
#: doc/classes/CPUParticles2D.xml
msgid ""
@@ -19469,12 +19620,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -19639,8 +19784,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -19678,7 +19823,7 @@ msgstr ""
#: doc/classes/CryptoKey.xml
msgid "A cryptographic key (RSA)."
-msgstr ""
+msgstr "La clé cryptographique (RSA)."
#: doc/classes/CryptoKey.xml
msgid ""
@@ -19729,10 +19874,25 @@ msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
msgid "A CSG Box shape."
-msgstr ""
+msgstr "Une forme CSG en boite."
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -19764,7 +19924,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19775,7 +19940,12 @@ msgstr "Une forme de cylindre CSG."
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19823,7 +19993,13 @@ msgstr "Une forme de maillage CSG qui utilise une ressource de maillage."
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -19847,7 +20023,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -19928,9 +20109,14 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-#, fuzzy
-msgid "The point array that defines the 2D polygon that is extruded."
-msgstr "Un tableau de points qui définit la forme que nous allons extruder."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
+msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
#, fuzzy
@@ -19956,6 +20142,8 @@ msgstr ""
msgid ""
"The [member polygon] shape is extruded by rotating it around the Y axis."
msgstr ""
+"La forme [member polygon] est extrudée en la faisant pivoter autour de l'axe "
+"Y."
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -20005,7 +20193,12 @@ msgstr "Classe de base pour les primitives CSG."
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -20019,10 +20212,13 @@ msgstr "La classe de base CSG."
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Il s’agit de la classe de base CSG qui fournit le soutien de l’opération CSG "
-"aux différents nœuds CSG de Godot."
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
#: doc/classes/SoftBody.xml
@@ -20129,9 +20325,14 @@ msgid "A CSG Sphere shape."
msgstr "Une forme de Sphère CSG."
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Ce nœud vous permet de créer une sphère à utiliser avec le système CSG."
#: modules/csg/doc_classes/CSGSphere.xml
msgid "The material used to render the sphere."
@@ -20161,10 +20362,14 @@ msgid "A CSG Torus shape."
msgstr "Une forme de Tore CSG."
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"Ce nœud vous permet de créer un tore pour une utilisation avec le système "
-"CSG."
#: modules/csg/doc_classes/CSGTorus.xml
msgid "The inner radius of the torus."
@@ -20210,13 +20415,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
#, fuzzy
msgid "Returns a new instance of the script."
@@ -20332,9 +20530,8 @@ msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
msgstr ""
#: doc/classes/CubeMesh.xml
-#, fuzzy
msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
-msgstr "Générer un cuboïde aligné sur l’axe [PrimitiveMesh]."
+msgstr "Générer un cuboïde [PrimitiveMesh] aligné sur un axe."
#: doc/classes/CubeMesh.xml
msgid ""
@@ -20392,6 +20589,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -20946,7 +21151,7 @@ msgstr ""
#: doc/classes/CylinderShape.xml
msgid "Cylinder shape for collisions."
-msgstr ""
+msgstr "Une forme cylindrique pour les collisions."
#: doc/classes/CylinderShape.xml
msgid "The cylinder's height."
@@ -21106,11 +21311,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -21168,8 +21370,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -21178,7 +21380,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -21207,13 +21413,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -21340,12 +21539,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -21625,7 +21818,7 @@ msgstr ""
#: doc/classes/DynamicFont.xml
msgid "Adds a fallback font."
-msgstr ""
+msgstr "Ajouter une police de repli."
#: doc/classes/DynamicFont.xml
msgid ""
@@ -21732,11 +21925,11 @@ msgstr "Espacement en bas."
#: doc/classes/DynamicFont.xml
msgid "Spacing for each character."
-msgstr ""
+msgstr "L'espace entre chaque caractère."
#: doc/classes/DynamicFont.xml
msgid "Spacing for the space character."
-msgstr ""
+msgstr "L'espacement pour le caractère d'espace."
#: doc/classes/DynamicFontData.xml
msgid "Used with [DynamicFont] to describe the location of a font file."
@@ -22393,13 +22586,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -22431,8 +22617,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -22465,8 +22651,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -22577,11 +22763,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -22686,7 +22869,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorSettings] instance."
-msgstr ""
+msgstr "Retourne l'instance [EditorSettings] de l'éditeur."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -22723,11 +22906,11 @@ msgstr ""
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorFileSystem] instance."
-msgstr ""
+msgstr "Retourne l'instance [EditorFileSystem] de l'éditeur."
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorResourcePreview] instance."
-msgstr ""
+msgstr "Retourne l'instance [EditorResourcePreview] de l'éditeur."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -22745,7 +22928,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorSelection] instance."
-msgstr ""
+msgstr "Retourne l'instance [EditorSelection] de l'éditeur."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -22850,12 +23033,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -23205,7 +23382,7 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
msgid "Minimizes the bottom panel."
-msgstr ""
+msgstr "Agrandit le panneau du bas."
#: doc/classes/EditorPlugin.xml
msgid "Makes a specific item in the bottom panel visible."
@@ -23679,7 +23856,7 @@ msgstr ""
#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml
msgid "FBX 3D asset importer."
-msgstr ""
+msgstr "Importateur de ressource 3D FBX."
#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml
msgid ""
@@ -23741,13 +23918,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -23800,7 +23970,7 @@ msgstr ""
#: doc/classes/EditorScript.xml
msgid "Returns the [EditorInterface] singleton instance."
-msgstr ""
+msgstr "Retourne l'unique instance de [EditorInterface]."
#: doc/classes/EditorScript.xml
msgid "Returns the Editor's currently active scene."
@@ -24171,13 +24341,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -24508,9 +24671,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -24547,7 +24709,7 @@ msgstr ""
#: doc/classes/EditorVCSInterface.xml
msgid "A file is left unmerged."
-msgstr ""
+msgstr "Le fichier a été laissé non-fusionné."
#: doc/classes/EditorVCSInterface.xml
msgid "A commit is encountered from the commit area."
@@ -24832,31 +24994,33 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"environment_and_post_processing.html"
+msgid "Environment and post-processing"
+msgstr "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -24916,12 +25080,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -25147,7 +25313,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid "The glow blending mode."
-msgstr ""
+msgstr "Le mode de mélange pour les lueurs."
#: doc/classes/Environment.xml
msgid ""
@@ -25442,7 +25608,7 @@ msgstr ""
#: doc/classes/Environment.xml
#, fuzzy
msgid "Filmic tonemapper operator."
-msgstr "Opérateur de tonte de film."
+msgstr "Opérateur de mappage de tons filmique."
#: doc/classes/Environment.xml
msgid ""
@@ -25462,15 +25628,15 @@ msgstr ""
#: doc/classes/Environment.xml
msgid "Low depth-of-field blur quality (fastest)."
-msgstr ""
+msgstr "Qualité basse du flou de l'effet de profondeur (le plus rapide)."
#: doc/classes/Environment.xml
msgid "Medium depth-of-field blur quality."
-msgstr ""
+msgstr "Qualité moyenne du flou de l'effet de profondeur."
#: doc/classes/Environment.xml
msgid "High depth-of-field blur quality (slowest)."
-msgstr ""
+msgstr "Qualité haute du flou de l'effet de profondeur (le plus lent)."
#: doc/classes/Environment.xml
msgid "No blur for the screen-space ambient occlusion effect (fastest)."
@@ -25577,9 +25743,8 @@ msgid "Returns the external texture name."
msgstr "Retourne la texture de la tuile."
#: doc/classes/ExternalTexture.xml
-#, fuzzy
msgid "External texture size."
-msgstr "Retourne la taille de texture."
+msgstr "La taille de la texture externe."
#: doc/classes/File.xml
msgid "Type to handle file reading and writing operations."
@@ -25621,6 +25786,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -26023,10 +26192,13 @@ msgid ""
"Uses the [url=https://facebook.github.io/zstd/]Zstandard[/url] compression "
"method."
msgstr ""
+"Utilise la méthode de compression [url=https://facebook.github.io/"
+"zstd/]Zstandard[/url]."
#: doc/classes/File.xml
msgid "Uses the [url=https://www.gzip.org/]gzip[/url] compression method."
msgstr ""
+"Utilise la méthode de compression [url=https://www.gzip.org/]gzip[/url]."
#: doc/classes/FileDialog.xml
msgid "Dialog for selecting files or directories in the filesystem."
@@ -26183,7 +26355,7 @@ msgstr ""
#: doc/classes/FileDialog.xml
msgid "The color modulation applied to the file icon."
-msgstr ""
+msgstr "La couleur de modulation appliquée à l'icône de fichier."
#: doc/classes/FileDialog.xml
msgid ""
@@ -26238,12 +26410,18 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+#, fuzzy
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
+"https://fr.wikipedia.org/wiki/"
+"IEEE_754#Format_double_pr%C3%A9cision_%2864_bits%29"
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+#, fuzzy
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
+"https://fr.wikipedia.org/wiki/"
+"IEEE_754#Format_simple_pr%C3%A9cision_%2832_bits%29"
#: doc/classes/float.xml
msgid ""
@@ -26269,6 +26447,24 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "Classe de base pour les conteneurs de boîtes."
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Retourne la position de défilement actuelle."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -26392,9 +26588,8 @@ msgid ""
msgstr ""
#: doc/classes/FuncRef.xml
-#, fuzzy
msgid "The name of the referenced function."
-msgstr "Le nom de l’os attaché."
+msgstr "Le nom de la fonction référencée."
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
@@ -26410,20 +26605,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -26493,13 +26674,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -27566,7 +27740,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -28011,7 +28185,7 @@ msgstr ""
#: doc/classes/GraphEdit.xml
msgid "Removes all connections between nodes."
-msgstr ""
+msgstr "Supprime toutes les connexions entre les nœuds."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -28120,11 +28294,11 @@ msgstr ""
#: doc/classes/GraphEdit.xml
msgid "The snapping distance in pixels."
-msgstr ""
+msgstr "La distance de magnétisation en pixels."
#: doc/classes/GraphEdit.xml
msgid "If [code]true[/code], enables snapping."
-msgstr ""
+msgstr "Si [code]true[/code], la magnétisation est activé."
#: doc/classes/GraphEdit.xml
msgid "The current zoom value."
@@ -28216,11 +28390,11 @@ msgstr ""
#: doc/classes/GraphEdit.xml
msgid "Color of major grid lines."
-msgstr ""
+msgstr "La couleur des lignes principales de la grille."
#: doc/classes/GraphEdit.xml
msgid "Color of minor grid lines."
-msgstr ""
+msgstr "La couleur des lignes secondaires de la grille."
#: doc/classes/GraphEdit.xml
msgid "The fill color of the selection rectangle."
@@ -28614,12 +28788,14 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
#, fuzzy
msgid "The horizontal separation of children nodes."
msgstr "La séparation horizontale des nœuds enfants."
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
#, fuzzy
msgid "The vertical separation of children nodes."
msgstr "La séparation verticale des nœuds enfants."
@@ -28647,10 +28823,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -28677,11 +28851,11 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Returns an individual bit on the [member collision_layer]."
-msgstr ""
+msgstr "Retourne un seul bit de [member collision_layer]."
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Returns an individual bit on the [member collision_mask]."
-msgstr ""
+msgstr "Retourne un seul bit de [member collision_mask]."
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
@@ -28696,6 +28870,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+"Renvoie la texture de l’atlas de police de caractères à l’index [code]idx[/"
+"code]."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -28712,11 +28895,11 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Sets an individual bit on the [member collision_layer]."
-msgstr "Définit un bit individuel sur le [member collision_layer]."
+msgstr "Définit un seul bit de [member collision_layer]."
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Sets an individual bit on the [member collision_mask]."
-msgstr "Définit un bit individuel sur le [member collision_mask]."
+msgstr "Définit un seul bit de [member collision_mask]."
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
@@ -28823,7 +29006,7 @@ msgstr ""
#: doc/classes/HashingContext.xml
msgid "Context to compute cryptographic hashes over multiple iterations."
msgstr ""
-"Contexte pour calculer les hachages cryptographiques sur de multiples "
+"Le contexte pour calculer les hachages cryptographiques sur de multiples "
"itérations."
#: doc/classes/HashingContext.xml
@@ -28923,6 +29106,16 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal flow container."
+msgstr "Conteneur de boîte horizontale."
+
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal version of [FlowContainer]."
+msgstr "Conteneur fractionné horizontal."
+
#: doc/classes/HingeJoint.xml
#, fuzzy
msgid "A hinge between two 3D PhysicsBodies."
@@ -29203,7 +29396,6 @@ msgid ""
msgstr ""
#: doc/classes/HSplitContainer.xml
-#, fuzzy
msgid "Horizontal split container."
msgstr "Conteneur fractionné horizontal."
@@ -29269,21 +29461,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -29373,7 +29550,7 @@ msgstr ""
#: doc/classes/HTTPClient.xml
msgid "Reads one chunk from the response."
-msgstr ""
+msgstr "Lit une partie de la réponse."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -30075,13 +30252,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr "Annule la demande en cours."
@@ -30203,7 +30373,7 @@ msgstr "Échec de la demande (actuellement inutilisé)."
#: doc/classes/HTTPRequest.xml
msgid "HTTPRequest couldn't open the download file."
-msgstr ""
+msgstr "[HTTPRequest] n'a pu ouvrir le fichier téléchargé."
#: doc/classes/HTTPRequest.xml
msgid "HTTPRequest couldn't write to the download file."
@@ -30232,11 +30402,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -30279,7 +30446,7 @@ msgstr ""
#: doc/classes/Image.xml
msgid "Removes the image's mipmaps."
-msgstr ""
+msgstr "Retire les mipmaps de l'image."
#: doc/classes/Image.xml
msgid ""
@@ -30295,7 +30462,7 @@ msgstr "Convertit le format de l’image. Voir les constantes [enum Format]."
#: doc/classes/Image.xml
msgid "Copies [code]src[/code] image to this image."
-msgstr ""
+msgstr "Copie l'image de [code]src[/code] dans cette image."
#: doc/classes/Image.xml
msgid ""
@@ -30360,11 +30527,11 @@ msgstr "Mélange les pixels à faible alpha avec les pixels à proximité."
#: doc/classes/Image.xml
msgid "Flips the image horizontally."
-msgstr ""
+msgstr "Inverse une image horizontalement."
#: doc/classes/Image.xml
msgid "Flips the image vertically."
-msgstr ""
+msgstr "Inverse une image verticalement."
#: doc/classes/Image.xml
msgid ""
@@ -30390,7 +30557,7 @@ msgstr ""
#: doc/classes/Image.xml
msgid "Returns the image's height."
-msgstr ""
+msgstr "Retourne la hauteur de l'image."
#: doc/classes/Image.xml
msgid ""
@@ -30432,7 +30599,7 @@ msgstr ""
#: doc/classes/Image.xml
msgid "Returns the image's width."
-msgstr ""
+msgstr "Retourne la largeur de l'image."
#: doc/classes/Image.xml
msgid "Returns [code]true[/code] if the image has generated mipmaps."
@@ -30926,9 +31093,8 @@ msgid "Image stores alpha in a single bit."
msgstr ""
#: doc/classes/Image.xml
-#, fuzzy
msgid "Image uses alpha."
-msgstr "L'image utilise l'alpha."
+msgstr "L'image utilise l'opacité."
#: doc/classes/Image.xml
msgid "Use S3TC compression."
@@ -30966,6 +31132,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -31128,11 +31298,11 @@ msgstr ""
#: doc/classes/ImmediateGeometry.xml
msgid "The current drawing color."
-msgstr ""
+msgstr "L'actuelle couleur pour dessiner."
#: doc/classes/ImmediateGeometry.xml
msgid "The next vertex's normal."
-msgstr ""
+msgstr "La normale du sommet suivant."
#: doc/classes/ImmediateGeometry.xml
msgid "The next vertex's tangent (and binormal facing)."
@@ -31140,7 +31310,7 @@ msgstr "La tangente du sommet suivant (et l'orientation binomiale)."
#: doc/classes/ImmediateGeometry.xml
msgid "The next vertex's UV."
-msgstr ""
+msgstr "L'UV du sommet suivant."
#: doc/classes/ImmediateGeometry.xml
msgid "The next vertex's second layer UV."
@@ -31159,7 +31329,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -31389,8 +31559,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31421,8 +31591,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31579,7 +31749,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -31704,7 +31879,7 @@ msgstr ""
#: doc/classes/Input.xml
msgid "Help cursor. Usually a question mark."
-msgstr ""
+msgstr "Curseur d'aide. Généralement un point d'interrogation."
#: doc/classes/InputEvent.xml
msgid "Generic input event."
@@ -31714,15 +31889,9 @@ msgstr "Évènement d’entrée générique."
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -31765,8 +31934,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31797,8 +31966,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31843,10 +32012,8 @@ msgstr ""
#: doc/classes/InputEventAction.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
+msgid "InputEvent: Actions"
+msgstr "Type d’évènement d’entrée pour les actions."
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -32016,18 +32183,17 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
-msgstr ""
+#, fuzzy
+msgid "Wikipedia Piano Key Frequencies List"
+msgstr "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
#: doc/classes/InputEventMIDI.xml
msgid ""
@@ -32110,17 +32276,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -32132,13 +32302,6 @@ msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
"Contient des informations sur les clics de souris. Voir [method Node._input]."
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -32176,12 +32339,17 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
+#, fuzzy
+msgid "Mouse and input coordinates"
+msgstr "Demi-décalage sur la coordonnée X."
+
+#: doc/classes/InputEventMouseMotion.xml
msgid ""
"Represents the pressure the user puts on the pen. Ranges from [code]0.0[/"
"code] to [code]1.0[/code]."
@@ -32310,24 +32478,17 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
#: doc/classes/InputMap.xml
msgid "Removes an [InputEvent] from an action."
-msgstr ""
+msgstr "Retire un [InputEvent] d'une action."
#: doc/classes/InputMap.xml
msgid "Removes all events from an action."
-msgstr ""
+msgstr "Retire tous les événements d'une action."
#: doc/classes/InputMap.xml
#, fuzzy
@@ -32354,7 +32515,7 @@ msgstr ""
#: doc/classes/InputMap.xml
msgid "Removes an action from the [InputMap]."
-msgstr ""
+msgstr "Retirer une action de [InputMap]."
#: doc/classes/InputMap.xml
msgid ""
@@ -32531,7 +32692,7 @@ msgstr ""
#: doc/classes/InterpolatedCamera.xml
msgid "The target's [NodePath]."
-msgstr ""
+msgstr "La cible du [NodePath]."
#: doc/classes/IP.xml
msgid "Internet protocol (IP) support functions such as DNS resolution."
@@ -32693,7 +32854,7 @@ msgstr ""
#: doc/classes/ItemList.xml
msgid "Removes all items from the list."
-msgstr ""
+msgstr "Retire tous les éléments de la liste."
#: doc/classes/ItemList.xml
msgid ""
@@ -32888,7 +33049,7 @@ msgstr ""
#: doc/classes/ItemList.xml
msgid "Ensures there are no items selected."
-msgstr ""
+msgstr "S'assure qu'aucun élément n'est sélectionné."
#: doc/classes/ItemList.xml
msgid ""
@@ -33004,7 +33165,7 @@ msgstr ""
#: doc/classes/ItemList.xml
msgid "Icon is drawn above the text."
-msgstr ""
+msgstr "L'icône est affiché au-dessus du texte."
#: doc/classes/ItemList.xml
msgid "Icon is drawn to the left of the text."
@@ -33012,7 +33173,7 @@ msgstr ""
#: doc/classes/ItemList.xml
msgid "Only allow selecting a single item."
-msgstr ""
+msgstr "Ne permet de sélectionner qu'un seul élément."
#: doc/classes/ItemList.xml
msgid "Allows selecting multiple items by holding Ctrl or Shift."
@@ -33020,7 +33181,7 @@ msgstr ""
#: doc/classes/ItemList.xml doc/classes/Tree.xml
msgid "Default text [Color] of the item."
-msgstr ""
+msgstr "La [Color] par défaut du texte de l'élément."
#: doc/classes/ItemList.xml doc/classes/Tree.xml
msgid "Text [Color] used when the item is selected."
@@ -33101,15 +33262,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -33157,6 +33309,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -33217,15 +33392,12 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
-msgstr ""
+msgstr "La classe parente de tous les joints 3D."
#: doc/classes/Joint.xml
msgid ""
@@ -33236,9 +33408,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -33294,7 +33465,7 @@ msgstr ""
#: doc/classes/JSON.xml
msgid "Helper class for parsing JSON data."
-msgstr ""
+msgstr "La classe d'aide pour interpréter les données JSON."
#: doc/classes/JSON.xml
msgid ""
@@ -33315,7 +33486,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -33325,18 +33500,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -33488,11 +33679,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -33656,15 +33844,15 @@ msgstr ""
#: doc/classes/KinematicBody.xml
msgid "Lock the body's X axis movement."
-msgstr ""
+msgstr "Verrouiller l'axe X du déplacement du corps."
#: doc/classes/KinematicBody.xml
msgid "Lock the body's Y axis movement."
-msgstr ""
+msgstr "Verrouiller l'axe Y du déplacement du corps."
#: doc/classes/KinematicBody.xml
msgid "Lock the body's Z axis movement."
-msgstr ""
+msgstr "Verrouiller l'axe Z du déplacement du corps."
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
msgid ""
@@ -33754,10 +33942,8 @@ msgstr ""
#: doc/classes/KinematicBody2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
+msgstr "Nœud 2D du corps cinématique."
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -33934,7 +34120,7 @@ msgstr ""
#: doc/classes/KinematicCollision2D.xml
msgid "Collision data for [KinematicBody2D] collisions."
-msgstr ""
+msgstr "Les données des collisions de [KinematicBody2D]."
#: doc/classes/KinematicCollision2D.xml
msgid ""
@@ -33989,7 +34175,7 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Returns the font size in pixels."
-msgstr ""
+msgstr "Retourne la taille de la police en pixels."
#: doc/classes/Label.xml
msgid ""
@@ -34041,7 +34227,7 @@ msgstr ""
#: doc/classes/Label.xml
msgid "The text to display on screen."
-msgstr ""
+msgstr "Le texte à afficher à l'écran."
#: doc/classes/Label.xml
msgid "If [code]true[/code], all the text displays as UPPERCASE."
@@ -34059,15 +34245,15 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Align rows to the left (default)."
-msgstr ""
+msgstr "Aligne les lignes à gauche (défaut)."
#: doc/classes/Label.xml
msgid "Align rows centered."
-msgstr "Alignez les rangées au centre."
+msgstr "Centre les lignes."
#: doc/classes/Label.xml
msgid "Align rows to the right."
-msgstr "Alignez les rangées à droite."
+msgstr "Aligne les lignes à droite."
#: doc/classes/Label.xml
msgid "Expand row whitespaces to fit the width."
@@ -34091,11 +34277,11 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Default text [Color] of the [Label]."
-msgstr ""
+msgstr "La [Color] par défaut du texte du [Label]."
#: doc/classes/Label.xml
msgid "[Color] of the text's shadow effect."
-msgstr ""
+msgstr "La [Color] de l'ombre du texte."
#: doc/classes/Label.xml
msgid "The tint of [Font]'s outline. See [member DynamicFont.outline_color]."
@@ -34121,11 +34307,11 @@ msgstr "Le décalage vertical de l'ombre du texte."
#: doc/classes/Label.xml
msgid "[Font] used for the [Label]'s text."
-msgstr ""
+msgstr "[Font] utilisée pour le texte du [Label]."
#: doc/classes/Label.xml
msgid "Background [StyleBox] for the [Label]."
-msgstr ""
+msgstr "Le [StyleBox] d'arrière-plan pour le [Label]."
#: doc/classes/LargeTexture.xml
msgid ""
@@ -34180,11 +34366,11 @@ msgstr ""
#: doc/classes/LargeTexture.xml
msgid "Sets the size of this [LargeTexture]."
-msgstr ""
+msgstr "Définit la taille de cette [LargeTexture]."
#: doc/classes/Light.xml
msgid "Provides a base class for different kinds of light nodes."
-msgstr ""
+msgstr "Fourni une classe commune aux différents types de nœuds de lumière."
#: doc/classes/Light.xml
msgid ""
@@ -34194,6 +34380,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -34417,13 +34607,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr "La [Color] de Light2D."
@@ -34431,15 +34614,18 @@ msgstr "La [Color] de Light2D."
#: doc/classes/Light2D.xml
msgid "If [code]true[/code], Light2D will only appear when editing the scene."
msgstr ""
+"Si [code]true[/code], la Light2D n'apparaitra que dans l'éditeur de scène."
#: doc/classes/Light2D.xml
msgid "If [code]true[/code], Light2D will emit light."
-msgstr ""
+msgstr "Si [code]true[/code], la Light2D émettra de la lumière."
#: doc/classes/Light2D.xml
msgid ""
"The Light2D's energy value. The larger the value, the stronger the light."
msgstr ""
+"L'énergie de la Light2D. Plus la valeur est élevée, plus la lumière est "
+"forte."
#: doc/classes/Light2D.xml
msgid "The Light2D's mode. See [enum Mode] constants for values."
@@ -34514,7 +34700,7 @@ msgstr ""
#: doc/classes/Light2D.xml
msgid "The [code]texture[/code]'s scale factor."
-msgstr ""
+msgstr "Le facteur d'échelle de la [code]texture[/code]."
#: doc/classes/Light2D.xml
msgid ""
@@ -34734,9 +34920,8 @@ msgid "The line's joints will be rounded."
msgstr ""
#: doc/classes/Line2D.xml
-#, fuzzy
msgid "Don't draw a line cap."
-msgstr "Ne pas dessiner de limite de ligne."
+msgstr "Ne pas dessiner les bords de la ligne."
#: doc/classes/Line2D.xml
msgid "Draws the line cap as a box."
@@ -35066,11 +35251,11 @@ msgstr ""
#: doc/classes/LineEdit.xml
msgid "Font color when editing is disabled."
-msgstr ""
+msgstr "La couleur de police quand l'édition est désactivée."
#: doc/classes/LineEdit.xml
msgid "Color of the selection rectangle."
-msgstr ""
+msgstr "La couleur du rectangle de sélection."
#: doc/classes/LineEdit.xml
msgid ""
@@ -35103,7 +35288,7 @@ msgstr ""
#: doc/classes/LineShape2D.xml
msgid "Line shape for 2D collisions."
-msgstr ""
+msgstr "La forme en ligne pour les collisions 2D."
#: doc/classes/LineShape2D.xml
msgid ""
@@ -35137,24 +35322,28 @@ msgstr ""
msgid ""
"Determines when to show the underline. See [enum UnderlineMode] for options."
msgstr ""
+"Détermine quand une ligne sous le texte est affichée. Voir [enum "
+"UnderlineMode] pour les possibilités."
#: doc/classes/LinkButton.xml
msgid "The LinkButton will always show an underline at the bottom of its text."
-msgstr ""
+msgstr "Le LinkButton affichera toujours une ligne sous le texte."
#: doc/classes/LinkButton.xml
msgid ""
"The LinkButton will show an underline at the bottom of its text when the "
"mouse cursor is over it."
msgstr ""
+"Le LinkButton affichera une ligne sous le texte quand il sera survolé pour "
+"le curseur de la souris."
#: doc/classes/LinkButton.xml
msgid "The LinkButton will never show an underline at the bottom of its text."
-msgstr ""
+msgstr "Le LinkButton n'affichera jamais de ligne sous le texte."
#: doc/classes/LinkButton.xml
msgid "Default text [Color] of the [LinkButton]."
-msgstr ""
+msgstr "La [Color] par défaut du texte pour le [LinkButton]."
#: doc/classes/LinkButton.xml
msgid ""
@@ -35165,11 +35354,11 @@ msgstr ""
#: doc/classes/LinkButton.xml
msgid "Text [Color] used when the [LinkButton] is being hovered."
-msgstr ""
+msgstr "La [Color] de texte utilisée quand le [LinkButton] est survolé."
#: doc/classes/LinkButton.xml
msgid "Text [Color] used when the [LinkButton] is being pressed."
-msgstr ""
+msgstr "La [Color] de texte utilisée quand le [LinkButton] est pressé."
#: doc/classes/LinkButton.xml
msgid "The vertical space between the baseline of text and the underline."
@@ -35177,7 +35366,7 @@ msgstr ""
#: doc/classes/LinkButton.xml
msgid "[Font] of the [LinkButton]'s text."
-msgstr ""
+msgstr "La [Font] du texte du [LinkButton]."
#: doc/classes/LinkButton.xml
msgid ""
@@ -35203,7 +35392,7 @@ msgstr ""
#: doc/classes/Listener.xml
msgid "Returns the listener's global orthonormalized [Transform]."
-msgstr ""
+msgstr "Retourne la [Transform] globale orthonormale de l'écouteur."
#: doc/classes/Listener.xml
msgid ""
@@ -35307,7 +35496,7 @@ msgstr ""
#: doc/classes/MainLoop.xml
msgid "Called before the program exits."
-msgstr ""
+msgstr "Appelé avant que le programme se termine."
#: doc/classes/MainLoop.xml
msgid ""
@@ -35461,6 +35650,10 @@ msgid ""
"crash.\n"
"Implemented on desktop platforms if the crash handler is enabled."
msgstr ""
+"Notification reçue depuis le gestionnaire de plantage de Godot quand le "
+"moteur est sur le point de planter.\n"
+"Implémenté sur les environnements de bureau si le gestionnaire de plantage "
+"est activé."
#: doc/classes/MainLoop.xml doc/classes/Node.xml
msgid ""
@@ -35474,12 +35667,17 @@ msgid ""
"Notification received from the OS when the app is resumed.\n"
"Specific to the Android platform."
msgstr ""
+"Notification reçue du système d'exploitation une fois de retour sur "
+"l'application.\n"
+"Spécifique à la plateforme Android."
#: doc/classes/MainLoop.xml doc/classes/Node.xml
msgid ""
"Notification received from the OS when the app is paused.\n"
"Specific to the Android platform."
msgstr ""
+"Notification du système d'exploitation quand l'app est mise en pause.\n"
+"Spécifique à la plateforme Android."
#: doc/classes/MarginContainer.xml
msgid "Simple margin container."
@@ -35528,24 +35726,30 @@ msgid ""
msgstr ""
#: doc/classes/Marshalls.xml
+#, fuzzy
msgid "Data transformation (marshalling) and encoding helpers."
-msgstr ""
+msgstr "Transformation de données (marshalling) et assistants d'encodage."
#: doc/classes/Marshalls.xml
msgid "Provides data transformation and encoding utility functions."
msgstr ""
#: doc/classes/Marshalls.xml
+#, fuzzy
msgid ""
"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
"[code]base64_str[/code]."
msgstr ""
+"Renvoie un [PoolByteArray] décodé correspondant à la chaîne de caractères "
+"encodée en Base64 [code]base64_str[/code]."
#: doc/classes/Marshalls.xml
msgid ""
"Returns a decoded string corresponding to the Base64-encoded string "
"[code]base64_str[/code]."
msgstr ""
+"Renvoie une chaîne de caractères décodée qui correspond à la chaîne de "
+"caractères encodée en Base64 [code]base64_str[/code]."
#: doc/classes/Marshalls.xml
msgid ""
@@ -35657,7 +35861,7 @@ msgstr ""
#: doc/classes/MenuButton.xml
msgid "Default text [Color] of the [MenuButton]."
-msgstr ""
+msgstr "La [Color] par défaut du texte du [MenuButton]."
#: doc/classes/MenuButton.xml
msgid "Text [Color] used when the [MenuButton] is disabled."
@@ -35684,7 +35888,7 @@ msgstr ""
#: doc/classes/MenuButton.xml
msgid "[Font] of the [MenuButton]'s text."
-msgstr ""
+msgstr "La [Font] du texte du [MenuButton]."
#: doc/classes/MenuButton.xml
msgid "[StyleBox] used when the [MenuButton] is disabled."
@@ -35703,7 +35907,7 @@ msgstr ""
#: doc/classes/MenuButton.xml
msgid "Default [StyleBox] for the [MenuButton]."
-msgstr ""
+msgstr "Le [StyleBox] par défaut pour [MenuButton]."
#: doc/classes/MenuButton.xml
msgid "[StyleBox] used when the [MenuButton] is being pressed."
@@ -35839,32 +36043,37 @@ msgid ""
msgstr ""
#: doc/classes/Mesh.xml
+#, fuzzy
msgid "Mesh array contains normals."
-msgstr ""
+msgstr "Un maillage de points contient des normales."
#: doc/classes/Mesh.xml
+#, fuzzy
msgid "Mesh array contains tangents."
-msgstr ""
+msgstr "Un maillage de points contient des tangentes."
#: doc/classes/Mesh.xml
+#, fuzzy
msgid "Mesh array contains colors."
-msgstr ""
+msgstr "Un maillage de points contient les couleurs."
#: doc/classes/Mesh.xml
+#, fuzzy
msgid "Mesh array contains UVs."
-msgstr ""
+msgstr "Un maillage de points contient les UV."
#: doc/classes/Mesh.xml
msgid "Mesh array contains second UV."
-msgstr ""
+msgstr "Un maillage de points contient les UV secondaires."
#: doc/classes/Mesh.xml
+#, fuzzy
msgid "Mesh array contains bones."
-msgstr ""
+msgstr "Un maillage de points contient les os."
#: doc/classes/Mesh.xml
msgid "Mesh array contains bone weights."
-msgstr ""
+msgstr "Un maillage de points contient les poids des os."
#: doc/classes/Mesh.xml
msgid "Mesh array uses indices."
@@ -35924,12 +36133,15 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
msgstr ""
+"Drapeau signalant que le tableau utilise des os de 16 bits au lieu de 8 bits."
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid ""
"Flag used to mark that the array uses an octahedral representation of normal "
"and tangent vectors rather than cartesian."
msgstr ""
+"Drapeau signalant que le tableau utilise une représentation octaédrique des "
+"vecteurs normaux et tangents plutôt que cartésienne."
#: doc/classes/Mesh.xml
msgid ""
@@ -35951,6 +36163,8 @@ msgstr "Tableau de normales."
#: doc/classes/Mesh.xml
msgid "Array of tangents as an array of floats, 4 floats per tangent."
msgstr ""
+"Tableau de tangentes sous la forme d'un tableau de nombres flottants, 4 de "
+"ces nombres par tangente."
#: doc/classes/Mesh.xml
msgid "Array of colors."
@@ -36020,8 +36234,10 @@ msgid "Clears all data currently in MeshDataTool."
msgstr "Efface toutes les données actuellement dans le MeshDataTool."
#: doc/classes/MeshDataTool.xml
+#, fuzzy
msgid "Adds a new surface to specified [Mesh] with edited data."
msgstr ""
+"Ajoute une nouvelle surface au [Mesh] spécifié avec des données modifiées."
#: doc/classes/MeshDataTool.xml
msgid ""
@@ -36030,8 +36246,9 @@ msgid ""
msgstr ""
#: doc/classes/MeshDataTool.xml
+#, fuzzy
msgid "Returns the number of edges in this [Mesh]."
-msgstr ""
+msgstr "Renvoie le nombre d'arêtes dans ce [Mesh]."
#: doc/classes/MeshDataTool.xml
msgid "Returns array of faces that touch given edge."
@@ -36245,7 +36462,7 @@ msgstr "Retourne le matériel affecté à la [ImmediateGeometry3D]."
#: doc/classes/MeshInstance.xml
msgid "Returns the number of surface materials."
-msgstr ""
+msgstr "Retourne le nombre de surfaces du matériau."
#: doc/classes/MeshInstance.xml
msgid "Sets the [Material] for a surface of the [Mesh] resource."
@@ -36253,7 +36470,7 @@ msgstr ""
#: doc/classes/MeshInstance.xml
msgid "The [Mesh] resource for the instance."
-msgstr ""
+msgstr "La ressource du [Mesh] pour cette instance."
#: doc/classes/MeshInstance.xml
#, fuzzy
@@ -36286,10 +36503,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -36356,7 +36569,7 @@ msgstr "Renvoie le nom de l'élément."
#: doc/classes/MeshLibrary.xml
msgid "Returns the item's navigation mesh."
-msgstr ""
+msgstr "Retourne le maillage de navigation de l'élément."
#: doc/classes/MeshLibrary.xml
msgid "Returns the transform applied to the item's navigation mesh."
@@ -36403,7 +36616,7 @@ msgstr ""
#: doc/classes/MeshLibrary.xml
msgid "Sets the item's navigation mesh."
-msgstr ""
+msgstr "Définit le maillage de navigation de l'élément."
#: doc/classes/MeshLibrary.xml
msgid "Sets the transform to apply to the item's navigation mesh."
@@ -36445,7 +36658,7 @@ msgstr ""
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid "Generic mobile VR implementation."
-msgstr ""
+msgstr "Implémentation de RV mobile générique."
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -36508,7 +36721,7 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Provides high-performance mesh instancing."
-msgstr ""
+msgstr "Fournis une instanciation de maillages haute performance."
#: doc/classes/MultiMesh.xml
msgid ""
@@ -36524,22 +36737,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -36548,7 +36745,7 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Gets a specific instance's color."
-msgstr ""
+msgstr "Retourne la couleur de l'instance spécifiée."
#: doc/classes/MultiMesh.xml
msgid "Returns the custom data that has been set for a specific instance."
@@ -36556,11 +36753,11 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Returns the [Transform] of a specific instance."
-msgstr ""
+msgstr "Retourne la [Transform] de l'instance spécifiée."
#: doc/classes/MultiMesh.xml
msgid "Returns the [Transform2D] of a specific instance."
-msgstr ""
+msgstr "Retourne la [Transform2D] de l'instance spécifiée."
#: doc/classes/MultiMesh.xml
msgid ""
@@ -36593,11 +36790,11 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Sets the [Transform] for a specific instance."
-msgstr ""
+msgstr "Définit la [Transform] pour l'instance spécifiée."
#: doc/classes/MultiMesh.xml
msgid "Sets the [Transform2D] for a specific instance."
-msgstr ""
+msgstr "Définit la [Transform2D] pour l'instance spécifiée."
#: doc/classes/MultiMesh.xml
msgid "Format of colors in color array that gets passed to shader."
@@ -36630,11 +36827,11 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Use this when using 2D transforms."
-msgstr ""
+msgstr "Utilise ça lors des transformations 2D."
#: doc/classes/MultiMesh.xml
msgid "Use this when using 3D transforms."
-msgstr ""
+msgstr "Utilise ça lors des transformations 3D."
#: doc/classes/MultiMesh.xml
msgid "Use when you are not using per-instance [Color]s."
@@ -36672,7 +36869,7 @@ msgstr ""
#: doc/classes/MultiMeshInstance.xml
msgid "Node that instances a [MultiMesh]."
-msgstr ""
+msgstr "Le nœud que instancie un [MultiMesh]."
#: doc/classes/MultiMeshInstance.xml
msgid ""
@@ -36683,13 +36880,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -36697,7 +36887,7 @@ msgstr ""
#: doc/classes/MultiMeshInstance2D.xml
msgid "Node that instances a [MultiMesh] in 2D."
-msgstr ""
+msgstr "Le nœud que instancie un [MultiMesh] en 2D."
#: doc/classes/MultiMeshInstance2D.xml
msgid ""
@@ -36939,13 +37129,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -37020,9 +37203,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -37059,6 +37241,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -37087,9 +37273,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -37137,9 +37322,8 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
msgid "Creates the agent."
-msgstr "Crée un [HingeJoint3D]."
+msgstr "Crée un agent."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -37204,14 +37388,12 @@ msgid "Sets the current velocity of the agent."
msgstr "Définit le trame présentement visible de l'animation."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
msgid "Destroys the given RID."
-msgstr "Supprime l'ID de la tuile donnée."
+msgstr "Supprimer le RID renseigné."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
msgid "Create a new map."
-msgstr "Crée un [Area2D]."
+msgstr "Crée une nouvelle carte."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -37248,9 +37430,8 @@ msgid "Returns [code]true[/code] if the map is active."
msgstr "Retourne [code]true[/code] si l'[AABB] est vide."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
msgid "Sets the map active."
-msgstr "Arrête la minuterie."
+msgstr "Définit la carte comme active."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -37263,9 +37444,8 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
msgid "Creates a new region."
-msgstr "Crée un [Area2D]."
+msgstr "Crée une nouvelle région."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
@@ -37430,7 +37610,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -37771,9 +37951,8 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
-#, fuzzy
msgid "Clears the navigation mesh."
-msgstr "Effacer la sélection."
+msgstr "Efface le maillage de navigation."
#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
@@ -37944,8 +38123,9 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygon.xml
+#, fuzzy
msgid "Returns the count of all polygons."
-msgstr ""
+msgstr "Retourne le nombre de tous les polygones."
#: doc/classes/NavigationPolygon.xml
msgid ""
@@ -37998,6 +38178,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Retourne la taille du tableau."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Renvoie l'inverse de la racine carrée du paramètre."
@@ -38020,6 +38205,11 @@ msgstr "Retourne les dimensions de bitmap."
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr "Définit le polygone de navigation de la tuile."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map up direction."
msgstr "Arrête l'audio."
@@ -38038,13 +38228,15 @@ msgstr "Définit le maillage de l'élément."
#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
-msgstr ""
+msgstr "Contrôle l'activation de ce serveur."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"PacketPeer implementation using the [url=http://enet.bespin.org/index."
"html]ENet[/url] library."
msgstr ""
+"L'implémentation de PacketPeer en utilisant la bibliothèque [url=http://enet."
+"bespin.org/index.html]ENet[/url]."
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -38060,18 +38252,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -38311,8 +38491,12 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr "API multijoueur de haut niveau."
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -38327,7 +38511,7 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Returns the ID of this [NetworkedMultiplayerPeer]."
-msgstr ""
+msgstr "Retourne l'identifiant de ce [NetworkedMultiplayerPeer]."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Waits up to 1 second to receive a new network event."
@@ -38357,11 +38541,11 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Emitted when a connection attempt fails."
-msgstr ""
+msgstr "Émis quand une tentative de connexion échoue."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Emitted when a connection attempt succeeds."
-msgstr ""
+msgstr "Émis quand une tentative de connexion réussie."
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Emitted by the server when a client connects."
@@ -38508,7 +38692,7 @@ msgstr "La ressource de texture du nœud."
#: doc/classes/NinePatchRect.xml
msgid "Emitted when the node's texture changes."
-msgstr ""
+msgstr "Émis quand la texture d'un nœud change."
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -38602,16 +38786,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -38658,7 +38838,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Appelé pendant l’étape de traitement physique de la boucle principale. Le "
"traitement physique signifie que la fréquence d’images est synchronisée avec "
@@ -38685,7 +38865,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Appelé pendant l’étape de traitement physique de la boucle principale. Le "
"traitement physique signifie que la fréquence d’images est synchronisée avec "
@@ -38710,7 +38890,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"Appelé pendant l’étape de traitement physique de la boucle principale. Le "
"traitement physique signifie que la fréquence d’images est synchronisée avec "
@@ -38736,17 +38916,18 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -38756,14 +38937,26 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
+"Appelé pendant l’étape de traitement physique de la boucle principale. Le "
+"traitement physique signifie que la fréquence d’images est synchronisée avec "
+"la physique, c’est-à-dire que la variable [code]delta[/code] doit être "
+"constante.\n"
+"Il est seulement appelé si le traitement physique est activé, ce qui est "
+"fait automatiquement si cette méthode est remplacée, et peut être basculé "
+"avec [method set_physics_process].\n"
+"Correspond à la notification [constant NOTIFICATION_PHYSICS_PROCESS] dans la "
+"[method Object._notification].\n"
+"[b]Remarque :[/b] Cette méthode n’est appelée que si le nœud est présent "
+"dans l’arborescence de la scène (c.-à-d. s’il n’est pas orphelin)."
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -38773,8 +38966,19 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
+"Appelé pendant l’étape de traitement physique de la boucle principale. Le "
+"traitement physique signifie que la fréquence d’images est synchronisée avec "
+"la physique, c’est-à-dire que la variable [code]delta[/code] doit être "
+"constante.\n"
+"Il est seulement appelé si le traitement physique est activé, ce qui est "
+"fait automatiquement si cette méthode est remplacée, et peut être basculé "
+"avec [method set_physics_process].\n"
+"Correspond à la notification [constant NOTIFICATION_PHYSICS_PROCESS] dans la "
+"[method Object._notification].\n"
+"[b]Remarque :[/b] Cette méthode n’est appelée que si le nœud est présent "
+"dans l’arborescence de la scène (c.-à-d. s’il n’est pas orphelin)."
#: doc/classes/Node.xml
msgid ""
@@ -39484,6 +39688,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -39636,11 +39852,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -39808,9 +40021,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -39846,11 +40058,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -39988,8 +40200,8 @@ msgstr "Classe de base pour toutes les ressources."
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -40023,19 +40235,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -40238,8 +40443,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -40358,6 +40563,9 @@ msgid ""
"Notify the editor that the property list has changed, so that editor plugins "
"can take the new values into account. Does nothing on export builds."
msgstr ""
+"Informe l'éditeur que la liste de propriétés a changé, pour que les greffons "
+"de l'éditeur puissent prendre compte des nouvelles valeurs. Ne change pas "
+"les builds d'export."
#: doc/classes/Object.xml
msgid ""
@@ -40367,7 +40575,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -40556,6 +40764,52 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual hole point position."
+msgstr "Définit un bit individuel sur le [member collision_mask]."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual polygon point position."
+msgstr "Définit un bit individuel sur le [member collision_mask]."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the hole geometry from code."
+msgstr "Dessine une géométrie simple à partir du code."
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the polygon geometry from code."
+msgstr "Dessine une géométrie simple à partir du code."
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -40576,8 +40830,9 @@ msgid "Sets an individual sphere's position."
msgstr "Définit un bit individuel sur le [member collision_mask]."
#: doc/classes/OccluderShapeSphere.xml
+#, fuzzy
msgid "Sets an individual sphere's radius."
-msgstr ""
+msgstr "Définit le rayon des sphères individuelles."
#: doc/classes/OccluderShapeSphere.xml
msgid ""
@@ -40619,9 +40874,8 @@ msgid ""
msgstr ""
#: doc/classes/OmniLight.xml
-#, fuzzy
msgid "See [enum ShadowDetail]."
-msgstr "Voir [enum ShadowMode]."
+msgstr "Voir [enum ShadowDetail]."
#: doc/classes/OmniLight.xml
msgid "See [enum ShadowMode]."
@@ -41086,7 +41340,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -41351,8 +41614,8 @@ msgstr "Retourne le nœud de fin de la transition donnée."
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -41605,6 +41868,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Retourne [code]true[/code] si l'[AABB] est plate ou vide."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -41724,6 +41992,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -42208,12 +42483,11 @@ msgstr ""
#: doc/classes/OS.xml
msgid "Landscape screen orientation."
-msgstr ""
+msgstr "Orientation de l'écran en mode paysage."
#: doc/classes/OS.xml
-#, fuzzy
msgid "Portrait screen orientation."
-msgstr "Mode d’orientation isométrique."
+msgstr "Orientation de l'écran en mode portrait."
#: doc/classes/OS.xml
#, fuzzy
@@ -42276,19 +42550,19 @@ msgstr "Nœud inconnu."
#: doc/classes/OS.xml
msgid "Unplugged, running on battery."
-msgstr ""
+msgstr "Débranché, tourne sur la batterie."
#: doc/classes/OS.xml
msgid "Plugged in, no battery available."
-msgstr ""
+msgstr "Branché, aucune batterie installée."
#: doc/classes/OS.xml
msgid "Plugged in, battery charging."
-msgstr ""
+msgstr "Branché, la batterie charge."
#: doc/classes/OS.xml
msgid "Plugged in, battery fully charged."
-msgstr ""
+msgstr "Branché, la batterie est complètement chargée."
#: doc/classes/PackedDataContainerRef.xml
msgid "Reference version of [PackedDataContainer]."
@@ -42699,14 +42973,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -42859,13 +43131,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -42930,7 +43197,7 @@ msgstr ""
#: doc/classes/Particles.xml
msgid "Emission randomness ratio."
-msgstr ""
+msgstr "Facteur d'aléatoire de l'émission."
#: doc/classes/Particles.xml
msgid ""
@@ -42987,12 +43254,16 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
#: doc/classes/Particles2D.xml
msgid "Restarts all the existing particles."
-msgstr ""
+msgstr "Redémarre toutes les particules existantes."
#: doc/classes/Particles2D.xml
msgid ""
@@ -43454,7 +43725,6 @@ msgid ""
msgstr ""
#: doc/classes/PathFollow2D.xml
-#, fuzzy
msgid "Point sampler for a [Path2D]."
msgstr "Échantillonneur de points pour un [Path2D]."
@@ -43649,12 +43919,11 @@ msgstr ""
#: doc/classes/Performance.xml
msgid "Draw calls per frame. 3D only."
-msgstr ""
+msgstr "Le nombre d'appels d'affichage par trame. Seulement pour la 3D."
#: doc/classes/Performance.xml
-#, fuzzy
msgid "Items or joined items drawn per frame."
-msgstr "Objets 3D dessinés par image."
+msgstr "Les éléments et les éléments joins affichés par trame."
#: doc/classes/Performance.xml
#, fuzzy
@@ -43665,14 +43934,16 @@ msgstr "Objets 3D dessinés par image."
msgid ""
"The amount of video memory used, i.e. texture and vertex memory combined."
msgstr ""
+"La quantité de mémoire vidéo utilisée, soit la mémoire combinée des textures "
+"et sommets."
#: doc/classes/Performance.xml doc/classes/VisualServer.xml
msgid "The amount of texture memory used."
-msgstr ""
+msgstr "La quantité de mémoire utilisée pour les textures."
#: doc/classes/Performance.xml doc/classes/VisualServer.xml
msgid "The amount of vertex memory used."
-msgstr ""
+msgstr "La quantité de mémoire utilisée pour les sommets."
#: doc/classes/Performance.xml doc/classes/VisualServer.xml
msgid ""
@@ -43693,7 +43964,7 @@ msgstr ""
#: doc/classes/Performance.xml
msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
-msgstr ""
+msgstr "Le nombre de nœuds [RigidBody] et [VehicleBody] dans le jeu."
#: doc/classes/Performance.xml
msgid "Number of collision pairs in the 3D physics engine."
@@ -43720,6 +43991,8 @@ msgid ""
"Optimized translation. Uses real-time compressed translations, which results "
"in very small dictionaries."
msgstr ""
+"Traductions optimisées. Utilise une compression en temps-réel, ce qui permet "
+"d'avoir un dictionnaire très petit."
#: doc/classes/PHashTranslation.xml
msgid ""
@@ -43729,7 +44002,7 @@ msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml
msgid "Direct access object to a physics body in the [Physics2DServer]."
-msgstr ""
+msgstr "L'objet d'accès direct au corps physique du [Physics2DServer]."
#: doc/classes/Physics2DDirectBodyState.xml
msgid ""
@@ -43743,11 +44016,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44101,9 +44371,9 @@ msgid ""
msgstr ""
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Gets the instance ID of the object the area is assigned to."
-msgstr "Obtient l'ID d'instance de l'objet auquel la zone est attribuée."
+msgstr ""
+"Retourne l'identifiant d'instance de l'objet auquel la zone est attribuée."
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -44883,11 +45153,12 @@ msgstr ""
#: doc/classes/Physics2DShapeQueryParameters.xml
#: doc/classes/PhysicsShapeQueryParameters.xml
msgid "The collision margin for the shape."
-msgstr ""
+msgstr "La marge de collision de la forme."
#: doc/classes/Physics2DShapeQueryParameters.xml
+#, fuzzy
msgid "The motion of the shape being queried for."
-msgstr ""
+msgstr "Le mouvement de la forme qui a été demandé"
#: doc/classes/Physics2DShapeQueryParameters.xml
#: doc/classes/PhysicsShapeQueryParameters.xml
@@ -44945,7 +45216,7 @@ msgstr ""
#: doc/classes/PhysicsDirectBodyState.xml
msgid "Direct access object to a physics body in the [PhysicsServer]."
-msgstr ""
+msgstr "L'objet d'accès direct au corps physique du [PhysicsServer]."
#: doc/classes/PhysicsDirectBodyState.xml
msgid ""
@@ -45141,6 +45412,8 @@ msgid ""
"The body's friction. Values range from [code]0[/code] (frictionless) to "
"[code]1[/code] (maximum friction)."
msgstr ""
+"La friction du corps. La valeur va de [code]0[/code] (sans friction) à "
+"[code]1[/code] (friction maximale)."
#: doc/classes/PhysicsMaterial.xml
msgid ""
@@ -45153,7 +45426,7 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid "Server interface for low-level physics access."
-msgstr ""
+msgstr "L'interface du serveur pour l'accès physique de bas niveau."
#: doc/classes/PhysicsServer.xml
#, fuzzy
@@ -45166,9 +45439,8 @@ msgstr ""
"l'arbre des nœuds."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates an [Area]."
-msgstr "Crée un [Area2D]."
+msgstr "Crée un [Area]."
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -45179,6 +45451,7 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], area collides with rays."
msgstr ""
+"Si [code]true[/code], la zone peut entrer en collision avec les rayons."
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -45334,29 +45607,24 @@ msgid "Sets a hinge_joint parameter (see [enum HingeJointParam] constants)."
msgstr ""
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates a [ConeTwistJoint]."
-msgstr "Crée un [ConeTwistJoint3D]."
+msgstr "Crée un [ConeTwistJoint]."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates a [Generic6DOFJoint]."
-msgstr "Crée un [Generic6DOFJoint3D]."
+msgstr "Crée un [Generic6DOFJoint]."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates a [HingeJoint]."
-msgstr "Crée un [HingeJoint3D]."
+msgstr "Crée un [HingeJoint]."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates a [PinJoint]."
-msgstr "Crée un [PinJoint3D]."
+msgstr "Crée un [PinJoint]."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "Creates a [SliderJoint]."
-msgstr "Crée un [SliderJoint3D]."
+msgstr "Crée un [SliderJoint]."
#: doc/classes/PhysicsServer.xml
#, fuzzy
@@ -45494,14 +45762,12 @@ msgstr ""
"que ce Joint3D met sur ses extrémités."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "The maximum rotation across the Hinge."
-msgstr "Rotation maximale à travers la charnière."
+msgstr "La rotation maximale à travers le [Hinge]."
#: doc/classes/PhysicsServer.xml
-#, fuzzy
msgid "The minimum rotation across the Hinge."
-msgstr "La rotation minimale à travers la charnière."
+msgstr "La rotation minimale à travers le [Hinge]."
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], the Hinge has a maximum and a minimum rotation."
@@ -45570,11 +45836,11 @@ msgstr ""
#: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml
msgid "The upper limit of rotation in the slider."
-msgstr ""
+msgstr "La limite haute de rotation du glisseur."
#: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml
msgid "The lower limit of rotation in the slider."
-msgstr ""
+msgstr "La limite basse de rotation du glisseur."
#: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml
msgid "A factor applied to the all rotation once the limit is surpassed."
@@ -45619,7 +45885,7 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid "Represents the size of the [enum SliderJointParam] enum."
-msgstr ""
+msgstr "Représente la taille de l'énumération [enum SliderJointParam]."
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -45832,7 +46098,7 @@ msgstr ""
#: doc/classes/Plane.xml
msgid "Returns the center of the plane."
-msgstr ""
+msgstr "Retourne le centre du plan."
#: doc/classes/Plane.xml
msgid ""
@@ -46031,7 +46297,7 @@ msgstr ""
#: doc/classes/Polygon2D.xml
msgid "Removes all bones from this [Polygon2D]."
-msgstr ""
+msgstr "Retire tous les os pour ce [Polygon2D]."
#: doc/classes/Polygon2D.xml
msgid "Removes the specified bone from this [Polygon2D]."
@@ -46039,15 +46305,16 @@ msgstr ""
#: doc/classes/Polygon2D.xml
msgid "Returns the number of bones in this [Polygon2D]."
-msgstr ""
+msgstr "Retourne le nombre d'os dans ce [Polygon2D]."
#: doc/classes/Polygon2D.xml
msgid "Returns the path to the node associated with the specified bone."
msgstr "Retourne le chemin d’accès au nœud associé à l’os spécifié."
#: doc/classes/Polygon2D.xml
+#, fuzzy
msgid "Returns the height values of the specified bone."
-msgstr ""
+msgstr "Retourne la hauteur de l'os spécifié."
#: doc/classes/Polygon2D.xml
msgid "Sets the path to the node associated with the specified bone."
@@ -46055,7 +46322,7 @@ msgstr ""
#: doc/classes/Polygon2D.xml
msgid "Sets the weight values for the specified bone."
-msgstr ""
+msgstr "Définit le poids pour l'os spécifié."
#: doc/classes/Polygon2D.xml
msgid "If [code]true[/code], polygon edges will be anti-aliased."
@@ -46082,7 +46349,7 @@ msgstr ""
#: doc/classes/Polygon2D.xml
msgid "The offset applied to each vertex."
-msgstr ""
+msgstr "Le décalage appliqué à chaque sommet."
#: doc/classes/Polygon2D.xml
msgid ""
@@ -46326,9 +46593,8 @@ msgid ""
msgstr ""
#: doc/classes/PoolIntArray.xml
-#, fuzzy
msgid "Changes the int at the given index."
-msgstr "Modifie le [Vector2] à l’index donné."
+msgstr "Modifie le [int] à l’index donné."
#: doc/classes/PoolRealArray.xml
#, fuzzy
@@ -46416,9 +46682,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -46485,7 +46750,7 @@ msgstr ""
#: doc/classes/Popup.xml
msgid "Popup (show the control in modal form)."
-msgstr ""
+msgstr "Fenêtre contextuelle (affiche le contrôle sous forme exclusive)."
#: doc/classes/Popup.xml
msgid ""
@@ -46518,6 +46783,8 @@ msgstr ""
#: doc/classes/Popup.xml
msgid "Shrink popup to keep to the minimum size of content."
msgstr ""
+"Réduit la taille de la fenêtre contextuelle pour garder la taille minimale "
+"du contenu."
#: doc/classes/Popup.xml
msgid ""
@@ -46539,15 +46806,17 @@ msgstr ""
#: doc/classes/Popup.xml
msgid "Emitted when a popup is hidden."
-msgstr ""
+msgstr "Émis quand la fenêtre contextuelle est masquée."
#: doc/classes/Popup.xml
msgid "Notification sent right after the popup is shown."
msgstr ""
+"La notification est envoyée dès que la fenêtre contextuelle est affichée."
#: doc/classes/Popup.xml
msgid "Notification sent right after the popup is hidden."
msgstr ""
+"La notification est envoyée dès que la fenêtre contextuelle est masquée."
#: doc/classes/PopupDialog.xml
#, fuzzy
@@ -46742,7 +47011,7 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "Returns the number of items in the [PopupMenu]."
-msgstr ""
+msgstr "Retourne le nombre d'éléments dans le [PopupMenu]."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -46839,8 +47108,12 @@ msgstr ""
#: doc/classes/PopupMenu.xml
#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Retourne la position du point à l'index [code]point[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
-msgstr "Envoyé lorsque le nœud perd le focus."
+msgstr "Masque le [PopupMenu] dès que la fenêtre perd le focus."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -46905,11 +47178,11 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "Sets a [ShortCut] for the specified item [code]idx[/code]."
-msgstr ""
+msgstr "Définit un [ShortCut] pour l'élément spécifié à [code]idx[/code]."
#: doc/classes/PopupMenu.xml
msgid "Disables the [ShortCut] of the specified index [code]idx[/code]."
-msgstr ""
+msgstr "Désactive le [ShortCut] pour l'élément spécifié à [code]idx[/code]."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -47027,17 +47300,15 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "[Texture] icon for the checked checkbox items."
-msgstr ""
+msgstr "La [Texture] de l'icône pour les coches cochées."
#: doc/classes/PopupMenu.xml
-#, fuzzy
msgid "[Texture] icon for the checked radio button items."
-msgstr "Icône personnalisée pour le bouton de rechargement."
+msgstr "La [Texture] de l'icône pour les boutons radios cochés."
#: doc/classes/PopupMenu.xml
-#, fuzzy
msgid "[Texture] icon for the unchecked radio button items."
-msgstr "Icône personnalisée pour le bouton de rechargement."
+msgstr "La [Texture] de l'icône pour les boutons radios décochés."
#: doc/classes/PopupMenu.xml
msgid "[Texture] icon for the submenu arrow."
@@ -47045,11 +47316,11 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "[Texture] icon for the unchecked checkbox items."
-msgstr ""
+msgstr "La [Texture] de l'icône pour les coches décochées."
#: doc/classes/PopupMenu.xml
msgid "[StyleBox] displayed when the [PopupMenu] item is hovered."
-msgstr ""
+msgstr "Le [StyleBox] affiché quand un élément d'un [PopupMenu] est survolé."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -47065,15 +47336,16 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "Default [StyleBox] of the [PopupMenu] items."
-msgstr ""
+msgstr "La [StyleBox] par défaut pour les éléments du [PopupMenu]."
#: doc/classes/PopupMenu.xml
msgid "[StyleBox] used when the [PopupMenu] item is disabled."
-msgstr ""
+msgstr "Le [StyleBox] affiché quand un élément d'un [PopupMenu] est désactivé."
#: doc/classes/PopupMenu.xml
msgid "[StyleBox] used for the separators. See [method add_separator]."
msgstr ""
+"Le [StyleBox] utilisé pour les séparateurs. Voir [method add_separator]."
#: doc/classes/PopupPanel.xml
msgid "Class for displaying popups with a panel background."
@@ -47160,7 +47432,7 @@ msgstr ""
#: doc/classes/Position2D.xml
msgid "Generic 2D position hint for editing."
-msgstr ""
+msgstr "Un marqueur dans l'éditeur pour une position 2D quelconque."
#: doc/classes/Position2D.xml
msgid ""
@@ -47168,16 +47440,23 @@ msgid ""
"it displays as a cross in the 2D editor at all times. You can set cross' "
"visual size by using the gizmo in the 2D editor while the node is selected."
msgstr ""
+"Un marqueur dans l'éditeur pour une position 2D quelconque. C'est juste un "
+"simple [Node2D] qui affiche en permanence une croix dans l'éditeur 2D à la "
+"position spécifiée. Vous pouvez renseigner la taille de cette croix en "
+"utilisant le manipulateur après avoir sélectionné le marqueur."
#: doc/classes/Position3D.xml
msgid "Generic 3D position hint for editing."
-msgstr ""
+msgstr "Un marqueur dans l'éditeur pour une position 3D quelconque."
#: doc/classes/Position3D.xml
msgid ""
"Generic 3D position hint for editing. It's just like a plain [Spatial], but "
"it displays as a cross in the 3D editor at all times."
msgstr ""
+"Un marqueur dans l'éditeur pour une position 3D quelconque. C'est juste un "
+"simple [Spatial] qui affiche en permanence une croix dans l'éditeur 3D à la "
+"position spécifiée."
#: doc/classes/PrimitiveMesh.xml
msgid ""
@@ -47268,9 +47547,8 @@ msgid ""
msgstr ""
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "Color of the ground at the bottom."
-msgstr "Couleur du texte du titre."
+msgstr "Couleur du sol en bas."
#: doc/classes/ProceduralSky.xml
msgid ""
@@ -47283,9 +47561,8 @@ msgid "Amount of energy contribution from the ground."
msgstr "Montant de la contribution énergétique du sol."
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "Color of the ground at the horizon."
-msgstr "[Color] de la ligne directrice."
+msgstr "La couleur du sol à l'horizon."
#: doc/classes/ProceduralSky.xml
msgid ""
@@ -47298,14 +47575,12 @@ msgid "Amount of energy contribution from the sky."
msgstr "Montant de la contribution énergétique du ciel."
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "Color of the sky at the horizon."
-msgstr "Couleur du texte du titre."
+msgstr "La couleur du ciel à l'horizon."
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "Color of the sky at the top."
-msgstr "Couleur du texte du titre."
+msgstr "La couleur du ciel en haut."
#: doc/classes/ProceduralSky.xml
msgid "Distance from center of sun where it fades out completely."
@@ -47316,9 +47591,8 @@ msgid "Distance from sun where it goes from solid to starting to fade."
msgstr ""
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "The sun's color."
-msgstr "La couleur de la ligne."
+msgstr "La couleur du soleil."
#: doc/classes/ProceduralSky.xml
msgid ""
@@ -47334,11 +47608,11 @@ msgstr "Montant de la contribution énergétique du ciel."
#: doc/classes/ProceduralSky.xml
msgid "The sun's height using polar coordinates."
msgstr ""
+"La hauteur du soleil dans le ciel en utilisant des coordonnées polaires."
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "The direction of the sun using polar coordinates."
-msgstr "Le point de collision, dans les coordonnées globales."
+msgstr "La direction du soleil en coordonnées polaires."
#: doc/classes/ProceduralSky.xml
msgid ""
@@ -47348,28 +47622,27 @@ msgstr ""
#: doc/classes/ProceduralSky.xml
msgid "Sky texture will be 256x128."
-msgstr ""
+msgstr "La texture du ciel sera 256x128."
#: doc/classes/ProceduralSky.xml
msgid "Sky texture will be 512x256."
-msgstr ""
+msgstr "La texture du ciel sera 512x256."
#: doc/classes/ProceduralSky.xml
msgid "Sky texture will be 1024x512. This is the default size."
-msgstr ""
+msgstr "La texture du ciel sera 1024x512. C'est la taille par défaut."
#: doc/classes/ProceduralSky.xml
msgid "Sky texture will be 2048x1024."
-msgstr ""
+msgstr "La texture du ciel sera 2048x1024."
#: doc/classes/ProceduralSky.xml
msgid "Sky texture will be 4096x2048."
-msgstr ""
+msgstr "La texture du ciel sera 4096x2048."
#: doc/classes/ProceduralSky.xml
-#, fuzzy
msgid "Represents the size of the [enum TextureSize] enum."
-msgstr "Représente la taille de l’enum [enum TextureFilter]."
+msgstr "Représente la taille de l’énumération [enum TextureSize]."
#: doc/classes/ProgressBar.xml
msgid "General-purpose progress bar."
@@ -47378,6 +47651,8 @@ msgstr "Barre de progression à usage général."
#: doc/classes/ProgressBar.xml
msgid "General-purpose progress bar. Shows fill percentage from right to left."
msgstr ""
+"Barre de progression à usage général. Affiche un pourcentage de remplissage "
+"de droite à gauche."
#: doc/classes/ProgressBar.xml
msgid "If [code]true[/code], the fill percentage is displayed on the bar."
@@ -47389,7 +47664,7 @@ msgstr "La couleur du texte."
#: doc/classes/ProgressBar.xml
msgid "The color of the text's shadow."
-msgstr ""
+msgstr "La couleur de l'ombre du texte."
#: doc/classes/ProgressBar.xml
msgid ""
@@ -47407,7 +47682,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Contains global variables accessible from everywhere."
-msgstr ""
+msgstr "Contient des variables globales accessibles depuis partout."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -47506,6 +47781,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Returns [code]true[/code] if a configuration value is present."
msgstr ""
+"Retourne [code]true[/code] si une valeur est présente dans la configuration."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -47596,7 +47872,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Background color for the boot splash."
-msgstr ""
+msgstr "La couleur d'arrière plan pour l'écran de lancement."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -47890,10 +48166,13 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
+"Active [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
+"distance matching[/url] dans Zstandard."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -48160,8 +48439,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48247,8 +48526,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -48336,9 +48615,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -48394,7 +48673,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Default delay for tooltips (in seconds)."
-msgstr ""
+msgstr "Le délai par défaut pour les infobulles (en secondes)."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -48542,55 +48821,55 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 1 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 10."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 10 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 11."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 11 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 12."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 12 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 13."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 13 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 14."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 14 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 15."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 15 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 16."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 16 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 17."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 17 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 18."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 18 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 19."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 19 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 2."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 2 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 20."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 20 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 21."
@@ -48630,7 +48909,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 3."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 3 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 30."
@@ -48646,159 +48925,159 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 4."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 4 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 5."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 5 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 6."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 6 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 7."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 7 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 8."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 8 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 9."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 9 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 1."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 1 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 10."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 10 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 11."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 11 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 12."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 12 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 13."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 13 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 14."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 14 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 15."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 15 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 16."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 16 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 17."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 17 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 18."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 18 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 19."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 19 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 2."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 2 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 20."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 20 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 3."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 3 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 4."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 4 rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 5."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 5 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 6."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 6 rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 7."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 7 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 8."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 8 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 9."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 9 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 1 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 10."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 10 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 11."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 11 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 12."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 12 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 13."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 13 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 14."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 14 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 15."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 15 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 16."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 16 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 17."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 17 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 18."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 18 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 19."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 19 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 2."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 2 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 20."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 20 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 21."
@@ -48838,7 +49117,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 3."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 3 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 30."
@@ -48854,107 +49133,107 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 4."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 4 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 5."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 5 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 6."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 6 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 7."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 7 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 8."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 8 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 9."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 9 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 1."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 1 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 10."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 10 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 11."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 11 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 12."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 12 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 13."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 13 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 14"
-msgstr ""
+msgstr "Le nom facultatif pour le claque 14 de rendu 3D"
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 15."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 15 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 16."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 16 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 17."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 17 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 18."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 18 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 19."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 19 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 2."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 2 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 20."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 20 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 3."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 3 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 4."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 4 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 5."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 5 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 6."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 6 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 7."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 7 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 8."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 8 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 9."
-msgstr ""
+msgstr "Le nom facultatif pour le claque 9 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -49053,6 +49332,7 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
+"Le temps maximum (en secondes) pour les tentatives de connexion via TCP."
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
@@ -49723,12 +50003,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49826,6 +50108,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -49928,7 +50221,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50347,9 +50641,15 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
-msgstr ""
+msgstr "Nœud de détection de proximité pour usage général."
#: doc/classes/QuadMesh.xml
msgid "Class representing a square mesh."
@@ -50365,9 +50665,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
#, fuzzy
@@ -50396,14 +50695,6 @@ msgstr ""
#: doc/classes/Quat.xml
#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
-#, fuzzy
msgid "Constructs a quaternion from the given [Basis]."
msgstr "Construit une nouvelle chaîne de caractères à partir du [Basis] donné."
@@ -50576,8 +50867,8 @@ msgstr ""
#: doc/classes/RandomNumberGenerator.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/fr/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr "Réglez la graine pour le générateur de nombres aléatoires."
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -51021,7 +51312,8 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr "Retourne la zone du [Rect2]."
#: doc/classes/Rect2.xml
@@ -51049,7 +51341,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -51144,7 +51440,7 @@ msgstr ""
#: doc/classes/ReferenceRect.xml
msgid "Reference frame for GUI."
-msgstr ""
+msgstr "La trame de référence pour l'interface."
#: doc/classes/ReferenceRect.xml
msgid ""
@@ -51206,12 +51502,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -51283,7 +51573,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -51601,9 +51895,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -51824,6 +52117,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
#, fuzzy
msgid "The default import order."
msgstr "La police par défaut du thème."
@@ -51837,9 +52134,8 @@ msgid ""
msgstr ""
#: doc/classes/ResourceInteractiveLoader.xml
-#, fuzzy
msgid "Interactive [Resource] loader."
-msgstr "La [Resource] à charger."
+msgstr "Le chargeur de [Resource] interactif."
#: doc/classes/ResourceInteractiveLoader.xml
msgid ""
@@ -52145,9 +52441,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -52344,9 +52643,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -52441,7 +52741,7 @@ msgstr "Se déclenche lorsque la souris entre dans une balise meta."
#: doc/classes/RichTextLabel.xml
msgid "Makes text left aligned."
-msgstr ""
+msgstr "Aligne le texte à gauche."
#: doc/classes/RichTextLabel.xml
msgid "Makes text centered."
@@ -52449,11 +52749,11 @@ msgstr "Centre le texte."
#: doc/classes/RichTextLabel.xml
msgid "Makes text right aligned."
-msgstr ""
+msgstr "Aligne le texte à droite."
#: doc/classes/RichTextLabel.xml
msgid "Makes text fill width."
-msgstr ""
+msgstr "Rempli le texte en largeur."
#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
@@ -52469,7 +52769,7 @@ msgstr "Chaque élément de liste a un marqueur de cercle rempli."
#: doc/classes/RichTextLabel.xml
msgid "The default text color."
-msgstr ""
+msgstr "La couleur par défaut du texte."
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -52531,7 +52831,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml
msgid "The default text font."
-msgstr ""
+msgstr "La police par défaut du texte."
#: doc/classes/RichTextLabel.xml
msgid "The background The background used when the [RichTextLabel] is focused."
@@ -52935,14 +53235,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -53541,11 +53839,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -53557,9 +53852,8 @@ msgid "The grid's cell size in 3D units."
msgstr "La taille de cellule du TileMap."
#: doc/classes/RootMotionView.xml
-#, fuzzy
msgid "The grid's color."
-msgstr "La couleur de la ligne."
+msgstr "La couleur de la grille."
#: doc/classes/RootMotionView.xml
msgid ""
@@ -53757,18 +54051,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -54146,9 +54428,8 @@ msgid "Call a group only once even if the call is executed many times."
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
msgid "No stretching."
-msgstr "Arrête d'écouter."
+msgstr ""
#: doc/classes/SceneTree.xml
msgid "Render stretching in higher resolution (interpolated)."
@@ -54233,10 +54514,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -54554,16 +54831,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -54893,12 +55160,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -55210,17 +55471,14 @@ msgstr "Un corps physique à maillage souple."
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
msgid "Returns local translation of a vertex in the surface array."
msgstr "Renvoie la matrice de transformation d’une forme dans une zone."
@@ -55283,9 +55541,8 @@ msgid ""
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
msgid "The SoftBody's mass."
-msgstr "La masse du SoftBody3D."
+msgstr "La masse du SoftBody."
#: doc/classes/Spatial.xml
msgid "Most basic 3D game object, parent of all 3D-related nodes."
@@ -55308,17 +55565,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -55381,11 +55633,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -55504,9 +55761,8 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
msgid "Updates the [SpatialGizmo] of this node."
-msgstr "Règle le mode de ce shader."
+msgstr "Met à jour le [SpatialGizmo] pour ce nœud."
#: doc/classes/Spatial.xml
msgid ""
@@ -55528,8 +55784,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -55623,12 +55879,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -55938,10 +56188,13 @@ msgid "Texture that specifies how much surface emits light at a given point."
msgstr ""
#: doc/classes/SpatialMaterial.xml
+#, fuzzy
msgid ""
"Forces a conversion of the [member albedo_texture] from sRGB space to linear "
"space."
msgstr ""
+"Force la conversion de [member albedo_texture] de l'espace sRGB à l'espace "
+"linéaire."
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], the object receives no ambient light."
@@ -55965,6 +56218,8 @@ msgid ""
"If [code]true[/code], the object is rendered at the same size regardless of "
"distance."
msgstr ""
+"Si [code]true[/code], l'objet est affiché à la même taille indépendamment de "
+"sa distance à la caméra."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -56361,33 +56616,33 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel color."
-msgstr "Texture spécifiant la couleur par pixel."
+msgstr "La texture spécifiant la couleur par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel metallic value."
-msgstr "Texture spécifiant la valeur métallique par pixel."
+msgstr "La texture spécifiant la valeur métallique par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel roughness value."
-msgstr "Texture spécifiant la valeur de rugosité par pixel."
+msgstr "La texture spécifiant la valeur de rugosité par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel emission color."
-msgstr "Texture spécifiant la couleur d’émission par pixel."
+msgstr "La texture spécifiant la couleur d’émission par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel normal vector."
-msgstr "Texture spécifiant le vecteur normal par pixel."
+msgstr "La texture spécifiant le vecteur de normale par pixel."
#: doc/classes/SpatialMaterial.xml
#, fuzzy
msgid "Texture specifying per-pixel rim value."
-msgstr "Texture spécifiant la valeur du bord par pixel."
+msgstr "La texture spécifiant la valeur du bord par pixel."
#: doc/classes/SpatialMaterial.xml
#, fuzzy
msgid "Texture specifying per-pixel clearcoat value."
-msgstr "Texture spécifiant la valeur du vernis par pixel."
+msgstr "La texture spécifiant la valeur du vernis par pixel."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -56397,102 +56652,97 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel ambient occlusion value."
-msgstr ""
+msgstr "La texture spécifiant la valeur de l'occlusion ambiante par pixel."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid "Texture specifying per-pixel depth."
-msgstr "Texture spécifiant la hauteur par pixel."
+msgstr "La texture spécifiant la profondeur par pixel."
#: doc/classes/SpatialMaterial.xml
#, fuzzy
msgid "Texture specifying per-pixel subsurface scattering."
-msgstr "Texture spécifiant par pixel de diffusion souterraine."
+msgstr "La texture spécifiant par pixel de diffusion souterraine."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid "Texture specifying per-pixel transmission color."
-msgstr "Texture spécifiant la couleur d’émission par pixel."
+msgstr "La texture spécifiant la couleur de transmission par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel refraction strength."
-msgstr "Texture spécifiant la force de réfraction par pixel."
+msgstr "La texture spécifiant la force de réfraction par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel detail mask blending value."
msgstr ""
-"Texture spécifiant la valeur de mélange des masques de détail par pixel."
+"La texture spécifiant la valeur de mélange des masques de détail par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel detail color."
-msgstr "Texture spécifiant la couleur des détails par pixel."
+msgstr "La texture spécifiant la couleur des détails par pixel."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid "Texture specifying per-pixel detail normal."
-msgstr "Texture spécifiant le détail par pixel de la normale."
+msgstr "La texture spécifiant le détail de la normale par pixel."
#: doc/classes/SpatialMaterial.xml
msgid "Represents the size of the [enum TextureParam] enum."
msgstr "Représente la taille de l’enum [enum TextureParam]."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid "Use [code]UV[/code] with the detail texture."
-msgstr "Utilisez [code]UV[/code] pour la texture des détails."
+msgstr "Utilise [code]UV[/code] pour la texture des détails."
#: doc/classes/SpatialMaterial.xml
msgid "Use [code]UV2[/code] with the detail texture."
-msgstr ""
+msgstr "Utilise [code]UV2[/code] pour la texture des détails."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member flags_transparent]."
-msgstr "Constante pour le réglage [member flags_transparent]."
+msgstr "La constante pour le réglage [member flags_transparent]."
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid "Constant for setting [member emission_enabled]."
-msgstr "Constante de paramétrage [member emission_enabled]."
+msgstr "La constante pour le réglage [member emission_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member normal_enabled]."
-msgstr "Constante pour le réglage [member normal_enabled]."
+msgstr "La constante pour le réglage [member normal_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member rim_enabled]."
-msgstr "Constante pour le réglage [member rim_enabled]."
+msgstr "La constante pour le réglage [member rim_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member clearcoat_enabled]."
-msgstr "Constante pour le réglage [member clearcoat_enabled]."
+msgstr "La constante pour le réglage [member clearcoat_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member anisotropy_enabled]."
-msgstr "Constante pour le réglage [member anisotropy_enabled]."
+msgstr "La constante pour le réglage [member anisotropy_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member ao_enabled]."
-msgstr "Constante pour le réglage [member ao_enabled]."
+msgstr "La constante pour le réglage [member ao_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member depth_enabled]."
-msgstr "Constante pour le réglage [member depth_enabled]."
+msgstr "La constante pour le réglage [member depth_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member subsurf_scatter_enabled]."
-msgstr "Constante pour le réglage [member subsurf_scatter_enabled]."
+msgstr "La constante pour le réglage [member subsurf_scatter_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member transmission_enabled]."
-msgstr "Constante pour le réglage [member transmission_enabled]."
+msgstr "La constante pour le réglage [member transmission_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member refraction_enabled]."
-msgstr "Constante pour le réglage [member refraction_enabled]."
+msgstr "La constante pour le réglage [member refraction_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member detail_enabled]."
-msgstr "Constante pour le réglage [member detail_enabled]."
+msgstr "La constante pour le réglage [member detail_enabled]."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -56548,6 +56798,8 @@ msgid ""
"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
"code]."
msgstr ""
+"Aucun lumière n'est appliquée à l'objet. La couleur vient directement de "
+"[code]ALBEDO[/code]."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -56629,7 +56881,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "Disables receiving shadows from other objects."
-msgstr ""
+msgstr "Désactive la réception des ombres venant des autres objets."
#: doc/classes/SpatialMaterial.xml
msgid "Disables receiving ambient light."
@@ -56641,7 +56893,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "Enables the shadow to opacity feature."
-msgstr ""
+msgstr "Active la conversion de l'ombre en opacité."
#: doc/classes/SpatialMaterial.xml
msgid "Default diffuse scattering algorithm."
@@ -56670,7 +56922,7 @@ msgstr "Blob spéculaire par défaut."
#: doc/classes/SpatialMaterial.xml
msgid "Older specular algorithm, included for compatibility."
-msgstr ""
+msgstr "Ancien algorithme pour l'effet spéculaire, inclus pour compatibilité."
#: doc/classes/SpatialMaterial.xml
msgid "Toon blob which changes size based on roughness."
@@ -56727,7 +56979,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "Do not use distance fade."
-msgstr "N'utilisez pas de fondu de distance."
+msgstr "Ne pas utiliser de fondu de distance."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -57013,9 +57265,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -57125,9 +57377,8 @@ msgid ""
msgstr ""
#: doc/classes/Sprite.xml
-#, fuzzy
msgid "[Texture] object to draw."
-msgstr "[Texture2D] objet à dessiner."
+msgstr "L'objet [Texture2D] à dessiner."
#: doc/classes/Sprite.xml doc/classes/Sprite3D.xml
msgid "The number of rows in the sprite sheet."
@@ -57193,14 +57444,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -57492,15 +57758,15 @@ msgstr ""
#: doc/classes/StreamPeer.xml
msgid "Puts a signed 16-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 16 bits dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts a signed 32-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 32 bits dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts a signed 64-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 64 bits dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts a signed byte into the stream."
@@ -57542,15 +57808,15 @@ msgstr ""
#: doc/classes/StreamPeer.xml
msgid "Puts an unsigned 16-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 16 bits non signée dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts an unsigned 32-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 32 bits non signée dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts an unsigned 64-bit value into the stream."
-msgstr ""
+msgstr "Ajoute une valeur de 64 bits non signée dans le flux."
#: doc/classes/StreamPeer.xml
msgid "Puts an unsigned byte into the stream."
@@ -57579,6 +57845,54 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Data buffer stream peer."
+msgstr "Homologue de flux SSL."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Retourne la position de défilement actuelle."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Renvoie le sinus du paramètre."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr "Homologue de flux SSL."
@@ -57735,13 +58049,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
"Construit une nouvelle chaîne de caractères à partir du [bool] (booléen) "
@@ -58077,7 +58384,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -58132,10 +58444,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -58506,12 +58818,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -59113,7 +59440,7 @@ msgstr ""
#: doc/classes/SurfaceTool.xml
msgid "Helper tool to create geometry."
-msgstr ""
+msgstr "Un outil d'aide pour créer du géométrie."
#: doc/classes/SurfaceTool.xml
msgid ""
@@ -59340,7 +59667,7 @@ msgstr ""
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Returns the number of tabs."
-msgstr ""
+msgstr "Retourne le nombre d'onglets."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid ""
@@ -59467,48 +59794,47 @@ msgstr ""
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Emitted when switching to another tab."
-msgstr ""
+msgstr "Émis au changement d'onglet."
#: doc/classes/TabContainer.xml
msgid "Emitted when a tab is selected, even if it is the current tab."
-msgstr ""
+msgstr "Émis quand un onglet est sélectionné, même s'il est déjà l'actuel."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Align the tabs to the left."
-msgstr ""
+msgstr "Aligne les onglets à gauche."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Align the tabs to the center."
-msgstr ""
+msgstr "Aligne les onglets au centre."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Align the tabs to the right."
-msgstr ""
+msgstr "Aligne les onglets à droite."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Font color of inactive tabs."
-msgstr ""
+msgstr "La couleur de la police pour les onglets inactifs."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Font color of disabled tabs."
-msgstr ""
+msgstr "La couleur de la police pour les onglets désactivés."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "Font color of the currently selected tab."
-msgstr ""
+msgstr "La couleur de la police pour l'onglet actuellement sélectionné."
#: doc/classes/TabContainer.xml
-#, fuzzy
msgid "Horizontal separation between tabs."
-msgstr "Espacement horizontal entre les éléments."
+msgstr "L'espacement horizontal entre les onglets."
#: doc/classes/TabContainer.xml
msgid "The space at the left and right edges of the tab bar."
-msgstr ""
+msgstr "La marge à la gauche et la droite de la barre des onglets."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "The font used to draw tab names."
-msgstr ""
+msgstr "La police utilisée pour les noms des onglets."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid ""
@@ -59550,19 +59876,19 @@ msgstr ""
#: doc/classes/TabContainer.xml
msgid "The style for the background fill."
-msgstr ""
+msgstr "Le style pour le remplissage de l'arrière-plan."
#: doc/classes/TabContainer.xml
msgid "The style of inactive tabs."
-msgstr ""
+msgstr "Le style des onglets inactifs."
#: doc/classes/TabContainer.xml
msgid "The style of disabled tabs."
-msgstr ""
+msgstr "Le style des onglets désactivés."
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "The style of the currently selected tab."
-msgstr ""
+msgstr "Le style de l'onglet actuellement sélectionné."
#: doc/classes/Tabs.xml
msgid "Tabs control."
@@ -59615,7 +59941,7 @@ msgstr ""
#: doc/classes/Tabs.xml
msgid "Moves a tab from [code]from[/code] to [code]to[/code]."
-msgstr ""
+msgstr "Déplace un onglet de [code]from[/code] à [code]to[/code]."
#: doc/classes/Tabs.xml
msgid "Removes the tab at index [code]tab_idx[/code]."
@@ -59643,7 +59969,7 @@ msgstr ""
#: doc/classes/Tabs.xml
msgid "Select tab at index [code]tab_idx[/code]."
-msgstr ""
+msgstr "Sélectionne l'onglet à l'index [code]tab_idx[/code]."
#: doc/classes/Tabs.xml
#, fuzzy
@@ -59683,7 +60009,7 @@ msgstr ""
#: doc/classes/Tabs.xml
msgid "Emitted when a tab is hovered by the mouse."
-msgstr ""
+msgstr "Émis quand un onglet est survolé par la souris."
#: doc/classes/Tabs.xml
msgid "Represents the size of the [enum TabAlign] enum."
@@ -59691,7 +60017,7 @@ msgstr "Représente la taille de l’enum [enum TabAlign]."
#: doc/classes/Tabs.xml
msgid "Never show the close buttons."
-msgstr ""
+msgstr "Ne jamais afficher les boutons fermer."
#: doc/classes/Tabs.xml
msgid "Only show the close button on the currently active tab."
@@ -59699,7 +60025,7 @@ msgstr ""
#: doc/classes/Tabs.xml
msgid "Show the close button on all tabs."
-msgstr ""
+msgstr "Affiche le bouton fermer sur tous les onglets."
#: doc/classes/Tabs.xml
msgid "Represents the size of the [enum CloseButtonDisplayPolicy] enum."
@@ -59707,27 +60033,29 @@ msgstr "Représente la taille de l’enum [enum CloseButtonDisplayPolicy]."
#: doc/classes/Tabs.xml
msgid "The horizontal separation between the tabs."
-msgstr ""
+msgstr "L'espacement horizontal pour la séparation des onglets."
#: doc/classes/Tabs.xml
msgid "The icon for the close button (see [member tab_close_display_policy])."
msgstr ""
+"L'icône pour le bouton fermer (voir [member tab_close_display_policy])."
#: doc/classes/Tabs.xml
msgid "Background of the close button when it's being hovered with the cursor."
msgstr ""
+"L'arrière-plan du bouton fermer quand le curseur de la souris le survole."
#: doc/classes/Tabs.xml
msgid "Background of the close button when it's being pressed."
-msgstr ""
+msgstr "L'arrière-plan du bouton fermer quand pressé."
#: doc/classes/Tabs.xml
msgid "The style of an inactive tab."
-msgstr ""
+msgstr "Le style des onglets inactifs."
#: doc/classes/Tabs.xml
msgid "The style of a disabled tab"
-msgstr ""
+msgstr "Le style des onglets désactivés"
#: doc/classes/TCP_Server.xml
msgid "A TCP server."
@@ -59742,12 +60070,16 @@ msgstr ""
#: doc/classes/TCP_Server.xml
msgid "Returns [code]true[/code] if a connection is available for taking."
msgstr ""
+"Retourne [code]true[/code] si une connexion est disponible pour être "
+"utilisée."
#: doc/classes/TCP_Server.xml
msgid ""
"Returns [code]true[/code] if the server is currently listening for "
"connections."
msgstr ""
+"Retourne [code]true[/code] si un serveur écoute actuellement pour de "
+"nouvelles connexions."
#: doc/classes/TCP_Server.xml
msgid ""
@@ -59771,6 +60103,8 @@ msgstr "Arrête d'écouter."
msgid ""
"If a connection is available, returns a StreamPeerTCP with the connection."
msgstr ""
+"Si une connexion est disponible, retourne un StreamPeerTCP avec cette "
+"connexion."
#: doc/classes/TextEdit.xml
msgid "Multiline text editing control."
@@ -59818,7 +60152,7 @@ msgstr "Efface l'historique des annulations."
#: doc/classes/TextEdit.xml
msgid "Copy's the current text selection."
-msgstr ""
+msgstr "Copie l'actuelle sélection du texte."
#: doc/classes/TextEdit.xml
msgid "Returns the column the editing cursor is at."
@@ -59862,7 +60196,7 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid "Returns an array containing the line number of each breakpoint."
-msgstr ""
+msgstr "Retourne la liste du numéro de ligne de chaque point d'arrêt."
#: doc/classes/TextEdit.xml
#, fuzzy
@@ -59871,7 +60205,7 @@ msgstr "Retourne la position du point à l'index [code]point[/code]."
#: doc/classes/TextEdit.xml
msgid "Returns the text of a specific line."
-msgstr ""
+msgstr "Retourne le texte pour la ligne renseignée."
#: doc/classes/TextEdit.xml
msgid ""
@@ -59889,12 +60223,12 @@ msgid "Returns the height of a largest line."
msgstr "Retourne la hauteur du contenu."
#: doc/classes/TextEdit.xml
-#, fuzzy
msgid ""
"Returns the width in pixels of the [code]wrap_index[/code] on [code]line[/"
"code]."
msgstr ""
-"Déplace l’élément de l’index [code]from_idx[/code] à [code]to_idx[/code]."
+"Retourne la largeur en pixels de [code]wrap_index[/code] à la [code]line[/"
+"code]."
#: doc/classes/TextEdit.xml
#, fuzzy
@@ -59946,7 +60280,7 @@ msgstr "Retourne la ligne de début de sélection."
#: doc/classes/TextEdit.xml
msgid "Returns the text inside the selection."
-msgstr ""
+msgstr "Retourne le texte de la sélection."
#: doc/classes/TextEdit.xml
msgid "Returns the selection end column."
@@ -60023,7 +60357,7 @@ msgstr "Renvoie le texte de la colonne donnée."
#: doc/classes/TextEdit.xml
msgid "Returns [code]true[/code] if the selection is active."
-msgstr ""
+msgstr "Retourne [code]true[/code] si la sélection est active."
#: doc/classes/TextEdit.xml
msgid ""
@@ -60151,13 +60485,13 @@ msgstr "Si [code]true[/code], un clic droit affiche le menu contextuel."
msgid ""
"If [code]true[/code], the \"space\" character will have a visible "
"representation."
-msgstr ""
+msgstr "Si [code]true[/code], le caractère espace \" \" sera affiché."
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], the \"tab\" character will have a visible "
"representation."
-msgstr ""
+msgstr "Si [code]true[/code], le caractère de tabulation sera affiché."
#: doc/classes/TextEdit.xml
msgid ""
@@ -60275,11 +60609,11 @@ msgstr "Émis lorsque le curseur change."
#: doc/classes/TextEdit.xml
msgid "Emitted when the info icon is clicked."
-msgstr ""
+msgstr "Émis quand l'icône d'information est cliqué."
#: doc/classes/TextEdit.xml
msgid "Match case when searching."
-msgstr ""
+msgstr "Respecte la casse lors de la recherche."
#: doc/classes/TextEdit.xml
msgid "Match whole words when searching."
@@ -60355,7 +60689,7 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid "Sets the highlight [Color] of text selections."
-msgstr ""
+msgstr "Définit la [Color] de surlignage pour la sélection de texte."
#: doc/classes/TextEdit.xml
msgid ""
@@ -60365,7 +60699,7 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid "Sets the spacing between the lines."
-msgstr ""
+msgstr "Définit l'espacement entre les lignes."
#: doc/classes/TextEdit.xml
msgid "Sets the default [Font]."
@@ -60373,11 +60707,11 @@ msgstr "Définit la [Font] par défaut."
#: doc/classes/TextEdit.xml
msgid "Sets a custom [Texture] for tab text characters."
-msgstr ""
+msgstr "Définit la [Texture] personnalisée pour le caractère de tabulation."
#: doc/classes/TextEdit.xml
msgid "Sets the [StyleBox] of this [TextEdit]."
-msgstr ""
+msgstr "Définit la [StyleBox] pour ce [TextEdit]."
#: doc/classes/TextEdit.xml
msgid ""
@@ -60481,7 +60815,7 @@ msgstr ""
#: doc/classes/Texture.xml doc/classes/VisualServer.xml
msgid "Converts the texture to the sRGB color space."
-msgstr ""
+msgstr "Converti la texture dans l'espace de couleur sRGB."
#: doc/classes/Texture.xml
msgid ""
@@ -60492,7 +60826,7 @@ msgstr ""
#: doc/classes/Texture.xml doc/classes/VisualServer.xml
msgid "Texture is a video surface."
-msgstr ""
+msgstr "La texture est une surface vidéo."
#: doc/classes/Texture3D.xml
#, fuzzy
@@ -60755,9 +61089,8 @@ msgid "Default flags for [Texture3D]. [constant FLAG_FILTER] is enabled."
msgstr ""
#: doc/classes/TextureLayered.xml
-#, fuzzy
msgid "Texture will generate mipmaps on creation."
-msgstr "La texture ne se répètera pas."
+msgstr "La texture génèrera des mipmaps à la création."
#: doc/classes/TextureLayered.xml
msgid "Texture will repeat when UV used is outside the 0-1 range."
@@ -60865,6 +61198,8 @@ msgstr ""
#: doc/classes/TextureProgress.xml
msgid "[Texture] that draws under the progress bar. The bar's background."
msgstr ""
+"La [Texture] qui est affichée derrière la barre de progression, en arrière-"
+"plan."
#: doc/classes/TextureProgress.xml
msgid ""
@@ -60992,10 +61327,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
#, fuzzy
msgid "Clears all values on the theme."
msgstr "Efface toutes les valeurs sur le thème."
@@ -61101,13 +61432,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
-"Retourne [code]true[/code] si la chaîne de caractères est vide (longueur de "
-"la chaîne égale à [code]0[/code])."
#: doc/classes/Theme.xml
msgid ""
@@ -61401,11 +61730,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -61453,17 +61783,16 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
msgid "A thread running with lower priority than normally."
-msgstr "Un thread fonctionnant avec une priorité inférieure à la normale."
+msgstr "Un fil d'exécution avec une priorité inférieure à la normale."
#: doc/classes/Thread.xml
msgid "A thread with a standard priority."
-msgstr "Un thread avec une priorité standard."
+msgstr "Un fil d'exécution avec une priorité normale."
#: doc/classes/Thread.xml
msgid "A thread running with higher priority than normally."
-msgstr ""
+msgstr "Un fil d'exécution avec une priorité supérieure à la normale."
#: doc/classes/TileMap.xml
msgid "Node for 2D tile-based maps."
@@ -61481,15 +61810,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -61646,8 +61972,9 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
msgid "If [code]true[/code], the cell's UVs will be clipped."
-msgstr ""
+msgstr "Si [code]true[/code], les UV de la cellule seront limités."
#: doc/classes/TileMap.xml
msgid "The custom [Transform2D] to be applied to the TileMap's cells."
@@ -61824,8 +62151,9 @@ msgid "Tile origin at its bottom-left corner."
msgstr "Origine de tuile à son coin inférieur gauche."
#: doc/classes/TileSet.xml
+#, fuzzy
msgid "Tile library for tilemaps."
-msgstr ""
+msgstr "La bibliothèque des tuiles pour les cartes."
#: doc/classes/TileSet.xml
msgid ""
@@ -62087,15 +62415,20 @@ msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the tile's material."
-msgstr ""
+msgstr "Défini le matériel de la tuile."
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
-msgstr "Définit la couleur de modulation de la tuile."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
+msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the tile's name."
-msgstr ""
+msgstr "Défini le nom de la tuile."
#: doc/classes/TileSet.xml
msgid "Sets the tile's navigation polygon."
@@ -62145,7 +62478,7 @@ msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the tile's texture."
-msgstr ""
+msgstr "Définit la texture de la tuile."
#: doc/classes/TileSet.xml
msgid "Sets the tile's texture offset."
@@ -62360,82 +62693,92 @@ msgstr ""
#: doc/classes/Time.xml
msgid "The month of January, represented numerically as [code]01[/code]."
-msgstr ""
+msgstr "Le mois de janvier, représenté numériquement par [code]01[/code]."
#: doc/classes/Time.xml
msgid "The month of February, represented numerically as [code]02[/code]."
-msgstr ""
+msgstr "Le mois de février, représenté numériquement par [code]02[/code]."
#: doc/classes/Time.xml
msgid "The month of March, represented numerically as [code]03[/code]."
-msgstr ""
+msgstr "Le mois de mars, représenté numériquement par [code]03[/code]."
#: doc/classes/Time.xml
msgid "The month of April, represented numerically as [code]04[/code]."
-msgstr ""
+msgstr "Le mois de avril, représenté numériquement par [code]04[/code]."
#: doc/classes/Time.xml
msgid "The month of May, represented numerically as [code]05[/code]."
-msgstr ""
+msgstr "Le mois de mai, représenté numériquement par [code]05[/code]."
#: doc/classes/Time.xml
msgid "The month of June, represented numerically as [code]06[/code]."
-msgstr ""
+msgstr "Le mois de juin, représenté numériquement par [code]06[/code]."
#: doc/classes/Time.xml
msgid "The month of July, represented numerically as [code]07[/code]."
-msgstr ""
+msgstr "Le mois de juillet, représenté numériquement par [code]07[/code]."
#: doc/classes/Time.xml
msgid "The month of August, represented numerically as [code]08[/code]."
-msgstr ""
+msgstr "Le mois de août, représenté numériquement par [code]08[/code]."
#: doc/classes/Time.xml
msgid "The month of September, represented numerically as [code]09[/code]."
-msgstr ""
+msgstr "Le mois de septembre, représenté numériquement par [code]09[/code]."
#: doc/classes/Time.xml
msgid "The month of October, represented numerically as [code]10[/code]."
-msgstr ""
+msgstr "Le mois de octobre, représenté numériquement par [code]10[/code]."
#: doc/classes/Time.xml
msgid "The month of November, represented numerically as [code]11[/code]."
-msgstr ""
+msgstr "Le mois de novembre, représenté numériquement par [code]11[/code]."
#: doc/classes/Time.xml
msgid "The month of December, represented numerically as [code]12[/code]."
-msgstr ""
+msgstr "Le mois de décembre, représenté numériquement par [code]12[/code]."
#: doc/classes/Time.xml
msgid "The day of the week Sunday, represented numerically as [code]0[/code]."
msgstr ""
+"Le jour de la semaine du dimanche, représenté numériquement par [code]0[/"
+"code]."
#: doc/classes/Time.xml
msgid "The day of the week Monday, represented numerically as [code]1[/code]."
msgstr ""
+"Le jour de la semaine du lundi, représenté numériquement par [code]1[/code]."
#: doc/classes/Time.xml
msgid "The day of the week Tuesday, represented numerically as [code]2[/code]."
msgstr ""
+"Le jour de la semaine du mardi, représenté numériquement par [code]2[/code]."
#: doc/classes/Time.xml
msgid ""
"The day of the week Wednesday, represented numerically as [code]3[/code]."
msgstr ""
+"Le jour de la semaine du mercredi, représenté numériquement par [code]3[/"
+"code]."
#: doc/classes/Time.xml
msgid ""
"The day of the week Thursday, represented numerically as [code]4[/code]."
msgstr ""
+"Le jour de la semaine du jeudi, représenté numériquement par [code]4[/code]."
#: doc/classes/Time.xml
msgid "The day of the week Friday, represented numerically as [code]5[/code]."
msgstr ""
+"Le jour de la semaine du vendredi, représenté numériquement par [code]5[/"
+"code]."
#: doc/classes/Time.xml
msgid ""
"The day of the week Saturday, represented numerically as [code]6[/code]."
msgstr ""
+"Le jour de la semaine du samedi, représenté numériquement par [code]6[/code]."
#: doc/classes/Timer.xml
msgid "A countdown timer."
@@ -62519,7 +62862,7 @@ msgstr ""
#: doc/classes/ToolButton.xml
msgid "Flat button helper class."
-msgstr ""
+msgstr "Classe d'aide pour boutons plats."
#: doc/classes/ToolButton.xml
msgid ""
@@ -62532,9 +62875,8 @@ msgid ""
msgstr ""
#: doc/classes/ToolButton.xml
-#, fuzzy
msgid "Default text [Color] of the [ToolButton]."
-msgstr "[StyleBox] par défaut pour le [Button]."
+msgstr "Le [StyleBox] par défaut pour le [ToolButton]."
#: doc/classes/ToolButton.xml
#, fuzzy
@@ -62680,7 +63022,7 @@ msgstr "Toujours visible."
#: doc/classes/TouchScreenButton.xml
msgid "Visible on touch screens only."
-msgstr ""
+msgstr "Visible que sur les écrans tactiles."
#: doc/classes/Transform.xml
msgid "3D transformation (3×4 matrix)."
@@ -62922,6 +63264,8 @@ msgid ""
"Transforms the given [Vector2], [Rect2], or [PoolVector2Array] by this "
"transform."
msgstr ""
+"Transforme le [Vector2], [Rect2], ou [PoolVector2Array] donné par cette "
+"transformation."
#: doc/classes/Transform2D.xml
msgid ""
@@ -62965,17 +63309,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -63002,7 +63335,7 @@ msgstr "Retourne tous les messages (clés)."
#: doc/classes/Translation.xml
msgid "The locale of the translation."
-msgstr ""
+msgstr "La langue de la traduction."
#: doc/classes/TranslationServer.xml
msgid "Server that manages all translations."
@@ -63018,7 +63351,7 @@ msgstr ""
#: doc/classes/TranslationServer.xml
msgid "Adds a [Translation] resource."
-msgstr ""
+msgstr "Ajoute une ressource [Translation]."
#: doc/classes/TranslationServer.xml
msgid "Clears the server from all translations."
@@ -63094,7 +63427,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -63120,6 +63454,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -63168,9 +63507,9 @@ msgstr "Renvoyez le port IP de l’hôte actuellement connecté."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -63181,8 +63520,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -63223,7 +63562,7 @@ msgstr ""
#: doc/classes/Tree.xml
#, fuzzy
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "Définit la position du nœud spécifié."
#: doc/classes/Tree.xml
@@ -63592,11 +63931,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -63633,12 +63971,30 @@ msgstr ""
"est préssé. Voir [enum JoyButtonList]."
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Rentourne [code]true[/code] (vrai) si le bouton d'index [code]button[/code] "
+"est préssé. Voir [enum JoyButtonList]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"Rentourne [code]true[/code] (vrai) si le bouton d'index [code]button[/code] "
+"est préssé. Voir [enum JoyButtonList]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -63790,7 +64146,7 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid "Selects the column [code]column[/code]."
-msgstr ""
+msgstr "Sélectionne la colonne [code]column[/code]."
#: doc/classes/TreeItem.xml
#, fuzzy
@@ -63836,7 +64192,7 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], column [code]column[/code] is editable."
-msgstr ""
+msgstr "Si [code]true[/code], la colonne [code]column[/code] est modifiable."
#: doc/classes/TreeItem.xml
msgid ""
@@ -63844,9 +64200,8 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
-#, fuzzy
msgid "Sets the given column's icon [Texture]."
-msgstr "Définit le texte de l’info-bulle de la colonne donnée."
+msgstr "Définit la [Texture] d'icône pour la colonne donnée."
#: doc/classes/TreeItem.xml
msgid "Sets the given column's icon's maximum width."
@@ -63890,9 +64245,8 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
-#, fuzzy
msgid "Sets the given column's text value."
-msgstr "Renvoie le texte de la colonne donnée."
+msgstr "Définit le texte pour la colonne donnée."
#: doc/classes/TreeItem.xml
msgid ""
@@ -63939,7 +64293,7 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid "Center text. See [code]set_text_align()[/code]."
-msgstr ""
+msgstr "Centre du texte. Voir [code]set_text_align()[/code]."
#: doc/classes/TreeItem.xml
msgid "Align text to the right. See [code]set_text_align()[/code]."
@@ -64081,7 +64435,7 @@ msgstr ""
#: doc/classes/Tween.xml
msgid "Stops animation and removes all tweens."
-msgstr ""
+msgstr "Arrête l'animation et retire tous les tweens."
#: doc/classes/Tween.xml
msgid ""
@@ -64800,7 +65154,6 @@ msgid "Socket error."
msgstr "Erreur de socket."
#: modules/upnp/doc_classes/UPNP.xml
-#, fuzzy
msgid "Error allocating memory."
msgstr "Erreur d’allocation de mémoire."
@@ -65006,12 +65359,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr "Conteneur vertical."
@@ -65042,8 +65389,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -65307,11 +65653,11 @@ msgstr ""
#: doc/classes/Vector2.xml
msgid "Enumerated value for the X axis."
-msgstr ""
+msgstr "Les valeurs énumérées pour l'axe X."
#: doc/classes/Vector2.xml
msgid "Enumerated value for the Y axis."
-msgstr ""
+msgstr "Les valeurs énumérées pour l'axe Y."
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid "Zero vector, a vector with all components set to [code]0[/code]."
@@ -65492,30 +65838,32 @@ msgid ""
msgstr ""
#: doc/classes/Vector3.xml
-#, fuzzy
msgid "Up unit vector."
-msgstr "Vecteur d'unité vers le haut."
+msgstr "Vecteur unitaire vers le haut."
#: doc/classes/Vector3.xml
-#, fuzzy
msgid "Down unit vector."
-msgstr "Vecteur d'unité vers le bas."
+msgstr "Vecteur unitaire vers le bas."
#: doc/classes/Vector3.xml
msgid ""
"Forward unit vector. Represents the local direction of forward, and the "
"global direction of north."
msgstr ""
+"Vecteur unitaire en avant. Représente la direction locale en avant, et la "
+"direction globale vers le nord."
#: doc/classes/Vector3.xml
msgid ""
"Back unit vector. Represents the local direction of back, and the global "
"direction of south."
msgstr ""
+"Vecteur unitaire vers l'arrière. Représente la direction locale vers "
+"l'arrière, et la direction globale vers le sud."
#: doc/classes/VehicleBody.xml
msgid "Physics body that simulates the behavior of a car."
-msgstr ""
+msgstr "Le corps physique qui simule le comportement d'une voiture."
#: doc/classes/VehicleBody.xml
msgid ""
@@ -65569,7 +65917,7 @@ msgstr ""
#: doc/classes/VehicleWheel.xml
msgid "Physics object that simulates the behavior of a wheel."
-msgstr ""
+msgstr "L'objet physique qui simule le comportement d'une roue."
#: doc/classes/VehicleWheel.xml
msgid ""
@@ -65715,6 +66063,16 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "Conteneur vertical."
+
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical version of [FlowContainer]."
+msgstr "La version verticale de [Separator]."
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr "Contrôle pour la lecture de flux vidéo."
@@ -65764,7 +66122,7 @@ msgstr ""
#: doc/classes/VideoPlayer.xml
msgid "The embedded audio track to play."
-msgstr ""
+msgstr "La piste audio intégrée à lire."
#: doc/classes/VideoPlayer.xml
msgid "If [code]true[/code], playback starts when the scene loads."
@@ -65787,11 +66145,11 @@ msgstr ""
#: doc/classes/VideoPlayer.xml
msgid "If [code]true[/code], the video is paused."
-msgstr ""
+msgstr "Si [code]true[/code], la vidéo est en pause."
#: doc/classes/VideoPlayer.xml
msgid "The assigned video stream. See description for supported formats."
-msgstr ""
+msgstr "Le flux vidéo assigné. Voir la description pour les formats supportés."
#: doc/classes/VideoPlayer.xml
msgid ""
@@ -65802,7 +66160,7 @@ msgstr ""
#: doc/classes/VideoPlayer.xml
msgid "Audio volume as a linear value."
-msgstr ""
+msgstr "Le volume sonore comme valeur linéaire."
#: doc/classes/VideoPlayer.xml
msgid "Audio volume in dB."
@@ -65849,7 +66207,7 @@ msgstr ""
#: modules/theora/doc_classes/VideoStreamTheora.xml
msgid "[VideoStream] resource for Ogg Theora videos."
-msgstr ""
+msgstr "Ressource [VideoStream] pour les vidéos Ogg Theora."
#: modules/theora/doc_classes/VideoStreamTheora.xml
msgid ""
@@ -65904,7 +66262,7 @@ msgstr ""
#: doc/classes/Viewport.xml
msgid "Creates a sub-view into the screen."
-msgstr ""
+msgstr "Créé une sous-vue à l'écran."
#: doc/classes/Viewport.xml
msgid ""
@@ -65927,28 +66285,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -65976,8 +66330,12 @@ msgid "Returns the topmost modal in the stack."
msgstr "Retourne le mode de mise à jour d'une piste de valeur."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+#, fuzzy
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
+"Retourne la position de la souris par rapport à la position de cet élément."
#: doc/classes/Viewport.xml
msgid "Returns information about the viewport from the rendering pipeline."
@@ -66071,7 +66429,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -66269,7 +66629,7 @@ msgstr ""
#: doc/classes/Viewport.xml
msgid "The rendering mode of viewport."
-msgstr ""
+msgstr "Le mode de rendu de la fenêtre d'affichage."
#: doc/classes/Viewport.xml
msgid ""
@@ -66369,19 +66729,20 @@ msgstr "Quantité de sommets dans l'image."
#: doc/classes/Viewport.xml
msgid "Amount of material changes in frame."
-msgstr ""
+msgstr "Le nombre de matériaux changés à chaque trame."
#: doc/classes/Viewport.xml
msgid "Amount of shader changes in frame."
-msgstr ""
+msgstr "Le nombre de shaders changés à chaque trame."
#: doc/classes/Viewport.xml
msgid "Amount of surface changes in frame."
-msgstr ""
+msgstr "Le nombre de surfaces changées à chaque trame."
#: doc/classes/Viewport.xml
+#, fuzzy
msgid "Amount of draw calls in frame."
-msgstr ""
+msgstr "Le nombre d'appels d'affichage à chaque trame."
#: doc/classes/Viewport.xml
#, fuzzy
@@ -66398,7 +66759,7 @@ msgstr "Les objets sont affichés normalement."
#: doc/classes/Viewport.xml
msgid "Objects are displayed without light information."
-msgstr ""
+msgstr "Les objets sont affichés sans les informations de lumière."
#: doc/classes/Viewport.xml
msgid ""
@@ -66408,7 +66769,7 @@ msgstr ""
#: doc/classes/Viewport.xml
msgid "Objects are displayed in wireframe style."
-msgstr ""
+msgstr "Les objets sont affichés en fil de fer."
#: doc/classes/Viewport.xml
msgid "Multisample anti-aliasing mode disabled. This is the default value."
@@ -66468,7 +66829,7 @@ msgstr ""
#: doc/classes/Viewport.xml
msgid "Never clear the render target."
-msgstr ""
+msgstr "Ne jamais nettoyer la cible de rendu."
#: doc/classes/Viewport.xml
msgid ""
@@ -66571,9 +66932,8 @@ msgid "This enabler will pause [AnimationPlayer] nodes."
msgstr "Cet activateur mettra en pause les nœuds [AnimationPlayer]."
#: doc/classes/VisibilityEnabler.xml
-#, fuzzy
msgid "This enabler will freeze [RigidBody] nodes."
-msgstr "Cet activateur gèlera les nœuds [RigidBody2D]."
+msgstr "Cet activateur gèlera les nœuds [RigidBody]."
#: doc/classes/VisibilityEnabler.xml doc/classes/VisibilityEnabler2D.xml
msgid "Represents the size of the [enum Enabler] enum."
@@ -66627,9 +66987,8 @@ msgid "This enabler will freeze [RigidBody2D] nodes."
msgstr "Cet activateur gèlera les nœuds [RigidBody2D]."
#: doc/classes/VisibilityEnabler2D.xml
-#, fuzzy
msgid "This enabler will stop [Particles2D] nodes."
-msgstr "Cet activateur arrêtera les nœuds [GPUParticles2D]."
+msgstr "Cet activateur arrêtera les nœuds [Particles2D]."
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will stop the parent's _process function."
@@ -66750,7 +67109,7 @@ msgstr "Émis lorsque le VisibilityNotifier2D sort d’une vue [Viewport]."
#: doc/classes/VisualInstance.xml
msgid "Parent of all visual 3D nodes."
-msgstr ""
+msgstr "Le parent de tous les nœuds visuels 3D."
#: doc/classes/VisualInstance.xml
msgid ""
@@ -66829,13 +67188,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66912,7 +67264,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Returns a node's position in pixels."
-msgstr ""
+msgstr "Retourne la position du nœud en pixels."
#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Returns the default (initial) value of a variable."
@@ -66920,7 +67272,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Returns whether a variable is exported."
-msgstr ""
+msgstr "Retourne quand la variable est exportée."
#: modules/visual_script/doc_classes/VisualScript.xml
msgid ""
@@ -66974,11 +67326,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Change the name of a function."
-msgstr ""
+msgstr "Change le nom de la fonction."
#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Change the name of a variable."
-msgstr ""
+msgstr "Change le nom de la variable."
#: modules/visual_script/doc_classes/VisualScript.xml
msgid ""
@@ -67170,9 +67522,10 @@ msgid ""
"Easing function, based on exponent. 0 is constant, 1 is linear, 0 to 1 is "
"ease-in, 1+ is ease out. Negative values are in-out/out in."
msgstr ""
-"Fonction d'atténuation, basée sur l'exposant. 0 pour constante, 1 pour "
-"linéaire, + de 1 pour décélération. Les valeurs négatives sont par "
-"intermittence."
+"Fonction d'assouplissement, basée sur l'exposant. 0 pour constant, 1 pour "
+"linéaire, de 0 à 1 pour une entrée progressive, 1+ pour une sortie "
+"progressive. Une valeur négative est pour à la fois une entrée et une sortie "
+"progressive."
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
msgid ""
@@ -67328,9 +67681,8 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
-#, fuzzy
msgid "Serialize a [Variant] to a [PoolByteArray]."
-msgstr "Sérialise une [Variant] vers un [PackedByteArray]."
+msgstr "Sérialise une [Variant] dans un [PoolByteArray]."
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
msgid ""
@@ -67535,9 +67887,8 @@ msgid "Return the specified output port's hint string."
msgstr "Renvoie le nom du port d'entrée spécifié."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml
-#, fuzzy
msgid "Return the specified output port's name."
-msgstr "Renvoie le nom du port d'entrée spécifié."
+msgstr "Retourne le nom du port de sortie spécifié."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml
#, fuzzy
@@ -67802,11 +68153,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
msgid "The method will be called remotely using an unreliable protocol."
-msgstr ""
+msgstr "Cette méthode sera appelée à distance via un protocole peu fiable."
#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
msgid "The method will be called remotely for the given peer."
-msgstr ""
+msgstr "Cette méthode sera appelée à distance pour le pair donné."
#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
msgid ""
@@ -68476,7 +68827,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptSubCall.xml
msgid "Called by this node."
-msgstr ""
+msgstr "Appelé pour ce nœud."
#: modules/visual_script/doc_classes/VisualScriptSwitch.xml
msgid "Branches program flow based on a given input's value."
@@ -68672,13 +69023,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -68739,7 +69083,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets [Transform] of camera."
-msgstr ""
+msgstr "Défini [Transform] de la caméra."
#: doc/classes/VisualServer.xml
msgid ""
@@ -68900,7 +69244,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets the color that modulates the [CanvasItem] and its children."
-msgstr ""
+msgstr "Définit la couleur qui module le [CanvasItem] et de ces enfants."
#: doc/classes/VisualServer.xml
msgid ""
@@ -69126,7 +69470,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Modulates all colors in the given canvas."
-msgstr ""
+msgstr "Module toutes les couleurs du canevas spécifié."
#: doc/classes/VisualServer.xml
#, fuzzy
@@ -69188,13 +69532,13 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets the intensity of the background color."
-msgstr ""
+msgstr "Définit l'intensité de la couleur de l'arrière-plan."
#: doc/classes/VisualServer.xml
msgid "Sets the maximum layer to use if using Canvas background mode."
@@ -69478,7 +69822,10 @@ msgstr "Retourne la matrice de transformation globale de cet élément."
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70130,7 +70477,7 @@ msgstr "Retourne le mode de forme de mélange d’un maillage."
#: doc/classes/VisualServer.xml
msgid "Returns a mesh's surface's material."
-msgstr ""
+msgstr "Retourne le matériau de la surface du maillage."
#: doc/classes/VisualServer.xml
#, fuzzy
@@ -70144,7 +70491,7 @@ msgstr "Retourne la traduction d’un message."
#: doc/classes/VisualServer.xml
msgid "Sets a mesh's surface's material."
-msgstr ""
+msgstr "Définit le matériau de la surface du maillage."
#: doc/classes/VisualServer.xml
msgid ""
@@ -70209,7 +70556,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Returns the [Transform] of the specified instance."
-msgstr ""
+msgstr "Retourne la [Transform] de l'instance spécifiée."
#: doc/classes/VisualServer.xml
msgid ""
@@ -70892,11 +71239,11 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets a viewport's camera."
-msgstr ""
+msgstr "Définit la caméra de la fenêtre d'affichage."
#: doc/classes/VisualServer.xml
msgid "Sets a viewport's canvas."
-msgstr ""
+msgstr "Définit le canevas de la fenêtre d'affichage."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71144,10 +71491,13 @@ msgstr "Nombre de poids / os par sommet."
#: doc/classes/VisualServer.xml
msgid "The minimum Z-layer for canvas items."
msgstr ""
+"Le niveau minimal du claque de profondeur pour les éléments de canevas."
#: doc/classes/VisualServer.xml
+#, fuzzy
msgid "The maximum Z-layer for canvas items."
msgstr ""
+"Le niveau maximal du claque de profondeur pour les éléments de canevas."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71160,41 +71510,35 @@ msgstr "Énumération inutilisée dans Godot 3.x."
#: doc/classes/VisualServer.xml
msgid "The minimum renderpriority of all materials."
-msgstr ""
+msgstr "La priorité minimale de rendu de tous les matériaux."
#: doc/classes/VisualServer.xml
msgid "The maximum renderpriority of all materials."
-msgstr ""
+msgstr "La priorité maximale de rendu de tous les matériaux."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the left side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté gauche d'un cubemap."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the right side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté droit d'un cubemap."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the bottom side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté du bas d'un cubemap."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the top side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté du haut d'un cubemap."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the front side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté avant d'un cubemap."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Marks the back side of a cubemap."
-msgstr "Définit le titre d’une colonne."
+msgstr "Définit le côté arrière d'un cubemap."
#: doc/classes/VisualServer.xml
msgid "Normal texture with 2 dimensions, width and height."
@@ -71208,7 +71552,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "An array of 2-dimensional textures."
-msgstr ""
+msgstr "Un tableau de textures 2D."
#: doc/classes/VisualServer.xml
msgid "A 3-dimensional texture with width, height, and depth."
@@ -71257,20 +71601,19 @@ msgstr "Le tableau est un tableau normal."
#: doc/classes/VisualServer.xml
msgid "Array is a tangent array."
-msgstr ""
+msgstr "Le tableau est un tableau de tangentes."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Array is a color array."
-msgstr "Array est un tableau de couleurs."
+msgstr "Le tableau est un tableau de couleurs."
#: doc/classes/VisualServer.xml
msgid "Array is an UV coordinates array."
-msgstr ""
+msgstr "Le tableau est un tableau de coordonnées UV."
#: doc/classes/VisualServer.xml
msgid "Array is an UV coordinates array for the second UV coordinates."
-msgstr ""
+msgstr "Le tableau est un tableau de coordonnées UV secondaires (UV2)."
#: doc/classes/VisualServer.xml
msgid "Array contains bone information."
@@ -71282,7 +71625,7 @@ msgstr "Le tableau est une information sur le poids."
#: doc/classes/VisualServer.xml
msgid "Array is index array."
-msgstr ""
+msgstr "Le tableau est un tableau d'index."
#: doc/classes/VisualServer.xml
msgid "Flag used to mark a vertex array."
@@ -71302,16 +71645,17 @@ msgstr "Drapeau utilisé pour marquer un tableau de couleurs."
#: doc/classes/VisualServer.xml
msgid "Flag used to mark an UV coordinates array."
-msgstr ""
+msgstr "Drapeau utilisé pour marquer un tableau de coordonnées UV."
#: doc/classes/VisualServer.xml
msgid ""
"Flag used to mark an UV coordinates array for the second UV coordinates."
msgstr ""
+"Drapeau utilisé pour marquer un tableau de coordonnées UV secondaires (UV2)."
#: doc/classes/VisualServer.xml
msgid "Flag used to mark a bone information array."
-msgstr ""
+msgstr "Drapeau utilisé pour marquer un tableau d'informations d'os."
#: doc/classes/VisualServer.xml
msgid "Flag used to mark a weights array."
@@ -71478,6 +71822,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Use orthogonal shadow projection for directional light."
msgstr ""
+"Utilise une projection d'ombre orthogonale pour la source de lumière "
+"directionnelle."
#: doc/classes/VisualServer.xml
msgid "Use 2 splits for shadow projection when using directional light."
@@ -71508,19 +71854,19 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Update the viewport whenever it is visible."
-msgstr ""
+msgstr "Met à jour la fenêtre d'affichage quand elle est visible."
#: doc/classes/VisualServer.xml
msgid "Always update the viewport."
-msgstr ""
+msgstr "Toujours mettre à jour la fenêtre d'affichage."
#: doc/classes/VisualServer.xml
msgid "The viewport is always cleared before drawing."
-msgstr ""
+msgstr "La fenêtre d'affichage est toujours nettoyée avant d'être dessinée."
#: doc/classes/VisualServer.xml
msgid "The viewport is never cleared before drawing."
-msgstr ""
+msgstr "La fenêtre d'affichage n'est jamais nettoyée avant d'être dessinée."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71530,27 +71876,23 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Multisample antialiasing is disabled."
-msgstr ""
+msgstr "Le multi-échantillonnage est désactivé."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Multisample antialiasing is set to 2×."
-msgstr "Utilisez l'anticrénelage multi-échantillons 2x."
+msgstr "L'anticrénelage multi-échantillons 2x."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Multisample antialiasing is set to 4×."
-msgstr "Utilisez l'anticrénelage multi-échantillons 2x."
+msgstr "L'anticrénelage multi-échantillons 4x."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Multisample antialiasing is set to 8×."
-msgstr "Utilisez l'anticrénelage multi-échantillons 2x."
+msgstr "L'anticrénelage multi-échantillons 8x."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Multisample antialiasing is set to 16×."
-msgstr "Utilisez l'anticrénelage multi-échantillons 2x."
+msgstr "L'anticrénelage multi-échantillons 16x."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71574,35 +71916,35 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "The Viewport renders 3D with effects."
-msgstr ""
+msgstr "La fenêtre d'affichage rend en 3D avec les effets."
#: doc/classes/VisualServer.xml
msgid "The Viewport renders 3D but without effects."
-msgstr ""
+msgstr "La fenêtre d'affichage rend en 3D mais sans les effets."
#: doc/classes/VisualServer.xml
msgid "Number of objects drawn in a single frame."
-msgstr ""
+msgstr "Le nombre d'objets affichés en une seule trame."
#: doc/classes/VisualServer.xml
msgid "Number of vertices drawn in a single frame."
-msgstr ""
+msgstr "Le nombre de sommets affichés en une seule trame."
#: doc/classes/VisualServer.xml
msgid "Number of material changes during this frame."
-msgstr "Nombre de changements de matériau au cours de cette image."
+msgstr "Nombre de changements de matériau pour cette trame."
#: doc/classes/VisualServer.xml
msgid "Number of shader changes during this frame."
-msgstr ""
+msgstr "Nombre de changements de shaders pour cette trame."
#: doc/classes/VisualServer.xml
msgid "Number of surface changes during this frame."
-msgstr "Nombre de changements de surface pendant cette image."
+msgstr "Nombre de changements de surfaces pour cette trame."
#: doc/classes/VisualServer.xml
msgid "Number of draw calls during this frame."
-msgstr ""
+msgstr "Nombre d'appels d'affichage pour cette trame."
#: doc/classes/VisualServer.xml
#, fuzzy
@@ -71620,23 +71962,24 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Debug draw is disabled. Default setting."
-msgstr ""
+msgstr "L'affichage de débogage est désactivé. La valeur par défaut."
#: doc/classes/VisualServer.xml
+#, fuzzy
msgid "Debug draw sets objects to unshaded."
-msgstr ""
+msgstr "L'affichage de débogage est sans matériau."
#: doc/classes/VisualServer.xml
msgid "Overwrites clear color to [code](0,0,0,0)[/code]."
-msgstr ""
+msgstr "Écrase la couleur d'effacement avec [code](0,0,0,0)[/code]."
#: doc/classes/VisualServer.xml
msgid "Debug draw draws objects in wireframe."
-msgstr ""
+msgstr "L'affichage de débogage est en fil de fer."
#: doc/classes/VisualServer.xml
msgid "Do not use a debug mode."
-msgstr ""
+msgstr "Ne pas utiliser le mode de débogage."
#: doc/classes/VisualServer.xml
msgid "Draw all objects as wireframe models."
@@ -71669,11 +72012,11 @@ msgstr "L’instance est un multi-maillage."
#: doc/classes/VisualServer.xml
msgid "The instance is an immediate geometry."
-msgstr ""
+msgstr "L'instance est une géométrie immédiate."
#: doc/classes/VisualServer.xml
msgid "The instance is a particle emitter."
-msgstr ""
+msgstr "L'instance est un émetteur de particules."
#: doc/classes/VisualServer.xml
msgid "The instance is a light."
@@ -71688,9 +72031,8 @@ msgid "The instance is a GI probe."
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "The instance is a lightmap capture."
-msgstr "L’instance est une lumière."
+msgstr ""
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum InstanceType] enum."
@@ -71712,15 +72054,16 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum InstanceFlags] enum."
-msgstr ""
+msgstr "Représente la taille de l’énumération [enum InstanceFlags]."
#: doc/classes/VisualServer.xml
msgid "Disable shadows from this instance."
msgstr "Désactiver les ombres de cette instance."
#: doc/classes/VisualServer.xml
+#, fuzzy
msgid "Cast shadows from this instance."
-msgstr ""
+msgstr "Projette les ombres depuis cette instance."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71836,11 +72179,15 @@ msgstr "Quantité de sommets dans l'image."
#: doc/classes/VisualServer.xml
msgid "Hardware supports shaders. This enum is currently unused in Godot 3.x."
msgstr ""
+"Le matériel supporte les shaders. Cette énumération est actuellement "
+"inutilisée dans Godot 3.x."
#: doc/classes/VisualServer.xml
msgid ""
"Hardware supports multithreading. This enum is currently unused in Godot 3.x."
msgstr ""
+"Le matériel supporte plusieurs fils d'exécution. Cette énumération est "
+"actuellement inutilisée dans Godot 3.x."
#: doc/classes/VisualServer.xml
msgid "Use [Transform2D] to store MultiMesh transform."
@@ -71906,11 +72253,11 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Use a specified color as the background."
-msgstr ""
+msgstr "Utiliser la couleur spécifiée pour l'arrière-plan."
#: doc/classes/VisualServer.xml
msgid "Use a sky resource for the background."
-msgstr ""
+msgstr "Utilise la ressource de ciel pour l'arrière-plan."
#: doc/classes/VisualServer.xml
msgid ""
@@ -71939,7 +72286,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Use medium blur quality."
-msgstr ""
+msgstr "Utiliser une qualité de flou médium."
#: doc/classes/VisualServer.xml
msgid "Used highest blur quality. Looks the best, but is the slowest."
@@ -71960,7 +72307,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Shows the glow effect by itself without the underlying scene."
-msgstr ""
+msgstr "Affiche uniquement l'effet de lueur sans scène sous-jacente."
#: doc/classes/VisualServer.xml
msgid "Output color as they came in."
@@ -71968,36 +72315,35 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Use the Reinhard tonemapper."
-msgstr ""
+msgstr "Utiliser le mappage des tons Reinhard."
#: doc/classes/VisualServer.xml
msgid "Use the filmic tonemapper."
-msgstr ""
+msgstr "Utiliser le mappage des tons filmique."
#: doc/classes/VisualServer.xml
msgid "Use the ACES tonemapper."
-msgstr ""
+msgstr "Utiliser le mappage des tons ACES."
#: doc/classes/VisualServer.xml
msgid "Use the ACES Fitted tonemapper."
-msgstr ""
+msgstr "Utiliser le mappage des tons ACES Fitted."
#: doc/classes/VisualServer.xml
-#, fuzzy
msgid "Lowest quality of screen space ambient occlusion."
-msgstr "Qualité la plus basse de l’occlusion ambiante d’espace d’écran."
+msgstr "La qualité la plus basse de l’occlusion ambiante d’espace d’écran."
#: doc/classes/VisualServer.xml
msgid "Medium quality screen space ambient occlusion."
-msgstr ""
+msgstr "La qualité moyenne de l’occlusion ambiante d’espace d’écran."
#: doc/classes/VisualServer.xml
msgid "Highest quality screen space ambient occlusion."
-msgstr ""
+msgstr "La qualité la plus haute de l’occlusion ambiante d’espace d’écran."
#: doc/classes/VisualServer.xml
msgid "Disables the blur set for SSAO. Will make SSAO look noisier."
-msgstr ""
+msgstr "Désactive le flou pour le SSAO. Cela affiche plus de bruits."
#: doc/classes/VisualServer.xml
msgid "Perform a 1x1 blur on the SSAO output."
@@ -72011,6 +72357,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -72067,7 +72429,7 @@ msgstr ""
#: doc/classes/VisualShader.xml
msgid "Removes the specified node from the shader."
-msgstr ""
+msgstr "Retire les nœuds spécifiés du shader."
#: doc/classes/VisualShader.xml
msgid "Sets the mode of this shader."
@@ -72083,11 +72445,11 @@ msgstr "Vecteur de décalage de l’ensemble du graphique."
#: doc/classes/VisualShader.xml
msgid "A vertex shader, operating on vertices."
-msgstr ""
+msgstr "Un shader de sommet, s'appliquant sur chacun des sommets."
#: doc/classes/VisualShader.xml
msgid "A fragment shader, operating on fragments (pixels)."
-msgstr ""
+msgstr "Un shader de fragment, s'appliquant sur chacun des pixels (fragments)."
#: doc/classes/VisualShader.xml
#, fuzzy
@@ -72096,7 +72458,7 @@ msgstr "Un shader pour les calculs de lumière."
#: doc/classes/VisualShader.xml
msgid "Represents the size of the [enum Type] enum."
-msgstr ""
+msgstr "Représente la taille de l'énumération [enum Type]."
#: doc/classes/VisualShaderNode.xml
msgid "Base class for nodes in a visual shader graph."
@@ -72111,12 +72473,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -72218,8 +72574,9 @@ msgstr ""
#: doc/classes/VisualShaderNodeScalarUniform.xml
#: doc/classes/VisualShaderNodeTransformUniform.xml
#: doc/classes/VisualShaderNodeVec3Uniform.xml
+#, fuzzy
msgid "Enables usage of the [member default_value]."
-msgstr ""
+msgstr "Activer l'usage de [member default_value]."
#: doc/classes/VisualShaderNodeColorConstant.xml
msgid "A [Color] constant to be used within the visual shader graph."
@@ -72281,7 +72638,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeColorOp.xml
msgid "Applies [member operator] to two color inputs."
-msgstr ""
+msgstr "Appliquer [member operator] aux deux entrées."
#: doc/classes/VisualShaderNodeColorOp.xml
msgid ""
@@ -72432,15 +72789,15 @@ msgstr "Un type booléen."
#: doc/classes/VisualShaderNodeCompare.xml
msgid "A transform ([code]mat4[/code]) type."
-msgstr ""
+msgstr "Le type de transformation ([code]mat4[/code])."
#: doc/classes/VisualShaderNodeCompare.xml
msgid "Comparison for equality ([code]a == b[/code])."
-msgstr ""
+msgstr "La comparaison pour l'égalité ([code]a == b[/code])."
#: doc/classes/VisualShaderNodeCompare.xml
msgid "Comparison for inequality ([code]a != b[/code])."
-msgstr "Comparaison pour l'inégalité ([code]a != b[/code])."
+msgstr "La comparaison pour l'égalité ([code]a != b[/code])."
#: doc/classes/VisualShaderNodeCompare.xml
msgid ""
@@ -72588,13 +72945,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -72819,6 +73169,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeGroupBase.xml
msgid "Currently, has no direct usage, use the derived classes instead."
msgstr ""
+"Actuellement, ça n'a aucune utilisation, utilisez plutôt les classes "
+"dérivées."
#: doc/classes/VisualShaderNodeGroupBase.xml
msgid ""
@@ -72938,16 +73290,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -72996,8 +73341,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -73008,7 +73353,7 @@ msgstr ""
msgid ""
"Constrains a value to lie between [code]min[/code] and [code]max[/code] "
"values."
-msgstr ""
+msgstr "Limite une valeur aux bornes [code]min[/code] et [code]max[/code]."
#: doc/classes/VisualShaderNodeScalarDerivativeFunc.xml
msgid "Calculates a scalar derivative within the visual shader graph."
@@ -73099,7 +73444,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeScalarUniform.xml
msgid "No hint used."
-msgstr ""
+msgstr "Aucun indice utilisé."
#: doc/classes/VisualShaderNodeScalarUniform.xml
msgid ""
@@ -73514,9 +73859,8 @@ msgid "Returns the opposite value of the parameter."
msgstr "Renvoie la valeur opposée du paramètre."
#: doc/classes/VisualShaderNodeVectorFunc.xml
-#, fuzzy
msgid "Returns [code]1/vector[/code]."
-msgstr "Retourne [code]true[/code] (vrai) si la chaîne de caractères est vide."
+msgstr "Retourne [code]1/vector[/code]."
#: doc/classes/VisualShaderNodeVectorFunc.xml
msgid "Converts RGB vector to HSV equivalent."
@@ -73832,7 +74176,7 @@ msgstr ""
#: doc/classes/VSeparator.xml
msgid "Vertical version of [Separator]."
-msgstr "Version verticale de [Separator]."
+msgstr "La version verticale de [Separator]."
#: doc/classes/VSeparator.xml
msgid ""
@@ -73857,7 +74201,6 @@ msgstr ""
"(n'oubliez pas d'activer [member StyleBoxLine.vertical])."
#: doc/classes/VSlider.xml
-#, fuzzy
msgid "Vertical slider."
msgstr "Glissière verticale."
@@ -73881,12 +74224,14 @@ msgstr ""
#: doc/classes/VSplitContainer.xml
msgid "Vertical split container."
-msgstr ""
+msgstr "Conteneur diviseur vertical."
#: doc/classes/VSplitContainer.xml
msgid ""
"Vertical split container. See [SplitContainer]. This goes from top to bottom."
msgstr ""
+"Conteneur diviseur vertical. Voir [SplitContainer]. Il va du haut vers le "
+"bas."
#: doc/classes/WeakRef.xml
msgid ""
@@ -74446,6 +74791,8 @@ msgid ""
"Base class for WebSocket server and client, allowing them to be used as "
"network peer for the [MultiplayerAPI]."
msgstr ""
+"Classe de base pour le serveur WebSocket et le client, permettant de les "
+"utiliser comme pairs réseau pour la [MultiplayerAPI]."
#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
msgid ""
@@ -74471,6 +74818,9 @@ msgid ""
"[b]Note:[/b] This signal is only emitted when the client or server is "
"configured to use Godot multiplayer API."
msgstr ""
+"Émis lorsqu'un paquet est reçu d'un pair.\n"
+"[b]Note :[/b] Ce signal n'est émis que si le client ou le serveur est "
+"configuré pour utilisé l'API multijoueur de Godot."
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid "A class representing a specific WebSocket connection."
@@ -74666,7 +75016,7 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid "AR/VR interface using WebXR."
-msgstr ""
+msgstr "Une interface RA/RV utilisant WebXR."
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -74791,11 +75141,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -74819,6 +75169,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -74924,15 +75282,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -74997,6 +75355,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "Émis lorsque [member frame] modifié."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
#, fuzzy
msgid "Base class for window dialogs."
@@ -75088,9 +75464,8 @@ msgid ""
msgstr ""
#: doc/classes/World.xml
-#, fuzzy
msgid "The World's [Environment]."
-msgstr "L'[Environment] de World3D."
+msgstr "L'[Environment] du World."
#: doc/classes/World.xml
msgid ""
@@ -75099,14 +75474,12 @@ msgid ""
msgstr ""
#: doc/classes/World.xml
-#, fuzzy
msgid "The World's visual scenario."
-msgstr "Le scénario visuel de World3D."
+msgstr "Le scénario visuel du World."
#: doc/classes/World.xml
-#, fuzzy
msgid "The World's physics space."
-msgstr "L’espace physique du World3D."
+msgstr "L’espace physique du World."
#: doc/classes/World2D.xml
msgid "Class that has everything pertaining to a 2D world."
@@ -75166,7 +75539,7 @@ msgstr ""
#: doc/classes/X509Certificate.xml
msgid "An X509 certificate (e.g. for SSL)."
-msgstr ""
+msgstr "Un certificat X509 (par ex. pour SSL)."
#: doc/classes/X509Certificate.xml
msgid ""
@@ -75181,7 +75554,7 @@ msgstr ""
#: doc/classes/X509Certificate.xml
msgid "Loads a certificate from [code]path[/code] (\"*.crt\" file)."
-msgstr ""
+msgstr "Charge un certificat depuis [code]path[/code] (fichier \"*.crt\")."
#: doc/classes/X509Certificate.xml
msgid ""
@@ -75272,31 +75645,36 @@ msgstr ""
#: doc/classes/XMLParser.xml
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr ""
+msgstr "Ouvre un fichier XML pour analyse. Ceci retourne un code d'erreur."
#: doc/classes/XMLParser.xml
msgid "Opens an XML raw buffer for parsing. This returns an error code."
msgstr ""
+"Ouvre un buffer XML brut pour être interprété. Ceci renvoie un code d'erreur."
#: doc/classes/XMLParser.xml
msgid "Reads the next node of the file. This returns an error code."
-msgstr ""
+msgstr "Lit le nœud suivant du fichier. Ceci retourne un code d'erreur."
#: doc/classes/XMLParser.xml
msgid ""
"Moves the buffer cursor to a certain offset (since the beginning) and read "
"the next node there. This returns an error code."
msgstr ""
+"Déplace le curseur de la mémoire tampon d'un certain décalage (depuis le "
+"début) et lit le nœud suivant à cet endroit. Une code d'erreur est renvoyé."
#: doc/classes/XMLParser.xml
msgid ""
"Skips the current section. If the node contains other elements, they will be "
"ignored and the cursor will go to the closing of the current element."
msgstr ""
+"Ignore la section en cours. Si le nœud contient d'autres éléments, ils "
+"seront ignorés et le curseur ira à la fin de l'élément courant."
#: doc/classes/XMLParser.xml
msgid "There's no node (no file or buffer opened)."
-msgstr ""
+msgstr "Il y aucun nœud (pas de fichier ou de mémoire tampon ouverte)."
#: doc/classes/XMLParser.xml
msgid "Element (tag)."
diff --git a/doc/translations/gl.po b/doc/translations/gl.po
index 244164c299..7138a7217c 100644
--- a/doc/translations/gl.po
+++ b/doc/translations/gl.po
@@ -3388,8 +3388,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3748,20 +3748,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4102,9 +4102,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4114,7 +4113,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4194,6 +4193,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4328,10 +4331,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4760,22 +4759,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4959,6 +4942,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4968,7 +4960,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4990,7 +4982,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5637,6 +5629,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5920,6 +5916,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6386,7 +6386,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6622,18 +6622,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7020,9 +7020,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7219,10 +7222,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7522,12 +7521,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8649,7 +8642,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8944,7 +8937,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9337,7 +9330,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9431,7 +9424,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9476,12 +9471,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9497,7 +9487,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9505,7 +9496,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9666,7 +9662,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9707,14 +9708,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9753,12 +9753,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9963,8 +9963,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10008,6 +10013,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10219,11 +10233,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10330,10 +10344,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10392,7 +10402,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10459,9 +10469,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10764,16 +10774,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10785,12 +10795,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10978,6 +10988,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11012,6 +11030,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11272,14 +11294,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11322,7 +11344,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11356,6 +11378,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11755,12 +11784,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12188,11 +12217,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12388,7 +12417,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12401,7 +12432,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12695,7 +12728,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12745,6 +12778,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12825,16 +12870,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13393,6 +13428,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13477,9 +13513,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13488,9 +13524,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13500,10 +13536,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13596,9 +13633,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13607,22 +13644,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13742,11 +13771,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13786,7 +13814,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13832,15 +13860,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15299,15 +15327,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15408,8 +15436,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17386,10 +17414,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17554,8 +17578,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17644,7 +17668,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17676,7 +17715,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17686,7 +17730,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17728,7 +17777,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17752,7 +17807,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17833,7 +17893,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17908,7 +17974,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17922,7 +17993,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18023,7 +18099,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18054,7 +18136,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18098,10 +18186,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18267,6 +18351,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18977,7 +19069,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19033,8 +19125,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19043,7 +19135,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19071,11 +19167,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19198,10 +19289,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20229,10 +20316,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20264,8 +20347,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20298,8 +20381,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20409,7 +20492,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20673,10 +20756,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21547,10 +21626,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21965,10 +22040,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22289,9 +22360,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22610,24 +22680,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22688,12 +22765,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23371,6 +23450,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23972,11 +24055,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24003,6 +24086,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24143,14 +24242,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24220,10 +24311,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25266,7 +25353,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26262,11 +26349,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26293,7 +26382,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26341,6 +26430,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26562,6 +26657,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26893,15 +26996,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27692,10 +27786,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27840,7 +27930,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28558,6 +28648,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28749,7 +28843,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28978,8 +29072,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29007,8 +29101,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29165,7 +29259,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29300,12 +29399,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29349,8 +29444,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29381,8 +29476,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29426,7 +29521,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29594,17 +29689,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29688,17 +29781,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29709,10 +29806,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29749,9 +29842,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29878,10 +29975,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30636,12 +30729,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30688,6 +30775,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30748,7 +30858,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30764,7 +30874,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30842,7 +30952,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30852,18 +30966,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31015,7 +31145,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31265,7 +31395,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31695,6 +31825,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31891,10 +32025,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33741,10 +33871,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33975,16 +34101,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34128,10 +34244,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34373,10 +34485,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34448,7 +34556,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34486,6 +34594,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34514,7 +34626,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34826,7 +34938,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35378,6 +35490,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35398,6 +35514,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35437,15 +35557,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35684,7 +35795,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35975,11 +36090,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36026,7 +36141,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36041,7 +36156,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36054,7 +36169,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36069,17 +36184,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36089,14 +36204,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36106,7 +36221,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36815,6 +36930,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36967,7 +37094,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37135,7 +37262,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37172,11 +37299,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37313,8 +37440,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37348,12 +37475,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37557,8 +37683,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37682,7 +37808,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37871,6 +37997,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38397,7 +38565,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38658,8 +38835,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38908,6 +39085,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39018,6 +39199,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39961,11 +40149,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40117,9 +40305,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40240,6 +40426,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40983,8 +41173,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43561,7 +43750,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43972,6 +44161,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45268,8 +45461,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45355,8 +45548,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45444,9 +45637,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46827,12 +47020,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46927,6 +47122,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47026,7 +47232,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47445,6 +47652,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47463,7 +47676,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47491,11 +47704,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47660,7 +47868,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48097,7 +48305,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48125,7 +48333,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48280,10 +48492,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48352,7 +48560,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48670,7 +48882,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48891,6 +49103,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49207,7 +49423,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49403,9 +49623,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49990,11 +50211,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50593,7 +50814,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50801,14 +51022,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51264,10 +51477,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51577,14 +51786,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51912,10 +52113,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52225,11 +52422,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52314,11 +52510,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52382,11 +52578,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52527,8 +52728,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52622,10 +52823,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53972,9 +54169,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54150,14 +54347,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54531,6 +54743,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54684,10 +54941,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54952,7 +55205,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55001,10 +55259,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55369,12 +55627,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57772,10 +58045,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57863,7 +58132,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58141,7 +58411,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58217,11 +58491,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58811,7 +59085,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59642,14 +59921,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59765,7 +60036,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59791,6 +60063,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59838,9 +60115,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59851,8 +60128,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59892,7 +60169,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60261,11 +60538,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60300,12 +60576,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61653,10 +61941,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61683,8 +61967,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62340,6 +62623,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62550,23 +62841,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62594,7 +62885,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62685,7 +62978,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63408,10 +63703,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65166,10 +65457,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65604,8 +65891,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65878,7 +66165,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68186,6 +68476,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68285,10 +68591,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68745,10 +69047,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69086,13 +69384,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69141,8 +69435,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70848,11 +71142,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70876,6 +71170,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70981,15 +71283,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71053,6 +71355,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/hi.po b/doc/translations/hi.po
index 9902e6e4d8..4cc0d9ce5c 100644
--- a/doc/translations/hi.po
+++ b/doc/translations/hi.po
@@ -4,12 +4,13 @@
# This file is distributed under the same license as the Godot source code.
#
# harvinder rathor <harvinderr09@gmail.com>, 2021.
+# Lalita mishra <yashkebacche1234@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-05-03 21:30+0000\n"
-"Last-Translator: harvinder rathor <harvinderr09@gmail.com>\n"
+"PO-Revision-Date: 2022-02-03 13:04+0000\n"
+"Last-Translator: Lalita mishra <yashkebacche1234@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot-"
"class-reference/hi/>\n"
"Language: hi\n"
@@ -17,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -49,15 +50,15 @@ msgstr "गणना"
#: doc/tools/make_rst.py
msgid "Constants"
-msgstr ""
+msgstr "A"
#: doc/tools/make_rst.py
msgid "Property Descriptions"
-msgstr ""
+msgstr "कखगघचछ"
#: doc/tools/make_rst.py
msgid "Method Descriptions"
-msgstr ""
+msgstr "Method Descriptions"
#: doc/tools/make_rst.py
#, fuzzy
@@ -3386,8 +3387,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3746,20 +3747,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4100,9 +4101,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4112,7 +4112,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4192,6 +4192,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4326,10 +4330,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4758,22 +4758,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4957,6 +4941,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4966,7 +4959,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4988,7 +4981,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5635,6 +5628,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5918,6 +5915,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6384,7 +6385,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6620,18 +6621,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7018,9 +7019,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7217,10 +7221,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7520,12 +7520,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8647,7 +8641,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8942,7 +8936,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9335,7 +9329,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9429,7 +9423,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9474,12 +9470,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9495,7 +9486,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9503,7 +9495,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9664,7 +9661,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9705,14 +9707,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9751,12 +9752,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9961,8 +9962,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10006,6 +10012,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10217,11 +10232,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10328,10 +10343,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10390,7 +10401,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10457,9 +10468,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10762,16 +10773,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10783,12 +10794,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10976,6 +10987,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11010,6 +11029,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11270,14 +11293,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11320,7 +11343,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11354,6 +11377,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11753,12 +11783,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12186,11 +12216,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12386,7 +12416,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12399,7 +12431,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12693,7 +12727,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12743,6 +12777,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12823,16 +12869,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13391,6 +13427,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13475,9 +13512,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13486,9 +13523,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13498,10 +13535,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13594,9 +13632,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13605,22 +13643,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13740,11 +13770,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13784,7 +13813,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13830,15 +13859,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15297,15 +15326,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15406,8 +15435,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17384,10 +17413,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17552,8 +17577,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17642,7 +17667,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17674,7 +17714,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17684,7 +17729,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17726,7 +17776,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17750,7 +17806,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17831,7 +17892,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17906,7 +17973,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17920,7 +17992,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18021,7 +18098,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18052,7 +18135,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18096,10 +18185,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18265,6 +18350,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18975,7 +19068,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19031,8 +19124,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19041,7 +19134,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19069,11 +19166,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19196,10 +19288,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20227,10 +20315,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20262,8 +20346,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20296,8 +20380,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20407,7 +20491,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20671,10 +20755,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21545,10 +21625,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21963,10 +22039,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22287,9 +22359,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22608,24 +22679,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22686,12 +22764,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23369,6 +23449,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23970,11 +24054,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24001,6 +24085,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24141,14 +24241,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24218,10 +24310,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25264,7 +25352,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26260,11 +26348,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26291,7 +26381,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26339,6 +26429,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26560,6 +26656,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26891,15 +26995,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27690,10 +27785,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27838,7 +27929,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28556,6 +28647,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28747,7 +28842,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28976,8 +29071,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29005,8 +29100,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29163,7 +29258,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29298,12 +29398,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29347,8 +29443,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29379,8 +29475,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29424,7 +29520,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29592,17 +29688,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29686,17 +29780,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29707,10 +29805,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29747,9 +29841,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29876,10 +29974,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30634,12 +30728,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30686,6 +30774,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30746,7 +30857,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30762,7 +30873,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30840,7 +30951,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30850,18 +30965,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31013,7 +31144,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31263,7 +31394,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31693,6 +31824,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31889,10 +32024,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33739,10 +33870,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33973,16 +34100,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34126,10 +34243,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34371,10 +34484,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34446,7 +34555,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34484,6 +34593,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34512,7 +34625,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34824,7 +34937,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35376,6 +35489,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35396,6 +35513,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35435,15 +35556,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35682,7 +35794,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35973,11 +36089,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36024,7 +36140,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36039,7 +36155,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36052,7 +36168,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36067,17 +36183,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36087,14 +36203,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36104,7 +36220,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36813,6 +36929,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36965,7 +37093,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37133,7 +37261,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37170,11 +37298,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37311,8 +37439,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37346,12 +37474,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37555,8 +37682,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37680,7 +37807,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37869,6 +37996,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38395,7 +38564,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38656,8 +38834,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38906,6 +39084,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39016,6 +39198,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39959,11 +40148,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40115,9 +40304,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40238,6 +40425,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40981,8 +41172,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43559,7 +43749,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43970,6 +44160,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45266,8 +45460,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45353,8 +45547,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45442,9 +45636,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46825,12 +47019,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46925,6 +47121,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47024,7 +47231,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47443,6 +47651,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47461,7 +47675,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47489,11 +47703,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47658,7 +47867,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48095,7 +48304,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48123,7 +48332,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48278,10 +48491,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48350,7 +48559,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48668,7 +48881,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48889,6 +49102,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49205,7 +49422,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49401,9 +49622,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49988,11 +50210,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50591,7 +50813,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50799,14 +51021,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51262,10 +51476,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51575,14 +51785,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51910,10 +52112,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52223,11 +52421,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52312,11 +52509,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52380,11 +52577,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52525,8 +52727,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52620,10 +52822,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53970,9 +54168,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54148,14 +54346,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54529,6 +54742,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54682,10 +54940,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54950,7 +55204,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -54999,10 +55258,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55367,12 +55626,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57770,10 +58044,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57861,7 +58131,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58139,7 +58410,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58215,11 +58490,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58809,7 +59084,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59640,14 +59920,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59763,7 +60035,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59789,6 +60062,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59836,9 +60114,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59849,8 +60127,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59890,7 +60168,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60259,11 +60537,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60298,12 +60575,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61651,10 +61940,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61681,8 +61966,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62338,6 +62622,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62548,23 +62840,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62592,7 +62884,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62683,7 +62977,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63406,10 +63702,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65164,10 +65456,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65602,8 +65890,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65876,7 +66164,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68184,6 +68475,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68283,10 +68590,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68743,10 +69046,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69084,13 +69383,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69139,8 +69434,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70846,11 +71141,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70874,6 +71169,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70979,15 +71282,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71051,6 +71354,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/hu.po b/doc/translations/hu.po
index c8ed5c9e02..a60adef668 100644
--- a/doc/translations/hu.po
+++ b/doc/translations/hu.po
@@ -9,12 +9,13 @@
# Andras Virag <snowflake71@gmail.com>, 2021.
# balintmaci <balintmaci@gmail.com>, 2021.
# Balázs Püspök-Kiss <pkblazsak@gmail.com>, 2021.
+# Szevin <kevingeiger25@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-12-23 17:58+0000\n"
-"Last-Translator: Balázs Püspök-Kiss <pkblazsak@gmail.com>\n"
+"PO-Revision-Date: 2022-01-26 23:53+0000\n"
+"Last-Translator: Szevin <kevingeiger25@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/hu/>\n"
"Language: hu\n"
@@ -22,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -91,7 +92,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "érték"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -3404,8 +3405,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3764,20 +3765,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4118,9 +4119,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4130,7 +4130,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4210,6 +4210,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4344,10 +4348,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4776,22 +4776,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4975,6 +4959,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4984,7 +4977,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5006,7 +4999,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5653,6 +5646,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5936,6 +5933,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6402,7 +6403,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6638,18 +6639,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7036,9 +7037,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7235,10 +7239,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7538,12 +7538,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8665,7 +8659,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8960,7 +8954,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9353,7 +9347,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9447,7 +9441,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9492,12 +9488,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9513,7 +9504,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9521,7 +9513,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9682,7 +9679,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9723,14 +9725,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9769,12 +9770,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9979,8 +9980,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10024,6 +10030,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10235,11 +10250,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10346,10 +10361,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10408,7 +10419,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10475,9 +10486,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10780,16 +10791,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10801,12 +10812,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10994,6 +11005,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11028,6 +11047,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11288,14 +11311,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11338,7 +11361,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11372,6 +11395,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11771,12 +11801,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12204,11 +12234,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12404,7 +12434,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12417,7 +12449,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12711,7 +12745,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12761,6 +12795,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12841,16 +12887,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13409,6 +13445,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13493,9 +13530,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13504,9 +13541,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13516,10 +13553,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13612,9 +13650,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13623,22 +13661,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13758,11 +13788,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13802,7 +13831,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13848,15 +13877,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15315,15 +15344,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15424,8 +15453,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17402,10 +17431,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17570,8 +17595,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17660,7 +17685,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17692,7 +17732,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17702,7 +17747,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17744,7 +17794,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17768,7 +17824,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17849,7 +17910,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17924,7 +17991,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17938,7 +18010,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18039,7 +18116,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18070,7 +18153,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18114,10 +18203,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18283,6 +18368,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18993,7 +19086,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19049,8 +19142,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19059,7 +19152,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19087,11 +19184,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19214,10 +19306,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20245,10 +20333,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20280,8 +20364,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20314,8 +20398,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20425,7 +20509,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20689,10 +20773,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21563,10 +21643,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21981,10 +22057,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22305,9 +22377,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22626,24 +22697,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22704,12 +22782,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23387,6 +23467,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23988,11 +24072,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24019,6 +24103,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24159,14 +24259,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24236,10 +24328,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25282,7 +25370,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26278,11 +26366,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26309,7 +26399,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26357,6 +26447,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26578,6 +26674,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26909,15 +27013,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27708,10 +27803,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27856,7 +27947,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28574,6 +28665,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28765,7 +28860,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28994,8 +29089,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29023,8 +29118,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29181,7 +29276,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29316,12 +29416,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29365,8 +29461,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29397,8 +29493,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29442,7 +29538,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29610,17 +29706,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29704,17 +29798,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29725,10 +29823,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29765,9 +29859,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29894,10 +29992,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30652,12 +30746,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30704,6 +30792,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30764,7 +30875,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30780,7 +30891,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30858,7 +30969,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30868,18 +30983,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31031,7 +31162,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31281,7 +31412,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31711,6 +31842,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31907,10 +32042,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33757,10 +33888,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33991,16 +34118,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34144,10 +34261,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34389,10 +34502,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34464,7 +34573,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34502,6 +34611,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34530,7 +34643,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34842,7 +34955,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35394,6 +35507,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35414,6 +35531,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35453,15 +35574,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35700,7 +35812,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35991,11 +36107,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36042,7 +36158,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36057,7 +36173,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36070,7 +36186,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36085,17 +36201,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36105,14 +36221,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36122,7 +36238,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36831,6 +36947,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36983,7 +37111,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37151,7 +37279,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37188,11 +37316,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37329,8 +37457,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37364,12 +37492,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37573,8 +37700,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37698,7 +37825,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37887,6 +38014,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38413,7 +38582,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38674,8 +38852,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38924,6 +39102,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39034,6 +39216,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39977,11 +40166,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40133,9 +40322,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40256,6 +40443,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40999,8 +41190,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43577,7 +43767,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43988,6 +44178,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45284,8 +45478,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45371,8 +45565,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45460,9 +45654,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46843,12 +47037,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46943,6 +47139,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47042,7 +47249,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47461,6 +47669,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47479,7 +47693,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47507,11 +47721,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47676,7 +47885,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48113,7 +48322,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48141,7 +48350,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48296,10 +48509,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48368,7 +48577,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48686,7 +48899,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48907,6 +49120,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49223,7 +49440,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49419,9 +49640,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50006,11 +50228,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50609,7 +50831,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50817,14 +51039,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51280,10 +51494,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51593,14 +51803,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51928,10 +52130,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52241,11 +52439,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52330,11 +52527,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52398,11 +52595,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52543,8 +52745,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52638,10 +52840,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53988,9 +54186,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54166,14 +54364,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54547,6 +54760,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54700,10 +54958,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54968,7 +55222,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55017,10 +55276,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55385,12 +55644,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57788,10 +58062,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57879,7 +58149,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58157,7 +58428,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58233,11 +58508,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58827,7 +59102,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59658,14 +59938,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59781,7 +60053,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59807,6 +60080,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59854,9 +60132,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59867,8 +60145,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59908,7 +60186,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60277,11 +60555,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60316,12 +60593,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61669,10 +61958,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61699,8 +61984,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62356,6 +62640,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62566,23 +62858,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62610,7 +62902,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62701,7 +62995,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63424,10 +63720,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65182,10 +65474,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65620,8 +65908,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65894,7 +66182,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68202,6 +68493,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68301,10 +68608,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68761,10 +69064,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69102,13 +69401,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69157,8 +69452,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70864,11 +71159,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70892,6 +71187,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70997,15 +71300,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71069,6 +71372,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/id.po b/doc/translations/id.po
index a65891f84e..eb9fe2f029 100644
--- a/doc/translations/id.po
+++ b/doc/translations/id.po
@@ -3592,8 +3592,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3952,22 +3952,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4307,11 +4306,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4320,9 +4317,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4401,6 +4397,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4535,10 +4535,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4967,25 +4963,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5169,6 +5146,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5178,9 +5164,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5201,9 +5186,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5849,6 +5833,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6132,6 +6120,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6598,9 +6590,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6835,23 +6826,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7237,9 +7224,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7436,13 +7426,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7742,12 +7725,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8869,9 +8846,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9165,10 +9141,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9560,11 +9534,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9657,7 +9628,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9702,15 +9675,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9725,7 +9691,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9733,7 +9700,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9894,7 +9866,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9935,18 +9912,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9984,12 +9957,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10194,8 +10167,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10239,6 +10217,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10450,11 +10437,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10561,12 +10548,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10625,7 +10606,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10692,9 +10673,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10997,23 +10978,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -11024,15 +10999,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11219,6 +11192,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11253,6 +11234,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11513,17 +11498,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11565,9 +11548,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11600,6 +11582,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11999,15 +11988,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12435,14 +12422,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12637,7 +12622,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12650,7 +12637,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12944,7 +12933,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12994,6 +12983,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13074,20 +13075,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13646,6 +13633,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13730,9 +13718,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13741,9 +13729,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13753,10 +13741,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13849,9 +13838,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13860,22 +13849,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13995,15 +13976,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14042,9 +14019,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14089,19 +14065,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15559,20 +15532,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15672,8 +15641,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17650,12 +17619,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17820,8 +17783,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17910,7 +17873,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17942,7 +17920,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17952,7 +17935,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17994,7 +17982,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18018,7 +18012,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18099,7 +18098,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18174,7 +18179,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18188,7 +18198,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18289,7 +18304,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18320,7 +18341,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18364,13 +18391,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18536,6 +18556,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19246,11 +19274,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19305,8 +19330,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19315,7 +19340,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19343,13 +19372,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19472,12 +19494,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20505,13 +20521,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20543,8 +20552,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20577,8 +20586,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20688,11 +20697,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20955,12 +20961,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21831,13 +21831,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22252,13 +22245,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22580,9 +22566,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22901,31 +22886,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22985,12 +22974,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23669,6 +23660,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24270,11 +24265,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24301,6 +24296,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24441,20 +24453,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24524,13 +24522,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25573,7 +25564,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26570,11 +26561,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26601,10 +26594,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26651,6 +26642,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26872,6 +26869,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27203,21 +27208,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28008,13 +27998,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28159,11 +28142,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28880,6 +28860,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29071,7 +29055,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29300,8 +29284,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29329,8 +29313,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29487,7 +29471,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29622,15 +29611,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29673,8 +29656,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29705,8 +29688,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29750,11 +29733,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29921,17 +29901,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30015,17 +29993,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30036,13 +30018,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30079,9 +30054,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30208,13 +30187,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30968,15 +30940,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31024,6 +30987,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31084,11 +31070,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31103,9 +31086,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31182,7 +31164,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31192,18 +31178,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31355,11 +31357,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31608,11 +31607,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32041,6 +32037,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32237,13 +32237,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34090,10 +34083,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34324,22 +34313,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34483,13 +34456,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34737,13 +34703,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34815,9 +34774,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34854,6 +34812,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34882,9 +34844,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35201,7 +35162,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35753,6 +35714,11 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35774,6 +35740,10 @@ msgid "Returns the map's up direction."
msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35813,18 +35783,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36063,9 +36021,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36355,16 +36316,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36410,7 +36367,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36425,7 +36382,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36438,7 +36395,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36453,17 +36410,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36473,14 +36430,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36490,7 +36447,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37199,6 +37156,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37351,11 +37320,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37522,9 +37488,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37560,11 +37525,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37701,8 +37666,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37736,19 +37701,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37951,8 +37909,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38076,7 +38034,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38265,6 +38223,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38791,7 +38791,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39052,8 +39061,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39303,6 +39312,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39413,6 +39426,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40368,14 +40388,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40526,13 +40544,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40652,6 +40665,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41396,11 +41413,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43978,9 +43992,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44390,6 +44403,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45686,8 +45704,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45773,8 +45791,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45862,9 +45880,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47245,12 +47263,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47345,6 +47365,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47444,7 +47475,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47863,6 +47895,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47881,9 +47919,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47910,14 +47947,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48082,9 +48111,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48520,7 +48548,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48548,7 +48576,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48703,12 +48735,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48777,7 +48803,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49095,9 +49125,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49317,6 +49346,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49633,9 +49666,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49830,9 +49866,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50417,14 +50454,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51022,11 +51057,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51233,18 +51265,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51700,10 +51720,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52013,16 +52029,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52350,12 +52356,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52665,14 +52665,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -52756,17 +52753,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52829,11 +52821,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52974,8 +52971,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53069,12 +53066,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54421,9 +54412,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54599,14 +54590,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54980,6 +54986,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55133,13 +55186,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55404,7 +55450,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55453,10 +55504,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55821,12 +55872,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58226,10 +58292,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58317,7 +58379,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58595,11 +58658,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58674,15 +58738,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59271,7 +59332,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60102,17 +60168,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60228,7 +60283,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60254,6 +60310,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60301,9 +60362,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60314,8 +60375,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60355,8 +60416,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Mengembalikan nilai sinus hiperbolik invers dari parameter."
#: doc/classes/Tree.xml
msgid ""
@@ -60724,11 +60786,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60763,12 +60824,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -62116,12 +62189,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62148,8 +62215,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62805,6 +62871,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63015,28 +63089,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63063,7 +63133,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63154,7 +63226,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63877,13 +63951,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65638,13 +65705,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66079,8 +66139,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66353,7 +66413,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68666,6 +68729,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68765,12 +68844,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69227,13 +69300,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69571,16 +69637,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69629,8 +69688,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71337,11 +71396,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71365,6 +71424,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71470,15 +71537,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71542,6 +71609,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/is.po b/doc/translations/is.po
index 1d1edf8a53..2aae5d4390 100644
--- a/doc/translations/is.po
+++ b/doc/translations/is.po
@@ -3387,8 +3387,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3747,20 +3747,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4101,9 +4101,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4113,7 +4112,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4193,6 +4192,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4327,10 +4330,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4759,22 +4758,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4958,6 +4941,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4967,7 +4959,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4989,7 +4981,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5636,6 +5628,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5919,6 +5915,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6385,7 +6385,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6621,18 +6621,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7019,9 +7019,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7218,10 +7221,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7521,12 +7520,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8648,7 +8641,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8943,7 +8936,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9336,7 +9329,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9430,7 +9423,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9475,12 +9470,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9496,7 +9486,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9504,7 +9495,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9665,7 +9661,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9706,14 +9707,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9752,12 +9752,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9962,8 +9962,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10007,6 +10012,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10218,11 +10232,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10329,10 +10343,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10391,7 +10401,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10458,9 +10468,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10763,16 +10773,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10784,12 +10794,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10977,6 +10987,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11011,6 +11029,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11271,14 +11293,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11321,7 +11343,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11355,6 +11377,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11754,12 +11783,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12187,11 +12216,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12387,7 +12416,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12400,7 +12431,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12694,7 +12727,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12744,6 +12777,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12824,16 +12869,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13392,6 +13427,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13476,9 +13512,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13487,9 +13523,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13499,10 +13535,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13595,9 +13632,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13606,22 +13643,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13741,11 +13770,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13785,7 +13813,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13831,15 +13859,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15298,15 +15326,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15407,8 +15435,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17385,10 +17413,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17553,8 +17577,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17643,7 +17667,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17675,7 +17714,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17685,7 +17729,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17727,7 +17776,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17751,7 +17806,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17832,7 +17892,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17907,7 +17973,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17921,7 +17992,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18022,7 +18098,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18053,7 +18135,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18097,10 +18185,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18266,6 +18350,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18976,7 +19068,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19032,8 +19124,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19042,7 +19134,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19070,11 +19166,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19197,10 +19288,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20228,10 +20315,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20263,8 +20346,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20297,8 +20380,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20408,7 +20491,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20672,10 +20755,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21546,10 +21625,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21964,10 +22039,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22288,9 +22359,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22609,24 +22679,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22687,12 +22764,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23370,6 +23449,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23971,11 +24054,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24002,6 +24085,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24142,14 +24241,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24219,10 +24310,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25265,7 +25352,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26261,11 +26348,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26292,7 +26381,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26340,6 +26429,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26561,6 +26656,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26892,15 +26995,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27691,10 +27785,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27839,7 +27929,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28557,6 +28647,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28748,7 +28842,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28977,8 +29071,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29006,8 +29100,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29164,7 +29258,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29299,12 +29398,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29348,8 +29443,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29380,8 +29475,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29425,7 +29520,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29593,17 +29688,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29687,17 +29780,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29708,10 +29805,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29748,9 +29841,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29877,10 +29974,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30635,12 +30728,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30687,6 +30774,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30747,7 +30857,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30763,7 +30873,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30841,7 +30951,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30851,18 +30965,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31014,7 +31144,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31264,7 +31394,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31694,6 +31824,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31890,10 +32024,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33740,10 +33870,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33974,16 +34100,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34127,10 +34243,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34372,10 +34484,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34447,7 +34555,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34485,6 +34593,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34513,7 +34625,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34825,7 +34937,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35377,6 +35489,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35397,6 +35513,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35436,15 +35556,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35683,7 +35794,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35974,11 +36089,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36025,7 +36140,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36040,7 +36155,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36053,7 +36168,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36068,17 +36183,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36088,14 +36203,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36105,7 +36220,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36814,6 +36929,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36966,7 +37093,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37134,7 +37261,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37171,11 +37298,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37312,8 +37439,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37347,12 +37474,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37556,8 +37682,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37681,7 +37807,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37870,6 +37996,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38396,7 +38564,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38657,8 +38834,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38907,6 +39084,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39017,6 +39198,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39960,11 +40148,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40116,9 +40304,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40239,6 +40425,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40982,8 +41172,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43560,7 +43749,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43971,6 +44160,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45267,8 +45460,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45354,8 +45547,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45443,9 +45636,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46826,12 +47019,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46926,6 +47121,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47025,7 +47231,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47444,6 +47651,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47462,7 +47675,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47490,11 +47703,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47659,7 +47867,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48096,7 +48304,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48124,7 +48332,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48279,10 +48491,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48351,7 +48559,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48669,7 +48881,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48890,6 +49102,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49206,7 +49422,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49402,9 +49622,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49989,11 +50210,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50592,7 +50813,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50800,14 +51021,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51263,10 +51476,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51576,14 +51785,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51911,10 +52112,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52224,11 +52421,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52313,11 +52509,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52381,11 +52577,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52526,8 +52727,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52621,10 +52822,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53971,9 +54168,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54149,14 +54346,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54530,6 +54742,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54683,10 +54940,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54951,7 +55204,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55000,10 +55258,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55368,12 +55626,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57771,10 +58044,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57862,7 +58131,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58140,7 +58410,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58216,11 +58490,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58810,7 +59084,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59641,14 +59920,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59764,7 +60035,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59790,6 +60062,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59837,9 +60114,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59850,8 +60127,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59891,7 +60168,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60260,11 +60537,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60299,12 +60575,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61652,10 +61940,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61682,8 +61966,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62339,6 +62622,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62549,23 +62840,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62593,7 +62884,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62684,7 +62977,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63407,10 +63702,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65165,10 +65456,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65603,8 +65890,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65877,7 +66164,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68185,6 +68475,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68284,10 +68590,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68744,10 +69046,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69085,13 +69383,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69140,8 +69434,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70847,11 +71141,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70875,6 +71169,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70980,15 +71282,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71052,6 +71354,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/it.po b/doc/translations/it.po
index 0ded58b016..0e6f99b17f 100644
--- a/doc/translations/it.po
+++ b/doc/translations/it.po
@@ -7,7 +7,7 @@
# Bob <spiroski.boban@gmail.com>, 2020.
# Riccardo Ferro <Riccardo3Ferro@gmail.com>, 2020.
# Lorenzo Asolan <brixiumx@gmail.com>, 2020.
-# Mirko <miknsop@gmail.com>, 2020, 2021.
+# Mirko <miknsop@gmail.com>, 2020, 2021, 2022.
# Lorenzo Cerqua <lorenzocerqua@tutanota.com>, 2020.
# StarFang208 <polaritymanx@yahoo.it>, 2020.
# Giacomo Bertolotti <giacomo.chappo@hotmail.it>, 2020, 2021.
@@ -27,7 +27,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-12-31 09:51+0000\n"
+"PO-Revision-Date: 2022-01-31 08:55+0000\n"
"Last-Translator: Mirko <miknsop@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/it/>\n"
@@ -36,7 +36,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -4318,8 +4318,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4679,24 +4679,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/index.html"
-msgstr "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
+msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
-msgstr "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
+msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -5036,11 +5033,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5049,9 +5044,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5130,6 +5124,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -5265,11 +5263,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr "$DOCS_URL/tutorials/animation/index.html"
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5700,25 +5693,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5902,6 +5876,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5911,9 +5894,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5934,9 +5916,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -6582,6 +6563,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6865,6 +6850,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7347,9 +7336,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -7584,23 +7572,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7986,9 +7970,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -8185,13 +8172,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8491,13 +8471,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr "$DOCS_URL/tutorials/vr/index.html"
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9622,9 +9595,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9922,10 +9894,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -10317,11 +10287,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -10414,7 +10381,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -10459,15 +10428,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -10482,7 +10444,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10490,7 +10453,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10651,7 +10619,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10692,18 +10665,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -10741,12 +10710,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10954,8 +10923,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10999,6 +10973,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -11210,11 +11193,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11321,12 +11304,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11385,7 +11362,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11452,9 +11429,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11759,23 +11736,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -11786,15 +11757,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11981,6 +11950,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -12015,6 +11992,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Calcola il prodotto vettoriale di questo vettore e [code]with[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12275,17 +12257,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -12327,9 +12307,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -12362,6 +12341,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12762,15 +12748,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -13205,15 +13189,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
+msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -13408,7 +13389,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13421,7 +13404,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13715,9 +13700,8 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
+msgstr ""
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -13766,6 +13750,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13846,20 +13842,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -14420,6 +14402,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -14505,9 +14488,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14516,9 +14499,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14528,10 +14511,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14624,9 +14608,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14635,22 +14619,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14770,15 +14746,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "Interpolazione cubica."
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14817,9 +14790,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14864,19 +14836,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -16391,21 +16360,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/index.html"
-msgstr "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
+msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Tasto Control/CTRL."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -16505,8 +16470,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -18516,12 +18481,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18686,8 +18645,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18776,7 +18735,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18808,7 +18782,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18818,7 +18797,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18860,7 +18844,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18884,7 +18874,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18965,7 +18960,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -19040,7 +19041,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -19054,7 +19060,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -19155,7 +19166,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -19186,7 +19203,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -19230,11 +19253,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -19400,6 +19418,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -20113,11 +20139,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -20173,8 +20196,8 @@ msgstr "Ritorna [code]true[/code] se [Rect2i] contiene un punto."
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -20183,7 +20206,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -20212,13 +20239,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -20341,12 +20361,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -21374,13 +21388,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -21412,8 +21419,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -21446,8 +21453,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -21557,11 +21564,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21826,12 +21830,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22705,13 +22703,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -23129,13 +23120,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -23457,9 +23441,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23778,31 +23761,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -23862,12 +23849,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -24546,6 +24535,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -25148,12 +25141,13 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
-msgstr ""
+#, fuzzy
+msgid "Wikipedia: Double-precision floating-point format"
+msgstr "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
#: doc/classes/float.xml
#, fuzzy
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
#: doc/classes/float.xml
@@ -25180,6 +25174,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Restituisce il seno del parametro."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -25320,20 +25331,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -25403,11 +25400,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -26450,9 +26442,8 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
-msgstr "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
+msgstr ""
#: doc/classes/GIProbe.xml
msgid ""
@@ -27467,11 +27458,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -27498,10 +27491,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -27547,6 +27538,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27769,6 +27767,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -28101,21 +28107,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28906,13 +28897,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -29058,11 +29042,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29781,6 +29762,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29973,9 +29958,8 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/index.html"
-msgstr "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
+msgstr ""
#: doc/classes/Input.xml
msgid ""
@@ -30203,8 +30187,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30233,8 +30217,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30391,7 +30375,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -30526,15 +30515,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -30577,8 +30560,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30609,8 +30592,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30654,11 +30637,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30825,19 +30805,16 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-#, fuzzy
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
-msgstr "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia General MIDI Instrument List"
+msgstr ""
#: doc/classes/InputEventMIDI.xml
#, fuzzy
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
#: doc/classes/InputEventMIDI.xml
@@ -30921,17 +30898,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30942,13 +30923,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30985,9 +30959,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -31114,13 +31092,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31878,15 +31849,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31934,6 +31896,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31994,11 +31979,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -32013,9 +31995,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -32092,7 +32073,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -32102,18 +32087,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -32265,11 +32266,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -32519,11 +32517,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32953,6 +32948,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -33150,13 +33149,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -35004,11 +34996,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_meshes.html"
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -35240,22 +35227,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -35399,13 +35370,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35654,13 +35618,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35732,9 +35689,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -35771,6 +35727,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35799,9 +35759,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -36129,7 +36088,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36689,6 +36648,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Restituisce l'arco-seno del parametro."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Restituisce l'inversa della radice quadrata del parametro."
@@ -36710,6 +36674,10 @@ msgid "Returns the map's up direction."
msgstr "Restituisce l'arco-seno del parametro."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Restituisce il seno del parametro."
@@ -36750,18 +36718,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -37001,9 +36957,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -37293,16 +37252,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -37348,7 +37303,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37363,7 +37318,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37376,7 +37331,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37391,17 +37346,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -37411,14 +37366,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -37428,7 +37383,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38137,6 +38092,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -38289,11 +38256,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -38464,9 +38428,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -38502,11 +38465,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38643,8 +38606,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38678,19 +38641,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38893,8 +38849,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -39021,7 +38977,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -39210,6 +39166,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39737,7 +39735,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -40001,8 +40008,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -40253,6 +40260,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Ritorna [code]true[/code] se [Rect2i] è piano o vuoto."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -40369,6 +40381,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -41335,14 +41354,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -41493,13 +41510,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -41619,6 +41631,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -42365,11 +42381,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44950,9 +44963,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -45363,6 +45375,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Calcola il prodotto vettoriale di questo vettore e [code]with[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46660,8 +46677,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46747,8 +46764,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46836,9 +46853,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -48219,12 +48236,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48319,6 +48338,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -48418,7 +48448,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48837,6 +48868,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48855,9 +48892,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -48884,14 +48920,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -49059,9 +49087,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -49500,8 +49527,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Restituisce l'inversa della radice quadrata del parametro."
#: doc/classes/Rect2.xml
msgid ""
@@ -49528,7 +49556,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49683,12 +49715,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49757,7 +49783,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -50075,9 +50105,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -50297,6 +50326,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50614,9 +50647,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -50811,9 +50847,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -51398,14 +51435,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -52003,11 +52038,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -52214,18 +52246,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52683,11 +52703,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/index.html"
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52997,17 +53012,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr "$DOCS_URL/tutorials/shaders/index.html"
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -53336,12 +53340,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53651,14 +53649,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -53743,17 +53738,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53816,11 +53806,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53961,8 +53956,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -54056,12 +54051,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -55413,9 +55402,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -55591,14 +55580,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55973,6 +55977,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Restituisce la tangente del parametro."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Restituisce il seno del parametro."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -56127,13 +56178,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -56399,7 +56443,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -56448,10 +56497,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56816,12 +56865,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -59238,11 +59302,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr "$DOCS_URL/tutorials/ui/gui_skinning.html"
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -59335,11 +59394,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
-msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
+msgstr ""
#: doc/classes/Theme.xml
msgid ""
@@ -59624,11 +59683,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -59703,15 +59763,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -60300,7 +60357,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -61135,18 +61197,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr "$DOCS_URL/tutorials/i18n/locales.html"
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -61263,7 +61313,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -61289,6 +61340,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -61337,9 +61393,9 @@ msgstr "Restituisce il coseno del parametro."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -61350,8 +61406,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -61391,8 +61447,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Restituisce l'inversa della radice quadrata del parametro."
#: doc/classes/Tree.xml
msgid ""
@@ -61760,11 +61817,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61799,12 +61855,26 @@ msgid ""
msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -63169,12 +63239,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -63201,11 +63265,8 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
#: doc/classes/Vector2.xml
msgid ""
@@ -63868,6 +63929,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -64079,29 +64148,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/index.html"
-msgstr "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -64129,7 +64193,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Restituisce il valore opposto del parametro."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64224,7 +64290,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64953,13 +65021,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66728,13 +66789,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -67170,8 +67224,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -67445,7 +67499,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69775,6 +69832,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69874,12 +69947,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -70336,13 +70403,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -70682,16 +70742,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70740,8 +70793,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -72452,13 +72505,12 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-#, fuzzy
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
-msgstr "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
+msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -72481,6 +72533,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -72586,15 +72646,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -72658,6 +72718,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/ja.po b/doc/translations/ja.po
index 4c8cf54ae5..a3017d5928 100644
--- a/doc/translations/ja.po
+++ b/doc/translations/ja.po
@@ -3,19 +3,21 @@
# Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# Wataru Onuki <bettawat@yahoo.co.jp>, 2020, 2021.
+# Wataru Onuki <bettawat@yahoo.co.jp>, 2020, 2021, 2022.
# BinotaLIU <me@binota.org>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# kazuma kondo <kazmax7@gmail.com>, 2020.
# Itoyo Onuki <bettawat@yahoo.co.jp>, 2021.
-# nitenook <admin@alterbaum.net>, 2021.
+# nitenook <admin@alterbaum.net>, 2021, 2022.
# Tarou Yamada <mizuningyou@yahoo.co.jp>, 2021.
+# sugusan <sugusan.development@gmail.com>, 2022.
+# Juto <mvobujd237@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-12-16 09:50+0000\n"
-"Last-Translator: nitenook <admin@alterbaum.net>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ja/>\n"
"Language: ja\n"
@@ -23,7 +25,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.10-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -66,69 +68,76 @@ msgid "Method Descriptions"
msgstr "メソッドã®èª¬æ˜Ž"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "プロパティã®èª¬æ˜Ž"
+msgstr "テーマプロパティã®èª¬æ˜Ž"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "継承元:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "継承先:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(%s を上書ã)"
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "デフォルト"
#: doc/tools/make_rst.py
msgid "Setter"
-msgstr ""
+msgstr "Setter"
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "値"
#: doc/tools/make_rst.py
msgid "Getter"
-msgstr ""
+msgstr "Getter"
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒåŠ¹åŠ›ã‚’å¾—ã‚‹ã«ã¯é€šå¸¸ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹å¿…è¦ãŒã‚りã¾"
+"ã™ã€‚"
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã¯å‰¯ä½œç”¨ãŒã‚りã¾ã›ã‚“ã€‚ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæŒã¤ãƒ¡ãƒ³ãƒå¤‰æ•°ã‚’変更ã™ã‚‹ã“"
+"ã¨ã¯ã‚りã¾ã›ã‚“。"
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
-msgstr ""
+msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã“ã“ã§è¨˜è¼‰ã•れã¦ã„る引数以é™ã‚‚ã„ãã¤ã§ã‚‚å—ã‘å–れã¾ã™ã€‚"
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€åž‹ã‚’作æˆã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚"
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å‘¼ã³å‡ºã—ã«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å¿…è¦ã¨ã—ãªã„ã®ã§ã€ã‚¯ãƒ©ã‚¹åを使ã£ã¦ç›´æŽ¥"
+"呼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/tools/make_rst.py
msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã“ã®åž‹ã‚’å·¦å´ã®ã‚ªãƒšãƒ©ãƒ³ãƒ‰ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹æœ‰åŠ¹ãªæ¼”ç®—å­ã®è¨˜è¿°ã‚’ã—"
+"ã¾ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -217,7 +226,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -229,7 +237,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] ã®ã‚¢ãƒ¼ã‚¯ã‚µã‚¤ãƒ³ã‚’ラジアンã§è¿”ã—ã¾ã™ã€‚サイン [code]s[/code] ã®è§’"
-"度を得るã®ã«ä½¿ãˆã¾ã™ã€‚\n"
+"度を得るã®ã«ä½¿ãˆã¾ã™ã€‚[code]s[/code] 㯠[code]-1.0[/code] 㨠[code]1.0[/"
+"code] (両端をå«ã‚€) ã®é–“ã«ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã€[method asin] "
+"㯠[constant NAN] ã‚’è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
"# s 㯠0.523599。rad2deg(s) ã§å¤‰æ›ã™ã‚Œã° 30 度。\n"
"s = asin(0.5)\n"
@@ -344,7 +354,6 @@ msgstr ""
"ã¨è§’度) ã«å¤‰æ›ã—ã¾ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -354,12 +363,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"[code]s[/code] を切り上ã’ã¦ä¸¸ã‚ (æ­£ã®ç„¡é™å¤§æ–¹å‘)ã€[code]s[/code] ã‚’è¶…ãˆã¦ã‹ã¤"
-"最å°ã®æ•´æ•°å€¤ã‚’è¿”ã—ã¾ã™ã€‚\n"
+"[code]s[/code] を切り上ã’ã¦ä¸¸ã‚ (æ­£ã®ç„¡é™å¤§æ–¹å‘)ã€[code]s[/code] より大ãã„æ•´"
+"数値ã®ä¸­ã§æœ€å°ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
-"i = ceil(1.45) # i 㯠2\n"
-"i = ceil(1.001) # i 㯠2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a 㯠2\n"
+"a = ceil(1.001) # a 㯠2\n"
+"[/codeblock]\n"
+"関連項目: [method floor], [method round], [method stepify], [int]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -382,7 +392,6 @@ msgstr ""
"ã“れ㯠[method ord] ã®é€†ã§ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -392,16 +401,12 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
-"[code]value[/code] をクランプã—ã€[code]min[/code] より多ãã‹ã¤ [code]max[/"
-"code] より少ãªã„値を返ã—ã¾ã™ã€‚\n"
+"[code]value[/code] ã‚’Clampã—ã€[code]min[/code] より多ãã‹ã¤ [code]max[/code] "
+"より少ãªã„値を返ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a 㯠20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a 㯠1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a 㯠20\n"
+"a = clamp(-10, 1, 20) # a 㯠1\n"
+"a = clamp(15, 1, 20) # a 㯠15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -463,7 +468,6 @@ msgid "Deprecated alias for [method step_decimals]."
msgstr "[method step_decimals] ã®éžæŽ¨å¥¨ãªã‚¨ã‚¤ãƒªã‚¢ã‚¹ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -473,11 +477,12 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
+"[b]注:[/b] [code]dectime[/code] ã¯Godot 4.0ã§ã¯å»ƒæ­¢ã•れる予定ã§ã™ã€‚代ã‚り㫠"
+"[method move_toward] を使ã†ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚\n"
"[code]value[/code] ã‹ã‚‰ [code]step[/code] * [code]amount[/code] を引ã„ãŸå€¤ã‚’"
"è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a = 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -500,9 +505,25 @@ msgid ""
"want a true content-aware comparison, you have to use [code]deep_equal[/"
"code]."
msgstr ""
+"2ã¤ã®å€¤ã®å®Ÿéš›ã®å†…容をãƒã‚§ãƒƒã‚¯ã—ã¦æ¯”較ã—ã¾ã™ã€‚ã‚らゆる `Array` ã‚„ "
+"`Dictionary` を最も深ã„レベルã¾ã§ã•ã‹ã®ã¼ã£ã¦èª¿ã¹ã¾ã™ã€‚\n"
+"ã“れã¯ã„ãã¤ã‹ã®ç‚¹ã§ [code]==[/code] ã¨å¯¾æ¯”ã§ãã¾ã™:\n"
+"- [code]null[/code]ã€[code]int[/code]ã€[code]float[/code]ã€[code]String[/"
+"code]ã€[code]Object[/code]ã€[code]RID[/code]ã®å ´åˆã€[code]deep_equal[/code]ã¨"
+"[code]==[/code]ã¯åŒã˜ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚\n"
+"- [code]Dictionary[/code]ã®å ´åˆã€[code]==[/code]ã¯å†å¸°ã‚„内容をæ„è­˜ã™ã‚‹ã“ã¨ãª"
+"ãã€ä¸¡æ–¹ã®å¤‰æ•°ãŒå…¨ãåŒã˜[code]Dictionary[/code]を指ã—ã¦ã„れã°ç­‰å¼ã¨ã¿ãªã—ã¾"
+"ã™ã€‚\n"
+"- [code]Array[/code]ã®å ´åˆã€[code]==[/code]ã¯ã€ä¸€ã¤ç›®ã®[code]Array[/code]ã®å„"
+"é …ç›®ãŒã€äºŒã¤ç›®ã®[code]Array[/code]ã§ã®å¯¾å¿œã™ã‚‹é …ç›®ã¨ãれãžã‚Œ[code]==[/code]ã§"
+"比較ã—ãŸã®ã¨åŒæ§˜ã«ç­‰ã—ã„é™ã‚Šç­‰å¼ã¨ã¿ãªã—ã¾ã™ã€‚ã“れã¯ã€[code]==[/code]ã¯"
+"[code]Array[/code]ã§ã¯å†å¸°ã—ã¾ã™ãŒã€[code]Dictionary[/code]ã§ã¯å†å¸°ã—ãªã„ã“ã¨"
+"ã‚’æ„味ã—ã¾ã™ã€‚\n"
+"ã¤ã¾ã‚Šã€[code]Dictionary[/code]ãŒé–¢ä¸Žã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã€æœ¬å½“ã®æ„味ã§å†…容を"
+"考慮ã—ãŸæ¯”較をã—ãŸã„ã®ã§ã‚れã°ã€[code]deep_equal[/code]を使用ã—ãªã‘れã°ãªã‚Šã¾"
+"ã›ã‚“。"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -516,13 +537,12 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"インスタンスã‹ã‚‰å¤‰æ›ã•れãŸè¾žæ›¸ã‚’ã€å…ƒã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«å¤‰æ›ã—ã¦æˆ»ã—ã¾ã™ã€‚デシリ"
-"アライズã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚"
+"[method inst2dict]ã«ã‚ˆã£ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‹ã‚‰ç”Ÿæˆã•れãŸè¾žæ›¸ã‚’ã€å…ƒã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹"
+"ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚デシリアライズã™ã‚‹ã®ã«ä¾¿åˆ©ã§ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
#, fuzzy
@@ -582,7 +602,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -597,18 +616,17 @@ msgid ""
"directly."
msgstr ""
"[code]s[/code] ã‚’æ•´æ•°ã«åˆ‡ã‚Šæ¨ã¦ã¦ä¸¸ã‚ (è² ã®ç„¡é™å¤§æ–¹å‘)ã€[code]s[/code] よりå°"
-"ã•ãã‹ã¤æœ€å¤§ã®æ•´æ•°ã‚’è¿”ã—ã¾ã™ã€‚\n"
+"ã•ã„æ•´æ•°ã®ä¸­ã§æœ€å¤§ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚\n"
"[codeblock]\n"
-"# a 㯠2.0\n"
-"a = floor(2.99)\n"
-"# a 㯠-3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.99) # a 㯠2.0\n"
+"a = floor(-2.99) # a 㯠-3.0\n"
"[/codeblock]\n"
-"[b]注:[/b] ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æµ®å‹•å°æ•°ç‚¹æ•°ã§è¿”ã—ã¾ã™ã€‚ã‚‚ã—æ•´æ•°ãŒå¿…è¦ã§ã‚れã°ã€ç›´"
-"接 [code]int(s)[/code] ãŒä½¿ãˆã¾ã™ã€‚"
+"関連項目: [method ceil], [method round], [method stepify], and [int]\n"
+"[b]注:[/b] ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æµ®å‹•å°æ•°ç‚¹æ•°ã§è¿”ã—ã¾ã™ã€‚\n"
+"ã‚‚ã—æ•´æ•°ãŒå¿…è¦ã§ã‚れã°ã€[code]s[/code]ãŒæ­£ã®æ•°ãªã‚‰ç›´æŽ¥ [code]int(s)[/code] ã‚’"
+"使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -620,8 +638,7 @@ msgstr ""
"[code]a/b[/code] ã®å‰°ä½™ã‚’æµ®å‹•å°æ•°ç‚¹æ•°ã§è¿”ã—ã¾ã™ã€‚符å·ã¯ [code]a[/code] ã®ã‚‚ã®"
"ã¨åŒã˜ã«ãªã‚Šã¾ã™ã€‚\n"
"[codeblock]\n"
-"# 余り㯠1.5\n"
-"var remainder = fmod(7, 5.5)\n"
+"var remainder = fmod(7, 5.5) # 余り㯠1.5\n"
"[/codeblock]\n"
"æ•´æ•°ã«ã‚ˆã‚‹å‰°ä½™è¨ˆç®—ã‚’ã™ã‚‹ã«ã¯ã€% オペレータを使用ã—ã¦ãã ã•ã„。"
@@ -816,6 +833,21 @@ msgid ""
"[/codeblock]\n"
"See also [method lerp] which performs the reverse of this operation."
msgstr ""
+"[code]from[/code] 㨠[code]to[/code] ã§æŒ‡å®šã•れãŸç¯„囲ã¨ã€[code]weight[/code] "
+"ã§æŒ‡å®šã•れãŸè£œé–“値を考慮ã—ãŸã€è£œé–“ã¾ãŸã¯å¤–挿ã®ä¿‚æ•°ã‚’è¿”ã—ã¾ã™ã€‚[code]weight[/"
+"code] ㌠[code]from[/code] 㨠[code]to[/code] ã®é–“ (ã“れらもå«ã‚€) ã§ã‚れã°ã€"
+"è¿”ã•れる値ã¯[code]0.0[/code] ã‹ã‚‰ [code]1.0[/code] ã®é–“ã«ãªã‚Šã¾ã™ã€‚"
+"[code]weight[/code] ãŒã“ã®ç¯„囲外ã«ä½ç½®ã™ã‚‹å ´åˆã¯ã€å¤–挿係数ãŒè¿”ã•れã¾ã™ (戻り"
+"値㯠[code]0.0[/code] よりå°ã•ã„ã‹ã€[code]1.0[/code] より大ãã„)。\n"
+"[codeblock]\n"
+"# 以下ã®`lerp()`ã®å‘¼ã³å‡ºã—ã«ãŠã‘る補間比率ã¯0.75ã§ã™ã€‚\n"
+"var middle = lerp(20, 30, 0.75)\n"
+"# `middle` ã¯ç¾åœ¨ 27.5 ã§ã™ã€‚\n"
+"# å…ƒã®æ¯”率を忘れãŸã¨ã—ã¦ã€å…ƒã«æˆ»ã—ãŸã„ã¨ã—ã¾ã™ã€‚\n"
+"var ratio = inverse_lerp(20, 30, 27.5)\n"
+"# `ratio` 㯠0.75 ã«ãªã‚Šã¾ã™ã€‚\n"
+"[/codeblock]\n"
+"ã“ã®æ“作ã®é€†ã‚’行ㆠ[method lerp] ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -885,7 +917,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Linearly interpolates between two values by the factor defined in "
"[code]weight[/code]. To perform interpolation, [code]weight[/code] should be "
@@ -913,12 +944,15 @@ msgstr ""
"り値ã¯ãれã¨åŒã˜åž‹ã«ãªã‚Šã¾ã™ (ã“ã®ã¨ã [code]lerp[/code] ã¯ãã®ãƒ™ã‚¯ãƒˆãƒ«åž‹ã® "
"[code]lerp[/code] メソッドを呼ã³å‡ºã—ã¾ã™)。\n"
"[codeblock]\n"
-"lerp(0, 4, 0.75) # 3.0 ã¨è¿”ã™\n"
-"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Vector2(2, 3.5) ã¨è¿”ã™\n"
-"[/codeblock]"
+"lerp(0, 4, 0.75) # 3.0 ã‚’è¿”ã™\n"
+"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Vector2(2, 3.5) ã‚’è¿”ã™\n"
+"[/codeblock]\n"
+"線形補間㯠[code]weight[/code]ã§å®šã‚られãŸå€¤ã‚’ã‚‚ã¨ã«è¡Œã‚れã¾ã™ã€‚ "
+"[code]weight[/code]ã¯[code]0.0[/code]以上[code]1.0[/code]ä»¥ä¸‹ã®æ•°å€¤ã§ã‚ã‚‹å¿…è¦"
+"ãŒã‚りã¾ã™ãŒã€ã“ã®ç¯„囲を逸脱ã—ãŸå€¤ã‚‚ [i]extrapolation[/i]ã§ã¯ä½¿ã†ã“ã¨ãŒã§ãã¾"
+"ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Linearly interpolates between two angles (in radians) by a normalized "
"value.\n"
@@ -936,8 +970,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"æ­£è¦åŒ–ã•れãŸå€¤ã«ã‚ˆã£ã¦ï¼’ã¤ã®è§’度 (ラジアン) 間を線形補間ã—ã¾ã™ã€‚\n"
-"[method lerp] ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€ã—ã‹ã— [constant @GDScript.TAU] を振り切れãŸã¨"
-"ãã§ã‚‚æ­£ã—ã補間ã§ãã¾ã™ã€‚\n"
+"[method lerp] ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€ [constant @GDScript.TAU] を振り切れãŸã¨ãã§ã‚‚"
+"æ­£ã—ã補間ã§ãã¾ã™ã€‚ [method lerp_angle]ã§ã‚¤ãƒ¼ã‚¸ãƒ³ã‚°ã‚’ã‹ã‘ãŸç·šå½¢è£œé–“を行ã†ã«"
+"ã¯ã€ [method ease]ã‚‚ã—ãã¯[method smoothstep]ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ã£ã¦ãã ã•ã„。\n"
"[codeblock]\n"
"extends Sprite\n"
"var elapsed = 0.0\n"
@@ -974,7 +1009,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Loads a resource from the filesystem located at [code]path[/code]. The "
"resource is loaded on the method call (unless it's referenced already "
@@ -1004,12 +1038,13 @@ msgstr ""
"[b]注:[/b] リソースã®ãƒ‘スã¯ã€ãƒ•ァイルシステム ドック内ã«ã‚るリソースをå³ã‚¯"
"リックã—ã¦ã€\"パスをコピー\" ã‚’é¸ã¹ã°å¾—られã¾ã™ã€‚\n"
"[codeblock]\n"
-"# プロジェクト ディレクトリã®ãƒ«ãƒ¼ãƒˆã«ã‚ã‚‹ main ã¨ã„ã†åå‰ã®ã‚·ãƒ¼ãƒ³ã‚’読ã¿è¾¼"
-"む。\n"
+"# プロジェクト ディレクトリã®ãƒ«ãƒ¼ãƒˆã«ã‚ã‚‹ main ã¨ã„ã†åå‰ã®ã‚·ãƒ¼ãƒ³ã‚’読ã¿è¾¼ã‚€\n"
"var main = load(\"res://main.tscn\")\n"
"[/codeblock]\n"
"[b]é‡è¦:[/b] 絶対パスã§ã‚ã‚‹å¿…è¦ãŒã‚りã€ç›¸å¯¾ãƒ‘スã ã¨å˜ã« [code]null[/code] ã‚’"
-"è¿”ã—ã¾ã™ã€‚"
+"è¿”ã—ã¾ã™ã€‚\n"
+"ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ [method ResourceLoader.load]ã‚’å˜ç´”化ã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™ã€‚より高"
+"度ãªå‡¦ç†ã‚’ã™ã‚‹ã«ã¯ [method ResourceLoader.load]を使ã†ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1496,6 +1531,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Returns an array with the given range. Range can be 1 argument [code]N[/"
"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], "
@@ -1536,6 +1572,45 @@ msgid ""
"3\n"
"[/codeblock]"
msgstr ""
+"与ãˆã‚‰ã‚ŒãŸç¯„囲ã§ã®é…列を返ã—ã¾ã™ã€‚ ç¯„å›²ã®æŒ‡å®šã«ã¯1ã¤ã®å¼•æ•° [code]N[/code] (0 "
+"ã‹ã‚‰ [code]N[/code] - 1 ã¾ã§) ã€2ã¤ã®å¼•æ•°([code]initial[/code], [code]final "
+"- 1[/code]) ã¾ãŸã¯3ã¤ã®å¼•æ•°([code]initial[/code], [code]final - 1[/code], "
+"[code]increment[/code]) ãŒã‚りã¾ã™ã€‚ã‚‚ã—範囲ãŒä¸æ­£ãªå€¤ (例ãˆã° "
+"[code]range(2, 5, -1)[/code] ã‚„ [code]range(5, 5, 1)[/code]) ã ã£ãŸå ´åˆã¯ç©ºã®"
+"é…列ãŒè¿”ã•れã¾ã™ã€‚\n"
+"与ãˆã‚‰ã‚ŒãŸç¯„囲ã§ã®é…列を返ã—ã¾ã™ã€‚ [code]range()[/code] ã¯1ã¤ã®å¼•æ•°N "
+"([code]0[/code] ã‹ã‚‰ [code]N - 1[/code] ã¾ã§) ã€äºŒã¤ã®å¼•æ•° ([code]initial[/"
+"code], [code]final - 1[/code]) ã¾ãŸã¯3ã¤ã®å¼•æ•° ([code]initial[/code], "
+"[code]final - 1[/code], [code]increment[/code]) ã‚’ã‚‚ã¡ã¾ã™ã€‚ "
+"[code]increment[/code] ã¯è² ã®å€¤ã«ã‚‚ãªã‚Šã¾ã™ã€‚ã‚‚ã— [code]increment[/code] ãŒè² "
+"ã®å€¤ãªã‚‰ã°ã€ [code]final - 1[/code] 㯠[code]final + 1[/code] ã«ãªã‚Šã¾ã™ã€‚ã¾"
+"ãŸã€ãã® initial ã®å€¤ã‚‚ループを実行ã™ã‚‹ãŸã‚ã« final ã®å€¤ã‚ˆã‚Šå¤§ãããªã‘れã°ã„"
+"ã‘ã¾ã›ã‚“。\n"
+"[codeblock]\n"
+"print(range(4))\n"
+"print(range(2, 5))\n"
+"print(range(0, 6, 2))\n"
+"[/codeblock]\n"
+"出力:\n"
+"[codeblock]\n"
+"[0, 1, 2, 3]\n"
+"[2, 3, 4]\n"
+"[0, 2, 4]\n"
+"[/codeblock]\n"
+"[Array] を逆順ã§å‡ºåŠ›ã™ã‚‹ã«ã¯ã€ã“ã®ã‚ˆã†ã«ä½¿ç”¨ã—ã¦ãã ã•ã„:\n"
+"[codeblock]\n"
+"var array = [3, 6, 9]\n"
+"var i := array.size() - 1\n"
+"while i >= 0:\n"
+" print(array[i])\n"
+" i -= 1\n"
+"[/codeblock]\n"
+"出力:\n"
+"[codeblock]\n"
+"9\n"
+"6\n"
+"3\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -2099,8 +2174,8 @@ msgstr ""
"å‹•çš„ã«ç™ºä¿¡ã•れã¾ã™ã€‚ãã®ãŸã‚ã€ã“れを [code]yield[/code] メソッド㮠"
"[code]signal[/code] パラメータã«ã™ã‚Œã°å†é–‹ã§ãã¾ã™ã€‚\n"
"関数をyieldã™ã‚‹ã«ã¯ã€ãã®çµæžœã¨ãªã‚‹é–¢æ•°ã‚‚ã¾ãŸ [code]GDScriptFunctionState[/"
-"code] ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚上記ã®ä¾‹ã® [code]yield(get_tree(), \"idle_frame"
-"\")[/code] ã«æ³¨ç›®ã—ã¦ã¿ã¦ãã ã•ã„。"
+"code] ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚上記ã®ä¾‹ã® [code]yield(get_tree(), "
+"\"idle_frame\")[/code] ã«æ³¨ç›®ã—ã¦ã¿ã¦ãã ã•ã„。"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -3524,39 +3599,32 @@ msgid "Gamepad button 15."
msgstr "ゲームパッド ボタン15。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 16."
-msgstr "ゲームパッド ボタン1。"
+msgstr "ゲームパッド ボタン16。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 17."
-msgstr "ゲームパッド ボタン1。"
+msgstr "ゲームパッド ボタン17。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 18."
-msgstr "ゲームパッド ボタン1。"
+msgstr "ゲームパッド ボタン18。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 19."
-msgstr "ゲームパッド ボタン1。"
+msgstr "ゲームパッド ボタン19。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 20."
-msgstr "ゲームパッド ボタン2。"
+msgstr "ゲームパッド ボタン20。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 21."
-msgstr "ゲームパッド ボタン2。"
+msgstr "ゲームパッド ボタン21。"
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad button 22."
-msgstr "ゲームパッド ボタン2。"
+msgstr "ゲームパッド ボタン22。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -3566,6 +3634,11 @@ msgid ""
"- Linux: Up to 80 buttons.\n"
"- Windows and macOS: Up to 128 buttons."
msgstr ""
+"エンジンã§ã‚µãƒãƒ¼ãƒˆã•れるコントローラーã®ãƒœã‚¿ãƒ³ã®æœ€å¤§æ•°ã§ã™ã€‚特定ã®ãƒ—ラット"
+"フォームã«ãŠã„ã¦ã¯ã€å®Ÿéš›ã®ä¸Šé™ãŒã“れより少ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™:\n"
+"- Android: 36ボタンã¾ã§ã€‚\n"
+"- Linux: 80ボタンã¾ã§ã€‚\n"
+"- Windows ãŠã‚ˆã³ macOS: 128ボタンã¾ã§ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "DualShock circle button."
@@ -3826,30 +3899,41 @@ msgid ""
"MIDI note OFF message. See the documentation of [InputEventMIDI] for "
"information of how to use MIDI inputs."
msgstr ""
+"MIDIノートOFF メッセージ。MIDI入力ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€[InputEventMIDI] ã®ãƒ‰"
+"キュメントをå‚ç…§ã—ã¦ãã ã•ã„。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI note ON message. See the documentation of [InputEventMIDI] for "
"information of how to use MIDI inputs."
msgstr ""
+"MIDIノートON メッセージ。MIDI入力ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€[InputEventMIDI] ã®ãƒ‰"
+"キュメントをå‚ç…§ã—ã¦ãã ã•ã„。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI aftertouch message. This message is most often sent by pressing down on "
"the key after it \"bottoms out\"."
msgstr ""
+"MIDIアフタータッãƒÂ ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€éµç›¤ãŒã€Œåº•を打ã£ãŸã€å¾Œã«ã•ら"
+"ã«éµç›¤ã‚’押ã—下ã’ã‚‹ã“ã¨ã§é€ä¿¡ã•れる場åˆãŒã»ã¨ã‚“ã©ã§ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI control change message. This message is sent when a controller value "
"changes. Controllers include devices such as pedals and levers."
msgstr ""
+"MIDIコントロールãƒã‚§ãƒ³ã‚¸Â ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚コントローラã®å€¤ãŒå¤‰åŒ–ã—ãŸã¨ãã«é€ä¿¡ã•れ"
+"るメッセージã§ã™ã€‚コントローラーã«ã¯ã€ãƒšãƒ€ãƒ«ã‚„レãƒãƒ¼ãªã©ã®ãƒ‡ãƒã‚¤ã‚¹ãŒã‚りã¾"
+"ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI program change message. This message sent when the program patch number "
"changes."
msgstr ""
+"MIDIプログラムãƒã‚§ãƒ³ã‚¸Â ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚プログラムã®ãƒ‘ッãƒãƒŠãƒ³ãƒãƒ¼ãŒå¤‰æ›´ã•れãŸã¨ã"
+"ã«é€ä¿¡ã•れるメッセージã§ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -3857,54 +3941,74 @@ msgid ""
"down on the key after it \"bottoms out\". This message is different from "
"polyphonic after-touch as it indicates the highest pressure across all keys."
msgstr ""
+"MIDIãƒãƒ£ãƒ³ãƒãƒ«ãƒ—レッシャー メッセージ。ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€éµç›¤ãŒã€Œåº•を打ã£ãŸã€"
+"後ã«ã•らã«éµç›¤ã‚’押ã—下ã’ã‚‹ã“ã¨ã§é€ä¿¡ã•れる場åˆãŒå¤šã„ã§ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€"
+"ãƒãƒªãƒ•ォニック・アフタータッãƒã¨ã¯ç•°ãªã‚Šã€å…¨éµç›¤ã®ä¸­ã§ã®æœ€ã‚‚高ã„圧力を示ã—ã¾"
+"ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI pitch bend message. This message is sent to indicate a change in the "
"pitch bender (wheel or lever, typically)."
msgstr ""
+"MIDIピッãƒãƒ™ãƒ³ãƒ‰Â ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ã€ãƒ”ッãƒãƒ™ãƒ³ãƒ€ãƒ¼ (通常ã€ãƒ›ã‚¤ãƒ¼ãƒ«"
+"ã¾ãŸã¯ãƒ¬ãƒãƒ¼) ã®å¤‰åŒ–を示ã™ãŸã‚ã«é€ä¿¡ã•れã¾ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI system exclusive message. This has behavior exclusive to the device "
"you're receiving input from. Getting this data is not implemented in Godot."
msgstr ""
+"MIDIシステムエクスクルーシブ メッセージ。ã“れã¯ã€å…¥åŠ›æºã®ãƒ‡ãƒã‚¤ã‚¹å°‚用ã®å‹•作を"
+"æŒã£ã¦ã„ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã®å–å¾—ã¯Godotã«ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI quarter frame message. Contains timing information that is used to "
"synchronize MIDI devices. Getting this data is not implemented in Godot."
msgstr ""
+"MIDIクォーターフレーム メッセージ。MIDIæ©Ÿå™¨ã‚’åŒæœŸã•ã›ã‚‹ãŸã‚ã®ã‚¿ã‚¤ãƒŸãƒ³ã‚°æƒ…å ±ãŒ"
+"å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã®å–å¾—ã¯Godotã«ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI song position pointer message. Gives the number of 16th notes since the "
"start of the song. Getting this data is not implemented in Godot."
msgstr ""
+"MIDIソングãƒã‚¸ã‚·ãƒ§ãƒ³ãƒã‚¤ãƒ³ã‚¿ãƒ¼Â ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚曲ã®å…ˆé ­ã‹ã‚‰ã®16åˆ†éŸ³ç¬¦ã®æ•°ã‚’示ã—ã¾"
+"ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿ã®å–å¾—ã¯ã€Godotã«ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI song select message. Specifies which sequence or song is to be played. "
"Getting this data is not implemented in Godot."
msgstr ""
+"MIDIソングセレクト メッセージ。å†ç”Ÿã™ã‚‹ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚„曲を指定ã—ã¾ã™ã€‚ã“ã®ãƒ‡ãƒ¼ã‚¿"
+"ã®å–å¾—ã¯ã€Godotã«ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“。"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI tune request message. Upon receiving a tune request, all analog "
"synthesizers should tune their oscillators."
msgstr ""
+"MIDIãƒãƒ¥ãƒ¼ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆÂ ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚ãƒãƒ¥ãƒ¼ãƒ³ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ä¿¡ã—ãŸã¨ãã€ã™ã¹ã¦ã®"
+"アナログシンセサイザーã¯ã‚ªã‚·ãƒ¬ãƒ¼ã‚¿ãƒ¼ã®ãƒãƒ¥ãƒ¼ãƒ‹ãƒ³ã‚°ã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI timing clock message. Sent 24 times per quarter note when "
"synchronization is required."
msgstr ""
+"MIDIã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚¯ãƒ­ãƒƒã‚¯Â ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚åŒæœŸãŒå¿…è¦ãªå ´åˆã«ã€4分音符ã”ã¨ã«24回é€ä¿¡"
+"ã•れã¾ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI start message. Start the current sequence playing. This message will be "
"followed with Timing Clocks."
msgstr ""
+"MIDIスタートメッセージ。ç¾åœ¨ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã®å†ç”Ÿã‚’é–‹å§‹ã—ã¾ã™ã€‚ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®"
+"後ã«ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚¯ãƒ­ãƒƒã‚¯ãŒç¶šãã¾ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "MIDI continue message. Continue at the point the sequence was stopped."
@@ -4207,9 +4311,9 @@ msgid ""
"easing."
msgstr ""
"æµ®å‹•å°æ•°ç‚¹æ•°ãƒ—ロパティãŒç´¯ä¹—イージング関数を介ã—ã¦ç·¨é›†ã•れるã¹ãã§ã‚ã‚‹ã¨ã„ã†"
-"ヒント。ヒント文字列ã«ã¯ã€æ›²ç·šã‚’水平方å‘ã«å転ã•ã›ã‚‹ãŸã‚ã®[code]\"attenuation"
-"\"[/code] ã€ãŠã‚ˆã³/ã¾ãŸã¯ã€ã‚¤ãƒ³/アウト・イージングをå«ã‚ã‚‹ãŸã‚ã® "
-"[code]\"inout\"[/code] ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+"ヒント。ヒント文字列ã«ã¯ã€æ›²ç·šã‚’水平方å‘ã«å転ã•ã›ã‚‹ãŸã‚ã®"
+"[code]\"attenuation\"[/code] ã€ãŠã‚ˆã³/ã¾ãŸã¯ã€ã‚¤ãƒ³/アウト・イージングをå«ã‚ã‚‹"
+"ãŸã‚ã® [code]\"inout\"[/code] ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Deprecated hint, unused."
@@ -4280,8 +4384,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"文字列プロパティãŒã€ãƒ—ロジェクトフォルダ外ã®ãƒ•ァイルã¸ã®çµ¶å¯¾ãƒ‘スã§ã‚ã‚‹ã“ã¨ã®"
"ヒント。ã“れを編集ã™ã‚‹ã¨ã€ãƒ‘ã‚¹ã‚’é¸æŠžã™ã‚‹ãŸã‚ã®ãƒ•ァイル ダイアログãŒè¡¨ç¤ºã•れã¾"
@@ -4680,22 +4784,21 @@ msgstr ""
"[b]注:[/b] [Rect2]ã¨ã¯ç•°ãªã‚Šã€[AABB]ã«ã¯æ•´æ•°å€¤åº§æ¨™ã‚’使用ã™ã‚‹ãƒãƒªã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã¯"
"ã‚りã¾ã›ã‚“。"
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4746,6 +4849,8 @@ msgid ""
"Returns the center of the [AABB], which is equal to [member position] + "
"([member size] / 2)."
msgstr ""
+"[AABB] ã®ä¸­å¤®ã®åº§æ¨™ã‚’è¿”ã—ã¾ã™ã€‚ã“れ㯠[member position] + ([member size] / "
+"2) ã¨ç­‰ã—ã„ã§ã™ã€‚"
#: doc/classes/AABB.xml
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
@@ -4932,6 +5037,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"OK [Button] ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’è¿”ã—ã¾ã™ã€‚\n"
+"[b]警告:[/b] ã“れã¯å¿…é ˆã®å†…部ノードãªã®ã§ã€å‰Šé™¤ã—ã¦è§£æ”¾ã™ã‚‹ã¨ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã™ã‚‹å¯"
+"能性ãŒã‚りã¾ã™ã€‚ã“ã®ãƒŽãƒ¼ãƒ‰ã¾ãŸã¯ãã®å­ãƒŽãƒ¼ãƒ‰ã‚’éžè¡¨ç¤ºã«ã™ã‚‹å ´åˆã¯ã€ [member "
+"CanvasItem.visible] プロパティを使用ã—ã¦ãã ã•ã„。"
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -4949,6 +5058,11 @@ msgid ""
"the [code]button[/code] will no longer emit this dialog's [signal "
"custom_action] signal or cancel this dialog."
msgstr ""
+"ダイアログã‹ã‚‰ [code]button[/code] を削除ã—ã¾ã™ã€‚ [code]button[/code] ã¯è§£æ”¾"
+"ã•れã¾ã›ã‚“。 [code]button[/code] 㯠[method add_button] ã¾ãŸã¯ [method "
+"add_cancel] メソッドãŒè¿½åŠ ã•れ㟠[Button] ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚削除後㫠"
+"[code]button[/code] を押ã—ã¦ã‚‚ã€ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã® [signal custom_action] ã‚·ã‚°"
+"ナルã¯ç™ºä¿¡ã•れãšã€ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã™ã€‚"
#: doc/classes/AcceptDialog.xml
msgid "Sets autowrapping for the text in the dialog."
@@ -5150,11 +5264,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5163,9 +5275,8 @@ msgstr "https://docs.godotengine.org/ja/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5257,6 +5368,10 @@ msgstr ""
"SpriteFramesパãƒãƒ«ã«ã¦è¨­å®šã§ãã¾ã™ã€‚"
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr "アニメーションãŒå†ç”Ÿä¸­ã§ã‚れ㰠[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
@@ -5468,10 +5583,6 @@ msgstr ""
"ã‚りã€ãれãžã‚Œã«å°‚用ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ [enum TrackType] ã‚’ãƒã‚§ãƒƒ"
"クã—ã¦ã€åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚¤ãƒ—を確èªã—ã¦ãã ã•ã„。"
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "アニメーションã«ãƒˆãƒ©ãƒƒã‚¯ã‚’追加ã—ã¾ã™ã€‚"
@@ -6027,25 +6138,6 @@ msgstr ""
"主㫠[AnimationNodeBlendTree] ã§ä½¿ç”¨ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’作æˆã™ã‚‹å ´åˆã¯ã“れを継承ã—ã€"
"ãれ以外ã®å ´åˆã¯ [AnimationRootNode] を使用ã—ã¦ãã ã•ã„。"
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6286,6 +6378,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "押ã—出ã—モード。"
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -6295,9 +6397,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6321,9 +6422,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -7117,6 +7217,11 @@ msgstr ""
"アニメーションã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ã®æ›´æ–°ã¯process時ã«è¡Œã‚れã¾ã™ã€‚"
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "押ã—出ã—モード。"
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7343,6 +7448,14 @@ msgid ""
"get the currently playing animation, and internally for animation playback "
"tracks. For more information, see [Animation]."
msgstr ""
+"ç¾åœ¨å†ç”Ÿã—ã¦ã„るアニメーションã®åå‰ã‚’指定ã—ã¾ã™ã€‚å†ç”Ÿä¸­ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒãª"
+"ã„å ´åˆã€ãƒ—ロパティã®å€¤ã¯ç©ºã®æ–‡å­—列ã«ãªã‚Šã¾ã™ã€‚ã“ã®å€¤ã‚’変更ã—ã¦ã‚‚ã€ã‚¢ãƒ‹ãƒ¡ãƒ¼"
+"ションã¯å†é–‹ã•れã¾ã›ã‚“。アニメーションã®å†ç”Ÿã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ [method play] "
+"ã‚’å‚ç…§ã—ã¦ãã ã•ã„。\n"
+"[b]注:[/b] ã“ã®ãƒ—ロパティã¯ã‚¤ãƒ³ã‚¹ãƒšã‚¯ã‚¿ã«è¡¨ç¤ºã•れã¾ã™ãŒã€ç·¨é›†ã•れるã“ã¨ã¯æ„図"
+"ã•れã¦ãŠã‚‰ãšã€ã‚·ãƒ¼ãƒ³ã«ä¿å­˜ã•れるã“ã¨ã‚‚ã‚りã¾ã›ã‚“。ã“ã®ãƒ—ロパティã¯ä¸»ã«ç¾åœ¨å†"
+"生中ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã€å†…部的ã«ã¯ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³å†ç”Ÿãƒˆ"
+"ラックã«ä½¿ç”¨ã•れã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ [Animation] ã‚’å‚ç…§ã—ã¦ãã ã•ã„。"
#: doc/classes/AnimationPlayer.xml
msgid "The length (in seconds) of the currently being played animation."
@@ -7395,6 +7508,12 @@ msgid ""
"defined by the reset animation, if any, with the editor keeping the values "
"that the nodes had before saving."
msgstr ""
+"ã“れã¯ã‚¨ãƒ‡ã‚£ã‚¿ã§ä½¿ç”¨ã•れã¾ã™ã€‚ [code]true[/code] ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã€ã‚·ãƒ¼ãƒ³"
+"ã¯ãƒªã‚»ãƒƒãƒˆã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³(時間ãŒ0ã«ã‚·ãƒ¼ã‚¯ã•れãŸã‹ã®ã‚ˆã†ãª)ãŒé©ç”¨ã•れãŸçµæžœã¨ã¨"
+"ã‚‚ã«ä¿å­˜ã•れã€ä¿å­˜å¾Œã«å…ƒã«æˆ»ã•れã¾ã™ã€‚\n"
+"ã¤ã¾ã‚Šã€ä¿å­˜ã•れãŸã‚·ãƒ¼ãƒ³ãƒ•ァイルã«ã¯ã€ãƒªã‚»ãƒƒãƒˆã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã§å®šç¾©ã•れãŸã€Œãƒ‡"
+"フォルトãƒãƒ¼ã‚ºã€(存在ã™ã‚‹å ´åˆ)ãŒå«ã¾ã‚Œã€ã‚¨ãƒ‡ã‚£ã‚¿ã¯ä¿å­˜å‰ã«ãƒŽãƒ¼ãƒ‰ãŒæŒã£ã¦ã„ãŸ"
+"å€¤ã‚’ä¿æŒã—ã¾ã™ã€‚"
#: doc/classes/AnimationPlayer.xml
msgid "The node from which node path references will travel."
@@ -7407,6 +7526,10 @@ msgid ""
"[b]Note:[/b] The signal is not emitted when the animation is changed via "
"[method play] or from [AnimationTree]."
msgstr ""
+"å‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒçµ‚了ã—ãŸå¾Œã€ã‚­ãƒ¥ãƒ¼ã«å…¥ã£ã¦ã„るアニメーションãŒå†ç”Ÿã•れる"
+"ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [method queue] ã‚‚å‚ç…§ã—ã¦ãã ã•ã„。\n"
+"[b]注:[/b] アニメーション㌠[method play] 経由ã¾ãŸã¯ [AnimationTree] ã‹ã‚‰å¤‰æ›´"
+"ã•れãŸå ´åˆã€ã‚·ã‚°ãƒŠãƒ«ã¯ç™ºä¿¡ã•れã¾ã›ã‚“。"
#: doc/classes/AnimationPlayer.xml
msgid "Notifies when an animation finished playing."
@@ -7482,6 +7605,11 @@ msgstr ""
"ã•ã„。"
#: doc/classes/AnimationTree.xml
+#, fuzzy
+msgid "Using AnimationTree"
+msgstr "ã“ã® [AnimationTreePlayer] をリセットã—ã¾ã™ã€‚"
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr "指定ã—ãŸæ™‚é–“ (ç§’) ã ã‘アニメーションを手動ã§é€²ã‚ã¾ã™ã€‚"
@@ -7624,6 +7752,8 @@ msgid ""
"Binds a new [Animation] from the [member master_player] to the "
"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
msgstr ""
+"[member master_player] ã‹ã‚‰ã®æ–°ã—ã„ [Animation] を〠[AnimationTreePlayer] ã®"
+"アニメーションノード㫠[code]id[/code] ã¨ã„ã†åå‰ã§ãƒã‚¤ãƒ³ãƒ‰ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7637,6 +7767,9 @@ msgid ""
"Binds the [Animation] named [code]source[/code] from [member master_player] "
"to the animation node [code]id[/code]. Recalculates caches."
msgstr ""
+"[member master_player] ã® [code]source[/code] ã¨ã„ã†åå‰ã® [Animation] をアニ"
+"メーションノード [code]id[/code] ã«ãƒã‚¤ãƒ³ãƒ‰ã—ã¾ã™ã€‚ãã—ã¦ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’å†è¨ˆç®—"
+"ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7660,6 +7793,10 @@ msgid ""
"At 0, output is input A. Towards 1, the influence of A gets lessened, the "
"influence of B gets raised. At 1, output is input B."
msgstr ""
+"åå‰ã¨å€¤ã‚’指定ã—ã¦ã€ãƒ–レンド2 ノードã®ãƒ–レンドé‡ã‚’設定ã—ã¾ã™ã€‚\n"
+"ブレンド2 ノードã¯ã€2ã¤ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³(Aã¨B)ã‚’0~1ã®ç¯„囲ã§ãƒ–レンドã—ã¾ã™ã€‚\n"
+"0ã§ã¯ã€å‡ºåŠ›ã¯å…¥åŠ›Aã§ã™ã€‚1ã«è¿‘ã¥ãã¨Aã®å½±éŸ¿ãŒå°ã•ããªã‚Šã€Bã®å½±éŸ¿ãŒå¤§ãããªã‚Šã¾"
+"ã™ã€‚1ã§ã¯ã€å‡ºåŠ›ãŒå…¥åŠ›Bã§ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7683,6 +7820,12 @@ msgid ""
"input A. From 0 to 1, the influence of A gets lessened, the influence of B+ "
"gets raised and the influence of B+ is 0. At 1, output is input B+."
msgstr ""
+"åå‰ã¨å€¤ã‚’指定ã—ã¦ã€ãƒ–レンド3 ノードã®ãƒ–レンドé‡ã‚’設定ã—ã¾ã™ã€‚\n"
+"ブレンド3 ノードã¯ã€3ã¤ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³(Aã€B-ã€B+)ã‚’-1ã‹ã‚‰1ã®é–“ã®é‡ã§ãƒ–レンド"
+"ã—ã¾ã™ã€‚\n"
+"-1ã§ã¯å‡ºåŠ›ãŒå…¥åŠ›B-ã§ã™ã€‚-1ã‹ã‚‰0ã§ã¯B-ã®å½±éŸ¿ãŒå°ã•ããªã‚Šã€Aã®å½±éŸ¿ãŒå¤§ãããª"
+"りã€B+ã®å½±éŸ¿ã¯0ã§ã™ã€‚0ã§ã¯å‡ºåŠ›ãŒå…¥åŠ›Aã§ã™ã€‚0ã‹ã‚‰1ã§ã¯Aã®å½±éŸ¿ãŒå°ã•ããªã‚Šã€"
+"B+ã®å½±éŸ¿ãŒå¤§ãããªã‚Šã€B+ã®å½±éŸ¿ãŒ0ã«ãªã‚Šã¾ã™ã€‚1ã§ã¯å‡ºåŠ›ãŒå…¥åŠ›B+ã§ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7695,6 +7838,9 @@ msgid ""
"A Blend4 Node blends two pairs of animations.\n"
"The two pairs are blended like Blend2 and then added together."
msgstr ""
+"åå‰ã¨å€¤ã‚’指定ã—ã¦ã€ãƒ–レンド4 ノードã®ãƒ–レンドé‡ã‚’設定ã—ã¾ã™ã€‚\n"
+"ブレンド4 ノードã¯ã€2組ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ブレンドã—ã¾ã™ã€‚\n"
+"2ã¤ã®ãƒšã‚¢ã¯ãƒ–レンド2ã®ã‚ˆã†ã«ãƒ–レンドã•れã¦ã‹ã‚‰ã€ä¸€ç·’ã«è¿½åŠ ã•れã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7711,7 +7857,7 @@ msgstr "指定ã•れãŸå…¥åŠ›ã«æŽ¥ç¶šã•れã¦ã„るノードを切断ã—ã¾ã™
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns a [PoolStringArray] containing the name of all nodes."
-msgstr ""
+msgstr "ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ã®åå‰ã‚’å«ã‚€ [PoolStringArray] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7723,10 +7869,12 @@ msgid ""
"Sets the mix amount of a Mix node given its name and value.\n"
"A Mix node adds input b to input a by the amount given by ratio."
msgstr ""
+"åå‰ã¨å€¤ã‚’指定ã—ã¦ã€ãƒŸãƒƒã‚¯ã‚¹ ノードã®ãƒŸãƒƒã‚¯ã‚¹é‡ã‚’設定ã—ã¾ã™ã€‚\n"
+"Mixノードã¯ã€æ¯”率ã«ã‚ˆã£ã¦ä¸Žãˆã‚‰ã‚Œã‚‹é‡ã ã‘入力bを入力aã«åŠ ç®—ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Check if a node exists (by name)."
-msgstr ""
+msgstr "(åå‰ã‹ã‚‰)ノードãŒå­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7746,7 +7894,7 @@ msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚
#: doc/classes/AnimationTreePlayer.xml
msgid "Gets the node type, will return from [enum NodeType] enum."
-msgstr ""
+msgstr "ノードã®ç¨®é¡žã‚’å–å¾—ã—ã€åˆ—挙型 [enum NodeType] ã‹ã‚‰è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7792,6 +7940,8 @@ msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚
msgid ""
"Sets the autorestart property of a OneShot node given its name and value."
msgstr ""
+"与ãˆã‚‰ã‚ŒãŸåå‰ã¨å€¤ã§ã€ãƒ¯ãƒ³ã‚·ãƒ§ãƒƒãƒˆ ノードã®è‡ªå‹•リスタートプロパティを設定ã—ã¾"
+"ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7809,11 +7959,15 @@ msgstr ""
msgid ""
"Sets the fade in time of a OneShot node given its name and value in seconds."
msgstr ""
+"ワンショット ノードã®ãƒ•ェードイン時間を設定ã—ã¾ã™ã€‚åå‰ã¨å€¤ã¯ç§’å˜ä½ã§æŒ‡å®šã—ã¾"
+"ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the fade out time of a OneShot node given its name and value in seconds."
msgstr ""
+"ワンショット ノードã®åå‰ã¨å€¤ã‚’指定ã—ã¦ã€ãƒ•ェードアウト時間を秒å˜ä½ã§è¨­å®šã—ã¾"
+"ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7846,7 +8000,7 @@ msgstr "キーå [code]name[/code] ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã€
#: doc/classes/AnimationTreePlayer.xml
msgid "Resets this [AnimationTreePlayer]."
-msgstr ""
+msgstr "ã“ã® [AnimationTreePlayer] をリセットã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7863,6 +8017,12 @@ msgid ""
"If applied after a blend or mix, affects all input animations to that blend "
"or mix."
msgstr ""
+"[code]id[/code] ã¨ã„ã†åå‰ã®ã‚¿ã‚¤ãƒ ã‚¹ã‚±ãƒ¼ãƒ« ãƒŽãƒ¼ãƒ‰ã®æ™‚間スケールを "
+"[code]scale[/code] ã«è¨­å®šã—ã¾ã™ã€‚\n"
+"タイムスケール ノードã¯ã€ã‚¹ã‚±ãƒ¼ãƒ«ãŒ1より大ãã„å ´åˆã« [Animation] ã®é€Ÿåº¦ã‚’上ã’"
+"ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã€1よりå°ã•ã„å ´åˆã«ãã®é€Ÿåº¦ã‚’下ã’ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚\n"
+"ブレンドã¾ãŸã¯ãƒŸãƒƒã‚¯ã‚¹ã®å¾Œã«é©ç”¨ã™ã‚‹ã¨ã€ãã®ãƒ–レンドã¾ãŸã¯ãƒŸãƒƒã‚¯ã‚¹ã¸ã®ã™ã¹ã¦"
+"ã®å…¥åŠ›ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã«å½±éŸ¿ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7871,6 +8031,10 @@ msgid ""
"This functions as a seek in the [Animation] or the blend or mix of "
"[Animation]s input in it."
msgstr ""
+"[code]id[/code] ã¨ã„ã†åå‰ã®ã‚¿ã‚¤ãƒ ã‚·ãƒ¼ã‚¯ ノードã®ã‚¿ã‚¤ãƒ ã‚·ãƒ¼ã‚¯å€¤ã‚’ "
+"[code]seconds[/code] ã«è¨­å®šã—ã¾ã™ã€‚\n"
+"ã“れã¯ã€ [Animation] ã«ãŠã‘るシークã€ã¾ãŸã¯ [Animation] ã®ãƒ–レンドã¾ãŸã¯ãƒŸãƒƒ"
+"クスã®å…¥åŠ›ã¨ã—ã¦æ©Ÿèƒ½ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7892,6 +8056,8 @@ msgid ""
"Returns the number of inputs for the transition node with name [code]id[/"
"code]. You can add inputs by right-clicking on the transition node."
msgstr ""
+"[code]id[/code] ã¨ã„ã†åå‰ã®ãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ ノードã«å¯¾ã™ã‚‹å…¥åŠ›ã®æ•°ã‚’戻ã—ã¾ã™ã€‚"
+"トランジション ノードをå³ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã“ã¨ã§å…¥åŠ›ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7906,6 +8072,9 @@ msgid ""
"transition node with name [code]id[/code] is set to automatically advance to "
"the next input upon completion."
msgstr ""
+"[code]id[/code] ã¨ã„ã†åå‰ã®ãƒˆãƒ©ãƒ³ã‚¸ã‚·ãƒ§ãƒ³ ノード㮠[code]input_idx[/code] ã§"
+"ã®å…¥åŠ›ãŒã€å®Œäº†æ™‚ã«è‡ªå‹•çš„ã«æ¬¡ã®å…¥åŠ›ã«é€²ã‚€ã‚ˆã†ã«è¨­å®šã•れã¦ã„ã‚‹å ´åˆã¯ã€ "
+"[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7950,6 +8119,9 @@ msgid ""
"It accesses the bones, so it should point to the same node the "
"[AnimationPlayer] would point its Root Node at."
msgstr ""
+"ä»–ã®ãƒŽãƒ¼ãƒ‰ã«ç›¸å¯¾çš„ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã§ã™ã€‚\n"
+"ã“れã¯ãƒœãƒ¼ãƒ³ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã®ã§ã€ [AnimationPlayer] ãŒæŒ‡ã™ã‚‚ã®ã¨åŒã˜ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼"
+"ドを指ã™ã‚ˆã†ã«ã™ã‚‹ã¹ãã§ã™ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7965,7 +8137,7 @@ msgstr "アニメーションを更新ã™ã‚‹ãƒ—ロセス通知。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Output node."
-msgstr ""
+msgstr "Output ノード。"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -7974,31 +8146,31 @@ msgstr "押ã—出ã—モード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "OneShot node."
-msgstr ""
+msgstr "ワンショット ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Mix node."
-msgstr ""
+msgstr "ミックス ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend2 node."
-msgstr ""
+msgstr "ブレンド2 ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend3 node."
-msgstr ""
+msgstr "ブレンド3 ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend4 node."
-msgstr ""
+msgstr "ブレンド4 ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "TimeScale node."
-msgstr ""
+msgstr "タイムスケール ノード。"
#: doc/classes/AnimationTreePlayer.xml
msgid "TimeSeek node."
-msgstr ""
+msgstr "タイムシーク ノード。"
#: doc/classes/AnimationTreePlayer.xml
#, fuzzy
@@ -8023,9 +8195,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
#, fuzzy
@@ -8214,6 +8385,9 @@ msgid ""
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
+"別ã®AreaãŒã“ã®Areaã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ "
+"[code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area。"
#: doc/classes/Area.xml
msgid ""
@@ -8221,6 +8395,9 @@ msgid ""
"be set to [code]true[/code].\n"
"[code]area[/code] the other Area."
msgstr ""
+"別ã®AreaãŒã“ã®Areaを出るã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ "
+"[code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area。"
#: doc/classes/Area.xml
msgid ""
@@ -8236,6 +8413,17 @@ msgid ""
"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"ä»–ã®Areaã® [Shape] ã®ä¸€ã¤ãŒã“ã®Areaã® [Shape] ã®ä¸€ã¤ã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾"
+"ã™ã€‚ [member monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area_rid[/code] [PhysicsServer] ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Areaã® [CollisionObject] "
+"㮠[RID] 。\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area。\n"
+"[code]area_shape_index[/code] [PhysicsServer] ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Areaã® [Shape] ã®"
+"インデックス。 [code]area.shape_owner_get_owner(area_shape_index)[/code] 㧠"
+"[CollisionShape] ノードをå–å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [PhysicsServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Areaã® [Shape] "
+"ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self.shape_owner_get_owner(local_shape_index)[/code] "
+"ã§ [CollisionShape] ノードをå–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Area.xml
msgid ""
@@ -8245,6 +8433,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
+"[PhysicsBody] ã¾ãŸã¯ [GridMap] ãŒã“ã®Areaã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member "
+"monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ [MeshLibrary] ã«"
+"コリジョン [Shape] ãŒã‚ã‚‹å ´åˆã¯ [GridMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body[/code] [Node] ã€ãŸã ã—ä»–ã® [PhysicsBody] åˆã¯ [GridMap] ã®ãƒ„リーã«"
+"存在ã™ã‚‹å ´åˆã€‚"
#: doc/classes/Area.xml
msgid ""
@@ -8254,6 +8447,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
+"[PhysicsBody] ã¾ãŸã¯ [GridMap] ãŒã“ã®Areaを出るã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member "
+"monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ [MeshLibrary] ã«"
+"コリジョン [Shape] ãŒã‚ã‚‹å ´åˆã¯ [GridMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body[/code] [Node] ã€ãŸã ã—ä»–ã® [PhysicsBody] åˆã¯ [GridMap] ã®ãƒ„リーã«"
+"存在ã™ã‚‹å ´åˆã€‚"
#: doc/classes/Area.xml
msgid ""
@@ -8271,6 +8469,21 @@ msgid ""
"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"[PhysicsBody] ã¾ãŸã¯ [GridMap] ã® [Shape] ã®1ã¤ãŒã“ã®Areaã® [Shape] ã®1ã¤ã«å…¥"
+"ã‚‹ã¨ãã«æ”¾å‡ºã•れã¾ã™ã€‚ [member monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…"
+"è¦ãŒã‚りã¾ã™ã€‚ [MeshLibrary] ã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ [Shape] ãŒã‚ã‚‹å ´åˆã€ [GridMap] ãŒæ¤œ"
+"出ã•れã¾ã™ã€‚\n"
+"[code]body_rid[/code] [PhysicsBody] ã® [RID] ã¾ãŸã¯ [PhysicsServer] ãŒä½¿ç”¨ã™"
+"る [MeshLibrary] 㮠[CollisionObject] 。\n"
+"[Node] [code]body[/code] ã€ãŸã ã— [PhysicsBody] åˆã¯ [GridMap] ã®ãƒ„リーã«å­˜åœ¨"
+"ã™ã‚‹å ´åˆã®ã¿ã€‚\n"
+"[code]body_shape_index[/code] [PhysicsServer] ãŒä½¿ç”¨ã™ã‚‹ [PhysicsBody] ã¾ãŸ"
+"㯠[GridMap] ã® [Shape] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]body."
+"shape_owner_get_owner(body_shape_index)[/code] ã® [CollisionShape] ノードをå–"
+"å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [PhysicsServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Areaã® [Shape] "
+"ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self.shape_owner_get_owner(local_shape_index)[/code] "
+"ã§ [CollisionShape] ノードをå–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Area.xml doc/classes/Area2D.xml
msgid "This area does not affect gravity/damping."
@@ -8325,23 +8538,19 @@ msgstr ""
"ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
#, fuzzy
@@ -8445,6 +8654,9 @@ msgid ""
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
+"別ã®Area2DãŒã“ã®Area2Dã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ "
+"[code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area2D。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8452,6 +8664,9 @@ msgid ""
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
+"別ã®Area2DãŒã“ã®Area2Dを出るã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ "
+"[code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area2D。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8467,6 +8682,19 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"別ã®Area2Dã® [Shape2D] ã®1ã¤ãŒã“ã®Area2Dã® [Shape2D] ã®1ã¤ã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•"
+"れã¾ã™ã€‚ [member monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾"
+"ã™ã€‚\n"
+"[code]area_rid[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Area2Dã® "
+"[CollisionObject2D] 㮠[RID] 。\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area2D。\n"
+"[code]area_shape_index[/code] [Physics2DServer ]ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]area.shape_owner_get_owner(area_shape_index)"
+"[/code] ã§ [CollisionShape2D] ノードをå–å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self."
+"shape_owner_get_owner(local_shape_index)[/code] 㧠[CollisionShape2D] ノード"
+"ã‚’å–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Area2D.xml
msgid ""
@@ -8482,6 +8710,18 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"別ã®Area2Dã® [Shape2D] ã®1ã¤ãŒã“ã®Area2Dã® [Shape2D] ã®1ã¤ã‚’出るã¨ãã«ç™ºä¿¡ã•"
+"れã¾ã™ã€‚ [member monitoring] ã‚’ [code]true[/code]ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚\n"
+"[code]area_rid[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Area2Dã® "
+"[CollisionObject2D] 㮠[RID] 。\n"
+"[code]area[/code] ã‚‚ã†ä¸€ã¤ã®Area2D。\n"
+"[code]area_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ä»–ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]area.shape_owner_get_owner(area_shape_index)"
+"[/code] ã§ [CollisionShape2D] ノードをå–å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self."
+"shape_owner_get_owner(local_shape_index)[/code] 㧠[CollisionShape2D] ノード"
+"ã‚’å–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Area2D.xml
msgid ""
@@ -8491,6 +8731,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
+"[PhysicsBody2D] ã¾ãŸã¯ [TileMap] ãŒã“ã®Area2Dã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ "
+"[member monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ "
+"[TileSet] ã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ [Shape2D] ãŒã‚ã‚‹å ´åˆã¯ [TileMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body[/code] [Node] ã€ãŸã ã—ä»–ã® [PhysicsBody2D] ã¾ãŸã¯ [TileMap] ã®ãƒ„"
+"リーã«å­˜åœ¨ã™ã‚‹å ´åˆã€‚"
#: doc/classes/Area2D.xml
msgid ""
@@ -8500,6 +8745,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
+"[PhysicsBody2D] ã¾ãŸã¯ [TileMap] ãŒã“ã®Area2Dを出るã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ "
+"[member monitoring] ã‚’ [code]true[/code] ã«è¨­å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ "
+"[TileSet] ã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ [Shape2D] ãŒã‚ã‚‹å ´åˆã¯ [TileMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body[/code] [Node] ã€ãŸã ã—ä»–ã® [PhysicsBody2D] ã¾ãŸã¯ [TileMap] ã®ãƒ„"
+"リーã«å­˜åœ¨ã™ã‚‹å ´åˆã€‚"
#: doc/classes/Area2D.xml
msgid ""
@@ -8519,6 +8769,22 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"[PhysicsBody2D] ã¾ãŸã¯ [TileMap] ã® [Shape2D] ã®1ã¤ãŒã“ã®Area2Dã® [Shape2D] "
+"ã®1ã¤ã«å…¥ã‚‹ã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ [code]true[/code] ã«è¨­"
+"定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ [TileSet] ã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ [Shape2D] ãŒã‚ã‚‹å ´åˆã€ "
+"[TileMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body_rid[/code] [PhysicsBody2D] ã® [RID] ã¾ãŸã¯ [Physics2DServer] ãŒä½¿"
+"用ã™ã‚‹ [TileSet] ã® [CollisionObject2D] 。\n"
+"[code]body[/code] [Node] ã€ãŸã ã— [PhysicsBody2D] ã¾ãŸã¯ [TileMap] ツリーã«å­˜"
+"在ã™ã‚‹å ´åˆã€‚\n"
+"[code]body_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ [PhysicsBody2D] ã¾"
+"ãŸã¯ [TileMap] ã® [Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]body."
+"shape_owner_get_owner(body_shape_index)[/code] 㧠[CollisionShape2D] ノードを"
+"å–å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self."
+"shape_owner_get_owner(local_shape_index)[/code] 㧠[CollisionShape2D] ノード"
+"ã‚’å–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Area2D.xml
msgid ""
@@ -8538,6 +8804,22 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"[PhysicsBody2D] ã¾ãŸã¯ [TileMap] ã® [Shape2D] ã®1ã¤ãŒã“ã®Area2Dã® [Shape2D] "
+"ã®1ã¤ã‚’出るã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚ [member monitoring] ã‚’ [code]true[/code] ã«è¨­"
+"定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ [TileSet] ã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ [Shape2D] ãŒã‚ã‚‹å ´åˆã¯ "
+"[TileMap] ãŒæ¤œå‡ºã•れã¾ã™ã€‚\n"
+"[code]body_rid[/code] [PhysicsBody2D] ã® [RID] ã¾ãŸã¯ [Physics2DServer] ãŒä½¿"
+"用ã™ã‚‹ [TileSet] ã® [CollisionObject2D] 。\n"
+"[code]body[/code] [Node] ã€ãŸã ã— [PhysicsBody2D] åˆã¯ [TileMap] ツリーã«å­˜åœ¨"
+"ã™ã‚‹å ´åˆã€‚\n"
+"[code]body_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ [PhysicsBody2D] ã¾"
+"ãŸã¯ [TileMap] ã® [Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]body."
+"shape_owner_get_owner(body_shape_index)[/code] 㧠[CollisionShape2D] ノードを"
+"å–å¾—ã—ã¾ã™ã€‚\n"
+"[code]local_shape_index[/code] [Physics2DServer] ãŒä½¿ç”¨ã™ã‚‹ã“ã®Area2Dã® "
+"[Shape2D] ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€‚ [code]self."
+"shape_owner_get_owner(local_shape_index)[/code] 㧠[CollisionShape2D] ノード"
+"ã‚’å–å¾—ã—ã¾ã™ã€‚"
#: doc/classes/Array.xml
#, fuzzy
@@ -8652,6 +8934,13 @@ msgid ""
"print(array1) # Prints [1, 2, 3, 4, 5, 6].\n"
"[/codeblock]"
msgstr ""
+"ã“ã®é…åˆ—ã®æœ«å°¾ã«åˆ¥ã®é…列を追加ã—ã¾ã™ã€‚\n"
+"[codeblock]\n"
+"var array1 = [1, 2, 3]\n"
+"var array2 = [4, 5, 6]\n"
+"array1.append_array(array2)\n"
+"print(array1) # [1ã€2ã€3ã€4ã€5ã€6] ã¨å‡ºåŠ›\n"
+"[/codeblock]"
#: doc/classes/Array.xml
msgid ""
@@ -8661,6 +8950,11 @@ msgid ""
"[/code]. If the array is empty, accessing by index will pause project "
"execution when running from the editor."
msgstr ""
+"é…åˆ—ã®æœ€å¾Œã®è¦ç´ ã‚’è¿”ã—ã¾ã™ã€‚é…列ãŒç©ºã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã‚’出力ã—〠[code]null[/"
+"code] ã‚’è¿”ã—ã¾ã™ã€‚\n"
+"[b]注:[/b] ã“ã®é–¢æ•°ã‚’呼ã³å‡ºã™ã“ã¨ã¯ã€ [code]array[-1][/code] を書ãã“ã¨ã¨åŒã˜"
+"ã§ã¯ã‚りã¾ã›ã‚“。é…列ãŒç©ºã®å ´åˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã«ã‚ˆã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã¯ã€ã‚¨ãƒ‡ã‚£ã‚¿ã‹ã‚‰å®Ÿ"
+"行ã™ã‚‹ã¨ãã«ãƒ—ロジェクトã®å®Ÿè¡Œã‚’ä¸€æ™‚åœæ­¢ã—ã¾ã™ã€‚"
#: doc/classes/Array.xml
msgid ""
@@ -8835,9 +9129,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -9108,13 +9405,6 @@ msgstr ""
"用ã—ã¦ã„ã¾ã™ã€‚"
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -9391,8 +9681,9 @@ msgid "Index array will be used."
msgstr "インデックスé…列ã¯ä½¿ç”¨ã•れる。"
#: doc/classes/ARVRAnchor.xml
+#, fuzzy
msgid "An anchor point in AR space."
-msgstr ""
+msgstr "ARスペースã«ãŠã‘るアンカーãƒã‚¤ãƒ³ãƒˆã€‚"
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9412,8 +9703,9 @@ msgid ""
msgstr ""
#: doc/classes/ARVRAnchor.xml
+#, fuzzy
msgid "Returns the name given to this anchor."
-msgstr ""
+msgstr "ã“ã®ã‚¢ãƒ³ã‚«ãƒ¼ã«ä¸Žãˆã‚‰ã‚ŒãŸåå‰ã‚’è¿”ã™ã€‚"
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9479,12 +9771,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -10792,8 +11078,8 @@ msgid ""
"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
"margin."
msgstr ""
-"領域ã®å‘¨å›²ã®ä½™ç™½ã€‚[Rect2] ã® [member Rect2.size] パラメータ (エディタã§ã¯ \"w"
-"\"㨠\"h\") ã¯ã€ä½™ç™½å†…ã«åŽã¾ã‚‹ã‚ˆã†ã«ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’リサイズã—ã¾ã™ã€‚"
+"領域ã®å‘¨å›²ã®ä½™ç™½ã€‚[Rect2] ã® [member Rect2.size] パラメータ (エディタã§ã¯ "
+"\"w\"㨠\"h\") ã¯ã€ä½™ç™½å†…ã«åŽã¾ã‚‹ã‚ˆã†ã«ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’リサイズã—ã¾ã™ã€‚"
#: doc/classes/AtlasTexture.xml
msgid "The AtlasTexture's used region."
@@ -10827,9 +11113,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -11189,10 +11474,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -11700,11 +11983,8 @@ msgstr ""
"è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -11817,7 +12097,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -11865,15 +12147,8 @@ msgstr ""
"å†ç”Ÿã‚’担当ã—ã¾ã™ã€‚"
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -11888,9 +12163,11 @@ msgstr ""
"フェクトを追加ã—ã¾ã™ã€‚"
#: doc/classes/AudioServer.xml
+#, fuzzy
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
"ç¾åœ¨ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªå…¥åŠ›ç”¨ãƒ‡ãƒã‚¤ã‚¹ã®åå‰ã§ã™ ([method capture_get_device_list] ã‚’"
"å‚ç…§)。"
@@ -11900,9 +12177,13 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr "ã‚·ã‚¹ãƒ†ãƒ ä¸Šã§æ¤œå‡ºã•れãŸã™ã¹ã¦ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªå…¥åŠ›ãƒ‡ãƒã‚¤ã‚¹ã®åå‰ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
-"ã©ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªå…¥åŠ›ãƒ‡ãƒã‚¤ã‚¹ã‚’オーディオキャプãƒãƒ£ã«ä½¿ç”¨ã™ã‚‹ã‹ã‚’設定ã—ã¾ã™ã€‚"
#: doc/classes/AudioServer.xml
msgid "Generates an [AudioBusLayout] using the available buses and effects."
@@ -12093,8 +12374,13 @@ msgstr "利用å¯èƒ½ãªã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã®æ•°ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
-msgstr "オーディオ出力用ã®ç¾åœ¨ã®ãƒ‡ãƒã‚¤ã‚¹å ([method get_device_list] ã‚’å‚ç…§)。"
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
+msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
@@ -12139,18 +12425,15 @@ msgstr ""
"ã«ã‚ˆã‚Š) ファイル形å¼ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr "オーディオ用ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚¨ãƒ•ェクト。"
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -12188,12 +12471,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -12420,9 +12703,14 @@ msgid ""
msgstr ""
"ç§’å˜ä½ã§æŒ‡å®šã•れãŸä½ç½® [code]from_position[/code] ã‹ã‚‰ã®éŸ³å£°ã‚’å†ç”Ÿã—ã¾ã™ã€‚"
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
-msgstr "ã“ã®éŸ³ã‚’å†ç”Ÿã™ã‚‹ã‚¨ãƒªã‚¢ã€‚"
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Dampens audio over distance with this as an exponent."
@@ -12468,6 +12756,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -12723,11 +13020,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -12858,12 +13155,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12922,7 +13213,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12990,9 +13281,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -13346,23 +13637,17 @@ msgstr ""
"詳細ã«ã¤ã„ã¦ã¯ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå†…ã®ã€Œè¡Œåˆ—ã¨å¤‰æ›ã€ã‚’ã”覧ãã ã•ã„。"
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -13373,15 +13658,13 @@ msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -13618,6 +13901,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
"指定ã•れãŸã‚µã‚¤ã‚ºã§ã€[code]false[/code]ã§å¡—りã¤ã¶ã•れãŸãƒ“ットマップを作æˆã—ã¾"
@@ -13658,6 +13949,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "キーå [code]name[/code] ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’削除ã—ã¾ã™ã€‚"
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr "指定ã•れãŸä½ç½®ã«ã‚るビットマップã®è¦ç´ ã‚’ã€æŒ‡å®šã•れãŸå€¤ã«è¨­å®šã—ã¾ã™ã€‚"
@@ -13970,17 +14266,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -14022,9 +14316,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -14057,6 +14350,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -14154,10 +14454,12 @@ msgid "Emitted when one of the buttons of the group is pressed."
msgstr "ボタンã®é•·æŠ¼ã—ãŒåœæ­¢ã•れãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
#: doc/classes/Camera.xml
+#, fuzzy
msgid "Camera node, displays from a point of view."
-msgstr ""
+msgstr "カメラノード。視点(point of view)ã‹ã‚‰è¡¨ç¤ºã€‚"
#: doc/classes/Camera.xml
+#, fuzzy
msgid ""
"Camera is a special node that displays what is visible from its current "
"location. Cameras register themselves in the nearest [Viewport] node (when "
@@ -14167,6 +14469,12 @@ msgid ""
"capabilities to a [Viewport], and, without one, a scene registered in that "
"[Viewport] (or higher viewports) can't be displayed."
msgstr ""
+"カメラã¯ã€ç¾åœ¨ã®ä½ç½®ã‹ã‚‰è¦‹ãˆã‚‹ã‚‚ã®ã‚’表示ã™ã‚‹ç‰¹æ®ŠãªãƒŽãƒ¼ãƒ‰ã§ã™ã€‚カメラã¯ã€æœ€ã‚‚"
+"è¿‘ã„[ビューãƒãƒ¼ãƒˆ]ノードã«è‡ªåˆ†è‡ªèº«ã‚’登録ã—ã¾ã™ã€‚1ã¤ã®ãƒ“ューãƒãƒ¼ãƒˆã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–"
+"ã«ã§ãるカメラã¯1ã¤ã ã‘ã§ã™ã€‚利用å¯èƒ½ãªãƒ“ューãƒãƒ¼ãƒˆãŒãªã„å ´åˆã€ã‚«ãƒ¡ãƒ©ã¯ã‚°ãƒ­ãƒ¼"
+"ãƒãƒ«ãƒ“ューãƒãƒ¼ãƒˆã«ç™»éŒ²ã•れã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚«ãƒ¡ãƒ©ã¯[ビューãƒãƒ¼ãƒˆ]ã«3D表示機能を"
+"æä¾›ã™ã‚‹ã ã‘ã§ã‚りã€ã‚«ãƒ¡ãƒ©ãŒãªã‘れã°ãã®[ビューãƒãƒ¼ãƒˆ](ã¾ãŸã¯ãれより上ä½ã®"
+"ビューãƒãƒ¼ãƒˆï¼‰ã«ç™»éŒ²ã•れãŸã‚·ãƒ¼ãƒ³ã¯è¡¨ç¤ºã§ããªã„ã®ã§ã™ã€‚"
#: doc/classes/Camera.xml
msgid ""
@@ -14458,15 +14766,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -14906,14 +15212,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15108,7 +15412,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -15121,7 +15427,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -15424,7 +15732,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -15474,6 +15782,19 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "[member frame] ãŒå¤‰æ›´ã•れãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -15554,20 +15875,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -16146,6 +16453,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -16234,9 +16542,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®ç‰©ç†ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã™ã€‚è¡çªå¯èƒ½ãªã‚ªãƒ–ジェクトã¯32個ã‚るレイヤーã®ã„ãš"
@@ -16251,9 +16559,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®ç‰©ç†ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã™ã€‚è¡çªå¯èƒ½ãªã‚ªãƒ–ジェクトã¯32個ã‚るレイヤーã®ã„ãš"
@@ -16271,12 +16579,12 @@ msgstr ""
"[code]true[/code]ã®å ´åˆã€ã‚ªãƒ–ジェクトã¯è·é›¢ã«é–¢ä¿‚ãªãåŒã˜ã‚µã‚¤ã‚ºã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°"
"ã•れã¾ã™ã€‚"
-#: doc/classes/CollisionObject.xml
-#, fuzzy
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
-msgstr "[code]true[/code] ã§ã‚れã°ã€[AnimationTree] ã®ãƒ—ロセスを行ã„ã¾ã™ã€‚"
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
+msgstr ""
#: doc/classes/CollisionObject.xml
msgid ""
@@ -16369,9 +16677,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®ç‰©ç†ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã™ã€‚è¡çªå¯èƒ½ãªã‚ªãƒ–ジェクトã¯32個ã‚るレイヤーã®ã„ãš"
@@ -16386,9 +16694,9 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"ã“ã®ã‚¨ãƒªã‚¢ã®ç‰©ç†ãƒ¬ã‚¤ãƒ¤ãƒ¼ã§ã™ã€‚è¡çªå¯èƒ½ãªã‚ªãƒ–ジェクトã¯32個ã‚るレイヤーã®ã„ãš"
@@ -16399,14 +16707,6 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -16526,15 +16826,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "キュービック補間。"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -16573,9 +16870,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -16620,19 +16916,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -18091,20 +18384,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Controlキー。"
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -18204,8 +18494,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -20218,12 +20508,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -20388,8 +20672,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -20496,8 +20780,23 @@ msgid "A CSG Box shape."
msgstr "CSG Box形状ã§ã™ã€‚"
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
-msgstr "ã“ã®ãƒŽãƒ¼ãƒ‰ã§ã€CSGシステムã§ä½¿ç”¨ã™ã‚‹ãƒœãƒƒã‚¯ã‚¹ã‚’作æˆã§ãã¾ã™ã€‚"
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
+msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
msgid "Depth of the box measured from the center of the box."
@@ -20529,7 +20828,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
"複雑ãªå½¢çŠ¶ã‚’é…ç½®ã™ã‚‹ãŸã‚ã«ã¯ã€CSGãƒŽãƒ¼ãƒ‰ã«æ§‹é€ ã‚’追加ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆãŒã‚りã¾"
"ã™ã€‚CSGCombiner3Dノードã§ã€ã“ã®æ§‹é€ ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ãƒŽãƒ¼ãƒ‰ã¯ã€ã"
@@ -20545,10 +20849,13 @@ msgstr "CSGシリンダー形状。"
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"ã“ã®ãƒŽãƒ¼ãƒ‰ã§ã¯ã€CSGシステムã§ä½¿ç”¨ã™ã‚‹å††æŸ±ï¼ˆã¾ãŸã¯å††éŒï¼‰ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾"
-"ã™ã€‚"
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
@@ -20594,11 +20901,14 @@ msgstr "メッシュリソースを使用ã™ã‚‹CSG Mesh形状。"
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"ã“ã®CSGノードã¯ã€é–‰ã˜ã¦ã„ã¦ã€è‡ªå·±äº¤å·®ã—ã¦ãŠã‚‰ãšã€å†…部é¢ã‚’å«ã¾ãšã€2ã¤ä»¥ä¸Šã®é¢"
-"ã«æŽ¥ç¶šã™ã‚‹ã‚¨ãƒƒã‚¸ã‚’æŒãŸãªã„メッシュリソースをCSG形状ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾"
-"ã™ã€‚"
#: modules/csg/doc_classes/CSGMesh.xml
msgid "The [Material] used in drawing the CSG shape."
@@ -20621,7 +20931,12 @@ msgstr "2Dãƒãƒªã‚´ãƒ³å½¢çŠ¶ã‚’æŠ¼ã—出ã—ã¦3Dメッシュを作æˆã—ã¾ã™ã€
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -20703,7 +21018,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -20781,7 +21102,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -20795,7 +21121,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -20902,7 +21233,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -20933,7 +21270,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -20977,13 +21320,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -21157,6 +21493,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -21870,11 +22214,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -21930,8 +22271,8 @@ msgstr "与ãˆã‚‰ã‚ŒãŸãƒŽãƒ¼ãƒ‰ã‚’å«ã‚€ã‚°ãƒ©ãƒ•ã®å ´åˆã€[code]true[/code]
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -21940,7 +22281,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -21969,13 +22314,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -22098,12 +22436,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -23134,13 +23466,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -23172,8 +23497,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -23206,8 +23531,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -23317,11 +23642,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -23591,12 +23913,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -24470,13 +24786,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -24896,13 +25205,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -25227,9 +25529,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -25549,31 +25850,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/ja/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -25633,12 +25938,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -26328,6 +26635,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -26930,11 +27241,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -26961,6 +27272,24 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "ボックスコンテナã®åŸºæœ¬ã‚¯ãƒ©ã‚¹ã€‚"
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "ç¾åœ¨å†ç”Ÿä¸­ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ãƒ†ãƒ¼ãƒˆã‚’è¿”ã—ã¾ã™ã€‚"
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -27102,20 +27431,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -27185,13 +27500,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -28244,7 +28552,7 @@ msgstr ""
"を下ã’れã°ã€ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -29275,11 +29583,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -29306,10 +29616,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -29355,6 +29663,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "インデックス [code]bus_idx[/code] ã‚’æŒã¤ãƒã‚¹ã®åå‰ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -29577,6 +29892,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -29910,21 +30233,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -30715,13 +31023,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -30867,11 +31168,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -31593,6 +31891,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -31787,7 +32089,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -32016,8 +32318,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -32048,8 +32350,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -32206,7 +32508,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -32341,15 +32648,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -32392,8 +32693,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -32424,8 +32725,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -32469,11 +32770,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -32640,17 +32938,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -32734,17 +33030,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -32755,13 +33055,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -32798,9 +33091,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -32928,13 +33225,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -33695,15 +33985,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -33751,6 +34032,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -33811,11 +34115,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -33830,9 +34131,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -33909,7 +34209,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -33919,18 +34223,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -34100,11 +34420,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -34356,11 +34673,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -34792,6 +35106,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -34999,13 +35317,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -36854,10 +37165,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -37096,22 +37403,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -37255,13 +37546,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -37510,13 +37794,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -37588,9 +37865,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -37627,6 +37903,11 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "The cell height to use for fields."
+msgstr "メソッド呼ã³å‡ºã—トラックã§ä½¿ã†ã€å‘¼ã³å‡ºã—モード。"
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -37655,9 +37936,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -37996,7 +38276,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -38564,6 +38844,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "グラフã®çµ‚端ノードを返ã—ã¾ã™ã€‚"
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "パラメータã®å¹³æ–¹æ ¹ã®é€†æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
@@ -38586,6 +38871,10 @@ msgid "Returns the map's up direction."
msgstr "ビットマップã®å¯¸æ³•ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’åœæ­¢ã—ã¾ã™ã€‚"
@@ -38626,18 +38915,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -38876,9 +39153,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -39168,16 +39448,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -39223,7 +39499,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -39238,7 +39514,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -39251,7 +39527,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -39266,17 +39542,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -39286,14 +39562,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -39303,7 +39579,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -40015,6 +40291,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -40167,11 +40455,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -40338,9 +40623,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -40376,11 +40660,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -40518,8 +40802,8 @@ msgstr "ボックスコンテナã®åŸºæœ¬ã‚¯ãƒ©ã‚¹ã€‚"
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -40553,19 +40837,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -40768,8 +41045,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -40896,7 +41173,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -41085,6 +41362,50 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual hole point position."
+msgstr "コリジョンマスクã®ãƒ“ットを個別ã«è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual polygon point position."
+msgstr "コリジョンマスクã®ãƒ“ットを個別ã«è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -41614,7 +41935,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -41879,8 +42209,8 @@ msgstr "指定ã—ãŸé·ç§»ã®çµ‚端ノードを返ã—ã¾ã™ã€‚"
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -42133,6 +42463,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "与ãˆã‚‰ã‚ŒãŸãƒŽãƒ¼ãƒ‰ã‚’å«ã‚€ã‚°ãƒ©ãƒ•ã®å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -42255,6 +42590,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -43225,14 +43567,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -43383,13 +43723,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -43509,6 +43844,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -44255,11 +44594,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -46853,9 +47189,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -47272,6 +47607,12 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+"与ãˆã‚‰ã‚ŒãŸ[code]id[/code]ã‚’æŒã¤ç‚¹ã®ä½ç½®[code]position[/code]を設定ã—ã¾ã™ã€‚"
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -48587,8 +48928,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48674,8 +49015,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -48763,9 +49104,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -50146,12 +50487,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50246,6 +50589,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -50345,7 +50699,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50766,6 +51121,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -50784,9 +51145,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -50813,14 +51173,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -50989,9 +51341,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -51440,8 +51791,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
+"è¦æ±‚ã•れãŸã‚µãƒ¼ãƒ•ェスã®ãƒ•ォーマットマスクを返ã—ã¾ã™ ([method "
+"add_surface_from_arrays]ã‚’å‚ç…§)。"
#: doc/classes/Rect2.xml
msgid ""
@@ -51468,7 +51822,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -51623,12 +51981,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -51697,7 +52049,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -52019,9 +52375,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -52241,6 +52596,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -52561,9 +52920,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -52758,9 +53120,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -53348,14 +53711,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -53953,11 +54314,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -54165,18 +54523,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -54636,10 +54982,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -54949,16 +55291,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -55288,12 +55620,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -55603,14 +55929,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -55702,17 +56025,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -55775,11 +56093,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -55920,8 +56243,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -56018,12 +56341,6 @@ msgstr ""
"ç…§ã—ã¦ãã ã•ã„。"
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr "指定ã—㟠[enum Feature] ãŒæœ‰åйãªå ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
@@ -57640,9 +57957,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -57826,14 +58143,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -58213,6 +58545,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "指定ã•れãŸé·ç§»ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "パラメータã®ã‚µã‚¤ãƒ³ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -58369,13 +58748,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -58651,7 +59023,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -58700,10 +59077,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -59068,12 +59445,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -61508,10 +61900,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -61612,12 +62000,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
-"é…列㫠[code]value[/code] ãŒå«ã¾ã‚Œã¦ã„れ㰠[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/Theme.xml
msgid ""
@@ -61907,11 +62294,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -61986,15 +62374,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -62587,7 +62972,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -63423,17 +63813,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -63550,7 +63929,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -63575,6 +63955,12 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
+#, fuzzy
+msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr "点 [code]point[/code] ã‹ã‚‰å¹³é¢ä¸Šã®ç‚¹ã¸ã®ç›´äº¤æŠ•影を返ã—ã¾ã™ã€‚"
+
+#: doc/classes/Tree.xml
msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -63624,9 +64010,9 @@ msgstr "ç¾åœ¨ç‚¹ãƒ—ールã«ã‚ã‚‹ç‚¹ã®æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -63637,8 +64023,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -63679,7 +64065,7 @@ msgstr ""
#: doc/classes/Tree.xml
#, fuzzy
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "指定ã•れãŸå…¥åŠ›ã«æŽ¥ç¶šã•れã¦ã„るノードを切断ã—ã¾ã™ã€‚"
#: doc/classes/Tree.xml
@@ -64048,11 +64434,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -64089,12 +64474,30 @@ msgstr ""
"定ã—ã¾ã™ã€‚"
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"インデックス [code]bus_idx[/code] ã®ãƒã‚¹ã®éŸ³é‡ã‚’ [code]volume_db[/code] ã«è¨­"
+"定ã—ã¾ã™ã€‚"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"インデックス [code]bus_idx[/code] ã®ãƒã‚¹ã®éŸ³é‡ã‚’ [code]volume_db[/code] ã«è¨­"
+"定ã—ã¾ã™ã€‚"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -65452,12 +65855,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -65484,8 +65881,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -66154,6 +66550,15 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "ボックスコンテナã®åŸºæœ¬ã‚¯ãƒ©ã‚¹ã€‚"
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -66365,28 +66770,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/ja/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -66414,7 +66815,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "[AudioStream] ã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -66510,7 +66913,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -67245,13 +67650,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -69060,13 +69458,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -69504,8 +69895,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69779,7 +70170,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -72125,6 +72519,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -72224,12 +72634,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -72686,13 +73090,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/ja/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -73032,16 +73429,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/ja/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -73090,8 +73480,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -74801,11 +75191,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -74829,6 +75219,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -74934,15 +75332,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -75007,6 +75405,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "[member frame] ãŒå¤‰æ›´ã•れãŸã¨ãã«ç™ºä¿¡ã•れã¾ã™ã€‚"
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
#, fuzzy
msgid "Base class for window dialogs."
diff --git a/doc/translations/ko.po b/doc/translations/ko.po
index 5e79cdef11..465371a39f 100644
--- a/doc/translations/ko.po
+++ b/doc/translations/ko.po
@@ -3514,8 +3514,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3874,22 +3874,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4229,11 +4228,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4242,9 +4239,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4323,6 +4319,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4458,10 +4458,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4890,25 +4886,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5092,6 +5069,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5101,9 +5087,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5124,9 +5109,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5772,6 +5756,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6055,6 +6043,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6521,9 +6513,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6758,23 +6749,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7161,9 +7148,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7360,13 +7350,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7666,12 +7649,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8793,9 +8770,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9090,10 +9066,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9485,11 +9459,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9582,7 +9553,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9627,15 +9600,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9650,7 +9616,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9658,7 +9625,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9819,7 +9791,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9860,18 +9837,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9909,12 +9882,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10119,8 +10092,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10164,6 +10142,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10375,11 +10362,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10486,12 +10473,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10550,7 +10531,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10617,9 +10598,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10923,23 +10904,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10950,15 +10925,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11145,6 +11118,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11179,6 +11160,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11439,17 +11424,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11491,9 +11474,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11526,6 +11508,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11926,15 +11915,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12365,14 +12352,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12567,7 +12552,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12580,7 +12567,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12874,7 +12863,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12924,6 +12913,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13004,20 +13005,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13576,6 +13563,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13660,9 +13648,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13671,9 +13659,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13683,10 +13671,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13779,9 +13768,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13790,22 +13779,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13925,15 +13906,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13972,9 +13949,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14019,19 +13995,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15518,20 +15491,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15631,8 +15600,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17615,12 +17584,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17785,8 +17748,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17875,7 +17838,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17907,7 +17885,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17917,7 +17900,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17959,7 +17947,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17983,7 +17977,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18064,7 +18063,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18139,7 +18144,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18153,7 +18163,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18254,7 +18269,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18285,7 +18306,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18329,13 +18356,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18501,6 +18521,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19214,11 +19242,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19273,8 +19298,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19283,7 +19308,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19312,13 +19341,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19441,12 +19463,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20535,13 +20551,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20573,8 +20582,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20607,8 +20616,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20718,11 +20727,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20985,12 +20991,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21861,13 +21861,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22282,13 +22275,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22610,9 +22596,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22931,31 +22916,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -23015,12 +23004,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23699,6 +23690,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24300,11 +24295,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24331,6 +24326,24 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "모든 [i]씬[/i] 오브ì íŠ¸ì˜ ìƒìœ„ í´ëž˜ìФ."
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ íƒ„ì  íŠ¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24471,20 +24484,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24554,13 +24553,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25603,7 +25595,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26601,11 +26593,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26632,10 +26626,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26682,6 +26674,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26903,6 +26901,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27234,21 +27240,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28039,13 +28030,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28196,11 +28180,8 @@ msgstr ""
"입니다. ë” í° ì´ë¯¸ì§€ëŠ” 가져오지 못할 수 있습니다."
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28918,6 +28899,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29110,7 +29095,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29339,8 +29324,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29368,8 +29353,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29526,7 +29511,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29661,15 +29651,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29712,8 +29696,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29744,8 +29728,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29789,11 +29773,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29960,17 +29941,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30054,17 +30033,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30075,13 +30058,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30118,9 +30094,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30247,13 +30227,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31008,15 +30981,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31064,6 +31028,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
#, fuzzy
msgid "A wrapper class for native JavaScript objects."
@@ -31125,11 +31112,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31144,9 +31128,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31223,7 +31206,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31233,18 +31220,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31396,11 +31399,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31649,11 +31649,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32082,6 +32079,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32279,13 +32280,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34132,10 +34126,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34367,22 +34357,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34526,13 +34500,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34780,13 +34747,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34858,9 +34818,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34897,6 +34856,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34925,9 +34888,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35250,7 +35212,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35806,6 +35768,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ 역함수 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
@@ -35827,6 +35794,10 @@ msgid "Returns the map's up direction."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
@@ -35867,18 +35838,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36117,9 +36076,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36460,16 +36422,12 @@ msgstr ""
"야 합니다). ë˜í•œ 고수준 네트워킹 튜토리얼과 관련 ë°ëª¨ë„ 한번 보시기 ë°”ëžë‹ˆë‹¤."
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36534,7 +36492,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ìž…ë ¥ ì´ë²¤íŠ¸ê°€ 있는 경우 호출ë©ë‹ˆë‹¤. ìž…ë ¥ ì´ë²¤íŠ¸ëŠ” 특정 노드가 ì´ ì´ë²¤íŠ¸ë¥¼ 처"
"리할 때까지 노드 트리 구조를 타고 전파ë©ë‹ˆë‹¤.\n"
@@ -36561,7 +36519,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ë©”ì¸ ë£¨í”„ì˜ ë¬¼ë¦¬ 프로세싱 단계ì—서 호출ë©ë‹ˆë‹¤. 물리 í”„ë¡œì„¸ì‹±ì€ í”„ë ˆìž„ ê°„ê²©ì´ "
"물리와 ë™ê¸°í™”ë˜ì–´ 있ìŒì„ ì˜ë¯¸í•©ë‹ˆë‹¤. 예를 들어 [code]delta[/code] 변수는 ì¼ì •"
@@ -36584,7 +36542,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ë©”ì¸ ë£¨í”„ì˜ ë¬¼ë¦¬ 프로세싱 단계ì—서 호출ë©ë‹ˆë‹¤. 물리 í”„ë¡œì„¸ì‹±ì€ í”„ë ˆìž„ ê°„ê²©ì´ "
"물리와 ë™ê¸°í™”ë˜ì–´ 있ìŒì„ ì˜ë¯¸í•©ë‹ˆë‹¤. 예를 들어 [code]delta[/code] 변수는 ì¼ì •"
@@ -36608,18 +36566,18 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36629,7 +36587,7 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ìž…ë ¥ ì´ë²¤íŠ¸ê°€ 있는 경우 호출ë©ë‹ˆë‹¤. ìž…ë ¥ ì´ë²¤íŠ¸ëŠ” 특정 노드가 ì´ ì´ë²¤íŠ¸ë¥¼ 처"
"리할 때까지 노드 트리 구조를 타고 전파ë©ë‹ˆë‹¤.\n"
@@ -36647,8 +36605,8 @@ msgstr ""
#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36658,7 +36616,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ìž…ë ¥ ì´ë²¤íŠ¸ê°€ 있는 경우 호출ë©ë‹ˆë‹¤. ìž…ë ¥ ì´ë²¤íŠ¸ëŠ” 특정 노드가 ì´ ì´ë²¤íŠ¸ë¥¼ 처"
"리할 때까지 노드 트리 구조를 타고 전파ë©ë‹ˆë‹¤.\n"
@@ -37378,6 +37336,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37530,11 +37500,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37701,9 +37668,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37739,11 +37705,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37881,8 +37847,8 @@ msgstr "모든 [i]씬[/i] 오브ì íŠ¸ì˜ ìƒìœ„ í´ëž˜ìФ."
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37916,19 +37882,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38131,8 +38090,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38256,7 +38215,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38445,6 +38404,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38971,7 +38972,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39235,8 +39245,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39487,6 +39497,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39597,6 +39612,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40552,14 +40574,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40710,13 +40730,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40836,6 +40851,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41581,11 +41600,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44165,9 +44181,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44577,6 +44592,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45874,8 +45894,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45961,8 +45981,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46050,9 +46070,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47433,12 +47453,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47533,6 +47555,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47632,7 +47665,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48051,6 +48085,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48069,9 +48109,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -48098,14 +48137,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48270,9 +48301,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48708,8 +48738,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ 역함수 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/Rect2.xml
msgid ""
@@ -48736,7 +48767,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48891,12 +48926,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48965,7 +48994,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49283,9 +49316,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49505,6 +49537,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49821,9 +49857,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -50018,9 +50057,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50605,14 +50645,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51210,11 +51248,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51421,18 +51456,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51888,10 +51911,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52201,16 +52220,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52538,12 +52547,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52853,16 +52856,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52944,17 +52944,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53017,11 +53012,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53162,8 +53162,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53257,12 +53257,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54609,9 +54603,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54787,14 +54781,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55168,6 +55177,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ íƒ„ì  íŠ¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55321,13 +55377,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55592,7 +55641,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55641,10 +55695,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56009,12 +56063,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58418,10 +58487,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58509,7 +58574,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58787,11 +58853,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58866,15 +58933,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59463,7 +59527,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60294,17 +60363,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60421,7 +60479,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60447,6 +60506,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60495,9 +60559,9 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60508,8 +60572,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60549,8 +60613,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ 역함수 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/Tree.xml
msgid ""
@@ -60918,11 +60983,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60956,12 +61020,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62310,12 +62388,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62342,8 +62414,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63001,6 +63072,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63224,28 +63303,24 @@ msgstr ""
"를 사용하여 그리지 않는 한 ë³´ì´ì§€ 않습니다."
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63273,7 +63348,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë°˜ëŒ€ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63365,7 +63442,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64088,13 +64167,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65852,13 +65924,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66294,8 +66359,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66569,7 +66634,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68889,6 +68957,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68988,12 +69072,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69450,13 +69528,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69796,16 +69867,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69854,8 +69918,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71562,11 +71626,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71590,6 +71654,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71695,15 +71767,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71767,6 +71839,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
#, fuzzy
msgid "Base class for window dialogs."
diff --git a/doc/translations/lv.po b/doc/translations/lv.po
index b560b54e69..a3bff3b9e9 100644
--- a/doc/translations/lv.po
+++ b/doc/translations/lv.po
@@ -3402,8 +3402,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3762,22 +3762,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4117,11 +4116,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4130,9 +4127,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4211,6 +4207,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4345,10 +4345,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4777,25 +4773,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4979,6 +4956,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4988,9 +4974,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5011,9 +4996,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5659,6 +5643,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5942,6 +5930,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6408,9 +6400,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6645,23 +6636,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7047,9 +7034,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7246,13 +7236,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7552,12 +7535,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8679,9 +8656,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8975,10 +8951,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9370,11 +9344,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9467,7 +9438,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9512,15 +9485,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9535,7 +9501,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9543,7 +9510,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9704,7 +9676,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9745,18 +9722,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9794,12 +9767,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10004,8 +9977,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10049,6 +10027,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10260,11 +10247,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10371,12 +10358,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10435,7 +10416,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10502,9 +10483,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10807,23 +10788,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10834,15 +10809,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11029,6 +11002,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11063,6 +11044,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11323,17 +11308,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11375,9 +11358,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11410,6 +11392,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11809,15 +11798,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12244,14 +12231,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12446,7 +12431,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12459,7 +12446,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12753,7 +12742,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12803,6 +12792,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12883,20 +12884,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13455,6 +13442,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13539,9 +13527,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13550,9 +13538,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13562,10 +13550,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13658,9 +13647,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13669,22 +13658,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13804,15 +13785,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13851,9 +13828,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13898,19 +13874,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15368,20 +15341,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15481,8 +15450,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17459,12 +17428,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17629,8 +17592,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17719,7 +17682,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17751,7 +17729,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17761,7 +17744,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17803,7 +17791,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17827,7 +17821,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17908,7 +17907,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17983,7 +17988,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17997,7 +18007,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18098,7 +18113,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18129,7 +18150,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18173,13 +18200,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18345,6 +18365,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19055,11 +19083,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19114,8 +19139,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19124,7 +19149,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19152,13 +19181,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19281,12 +19303,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20314,13 +20330,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20352,8 +20361,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20386,8 +20395,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20497,11 +20506,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20764,12 +20770,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21640,13 +21640,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22061,13 +22054,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22388,9 +22374,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22709,31 +22694,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22793,12 +22782,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23476,6 +23467,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24077,11 +24072,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24108,6 +24103,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24248,20 +24259,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24331,13 +24328,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25380,7 +25370,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26376,11 +26366,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26407,10 +26399,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26457,6 +26447,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26678,6 +26674,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27009,21 +27013,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27814,13 +27803,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27965,11 +27947,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28686,6 +28665,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28877,7 +28860,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29106,8 +29089,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29135,8 +29118,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29293,7 +29276,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29428,15 +29416,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29479,8 +29461,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29511,8 +29493,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29556,11 +29538,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29727,17 +29706,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29821,17 +29798,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29842,13 +29823,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29885,9 +29859,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30014,13 +29992,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30774,15 +30745,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30830,6 +30792,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30890,11 +30875,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30909,9 +30891,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -30988,7 +30969,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30998,18 +30983,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31161,11 +31162,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31414,11 +31412,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31847,6 +31842,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32043,13 +32042,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33896,10 +33888,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34130,22 +34118,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34289,13 +34261,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34537,13 +34502,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34615,9 +34573,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34654,6 +34611,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34682,9 +34643,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -34995,7 +34955,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35547,6 +35507,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35567,6 +35531,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35606,18 +35574,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35856,9 +35812,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36148,16 +36107,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36203,7 +36158,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36218,7 +36173,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36231,7 +36186,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36246,17 +36201,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36266,14 +36221,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36283,7 +36238,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36992,6 +36947,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37144,11 +37111,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37315,9 +37279,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37353,11 +37316,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37494,8 +37457,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37529,19 +37492,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37744,8 +37700,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37869,7 +37825,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38058,6 +38014,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38584,7 +38582,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38845,8 +38852,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39095,6 +39102,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39205,6 +39216,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40148,14 +40166,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40306,13 +40322,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40432,6 +40443,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41175,11 +41190,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43755,9 +43767,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44167,6 +44178,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45463,8 +45478,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45550,8 +45565,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45639,9 +45654,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47022,12 +47037,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47122,6 +47139,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47221,7 +47249,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47640,6 +47669,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47658,9 +47693,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47687,14 +47721,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47859,9 +47885,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48297,7 +48322,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48325,7 +48350,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48480,12 +48509,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48554,7 +48577,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48872,9 +48899,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49094,6 +49120,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49410,9 +49440,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49607,9 +49640,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50194,14 +50228,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50799,11 +50831,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51010,18 +51039,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51477,10 +51494,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51790,16 +51803,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52127,12 +52130,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52442,16 +52439,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52533,17 +52527,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52606,11 +52595,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52751,8 +52745,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52846,12 +52840,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54198,9 +54186,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54376,14 +54364,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54757,6 +54760,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54910,13 +54958,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55181,7 +55222,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55230,10 +55276,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55598,12 +55644,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58001,10 +58062,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58092,7 +58149,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58370,11 +58428,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58449,15 +58508,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59046,7 +59102,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59877,17 +59938,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60003,7 +60053,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60029,6 +60080,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60076,9 +60132,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60089,8 +60145,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60130,7 +60186,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60499,11 +60555,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60538,12 +60593,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61891,12 +61958,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61923,8 +61984,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62580,6 +62640,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62790,28 +62858,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62838,7 +62902,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62929,7 +62995,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63652,13 +63720,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65413,13 +65474,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65854,8 +65908,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66128,7 +66182,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68436,6 +68493,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68535,12 +68608,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68997,13 +69064,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69341,16 +69401,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69399,8 +69452,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71106,11 +71159,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71134,6 +71187,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71239,15 +71300,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71311,6 +71372,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/mr.po b/doc/translations/mr.po
index 69aaa02fc5..5f8d2afd19 100644
--- a/doc/translations/mr.po
+++ b/doc/translations/mr.po
@@ -3,12 +3,12 @@
# Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# Prachi Joshi <josprachi@yahoo.com>, 2020.
+# Prachi Joshi <josprachi@yahoo.com>, 2020, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-12-23 22:57+0000\n"
+"PO-Revision-Date: 2022-01-24 02:06+0000\n"
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
"Language-Team: Marathi <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/mr/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -33,7 +33,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Methods"
-msgstr ""
+msgstr "मेथडà¥à¤¸"
#: doc/tools/make_rst.py
msgid "Theme Properties"
@@ -45,11 +45,11 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr ""
+msgstr "गणने"
#: doc/tools/make_rst.py
msgid "Constants"
-msgstr ""
+msgstr "सà¥à¤¥à¤¿à¤°à¤¾à¤‚क (कॉनà¥à¤¸à¥à¤Ÿà¤¨à¥à¤Ÿ)"
#: doc/tools/make_rst.py
msgid "Property Descriptions"
@@ -3385,8 +3385,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3745,20 +3745,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4099,9 +4099,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4111,7 +4110,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4191,6 +4190,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4325,10 +4328,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4757,22 +4756,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4956,6 +4939,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4965,7 +4957,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4987,7 +4979,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5634,6 +5626,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5917,6 +5913,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6383,7 +6383,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6619,18 +6619,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7017,9 +7017,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7216,10 +7219,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7519,12 +7518,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8646,7 +8639,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8941,7 +8934,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9334,7 +9327,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9428,7 +9421,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9473,12 +9468,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9494,7 +9484,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9502,7 +9493,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9663,7 +9659,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9704,14 +9705,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9750,12 +9750,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9960,8 +9960,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10005,6 +10010,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10216,11 +10230,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10327,10 +10341,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10389,7 +10399,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10456,9 +10466,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10761,16 +10771,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10782,12 +10792,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10975,6 +10985,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11009,6 +11027,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11269,14 +11291,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11319,7 +11341,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11353,6 +11375,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11752,12 +11781,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12185,11 +12214,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12385,7 +12414,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12398,7 +12429,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12692,7 +12725,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12742,6 +12775,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12822,16 +12867,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13390,6 +13425,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13474,9 +13510,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13485,9 +13521,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13497,10 +13533,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13593,9 +13630,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13604,22 +13641,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13739,11 +13768,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13783,7 +13811,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13829,15 +13857,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15296,15 +15324,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15405,8 +15433,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17383,10 +17411,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17551,8 +17575,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17641,7 +17665,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17673,7 +17712,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17683,7 +17727,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17725,7 +17774,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17749,7 +17804,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17830,7 +17890,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17905,7 +17971,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17919,7 +17990,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18020,7 +18096,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18051,7 +18133,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18095,10 +18183,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18264,6 +18348,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18974,7 +19066,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19030,8 +19122,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19040,7 +19132,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19068,11 +19164,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19195,10 +19286,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20226,10 +20313,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20261,8 +20344,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20295,8 +20378,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20406,7 +20489,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20670,10 +20753,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21544,10 +21623,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21962,10 +22037,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22286,9 +22357,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22607,24 +22677,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22685,12 +22762,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23368,6 +23447,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23969,11 +24052,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24000,6 +24083,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24140,14 +24239,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24217,10 +24308,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25263,7 +25350,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26259,11 +26346,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26290,7 +26379,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26338,6 +26427,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26559,6 +26654,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26890,15 +26993,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27689,10 +27783,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27837,7 +27927,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28555,6 +28645,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28746,7 +28840,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28975,8 +29069,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29004,8 +29098,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29162,7 +29256,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29297,12 +29396,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29346,8 +29441,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29378,8 +29473,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29423,7 +29518,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29591,17 +29686,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29685,17 +29778,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29706,10 +29803,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29746,9 +29839,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29875,10 +29972,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30633,12 +30726,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30685,6 +30772,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30745,7 +30855,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30761,7 +30871,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30839,7 +30949,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30849,18 +30963,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31012,7 +31142,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31262,7 +31392,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31692,6 +31822,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31888,10 +32022,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33738,10 +33868,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33972,16 +34098,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34125,10 +34241,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34370,10 +34482,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34445,7 +34553,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34483,6 +34591,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34511,7 +34623,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34823,7 +34935,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35375,6 +35487,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35395,6 +35511,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35434,15 +35554,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35681,7 +35792,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35972,11 +36087,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36023,7 +36138,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36038,7 +36153,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36051,7 +36166,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36066,17 +36181,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36086,14 +36201,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36103,7 +36218,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36812,6 +36927,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36964,7 +37091,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37132,7 +37259,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37169,11 +37296,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37310,8 +37437,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37345,12 +37472,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37554,8 +37680,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37679,7 +37805,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37868,6 +37994,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38394,7 +38562,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38655,8 +38832,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38905,6 +39082,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39015,6 +39196,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39958,11 +40146,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40114,9 +40302,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40237,6 +40423,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40980,8 +41170,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43558,7 +43747,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43969,6 +44158,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45265,8 +45458,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45352,8 +45545,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45441,9 +45634,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46824,12 +47017,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46924,6 +47119,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47023,7 +47229,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47442,6 +47649,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47460,7 +47673,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47488,11 +47701,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47657,7 +47865,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48094,7 +48302,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48122,7 +48330,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48277,10 +48489,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48349,7 +48557,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48667,7 +48879,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48888,6 +49100,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49204,7 +49420,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49400,9 +49620,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49987,11 +50208,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50590,7 +50811,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50798,14 +51019,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51261,10 +51474,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51574,14 +51783,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51909,10 +52110,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52222,11 +52419,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52311,11 +52507,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52379,11 +52575,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52524,8 +52725,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52619,10 +52820,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53969,9 +54166,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54147,14 +54344,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54528,6 +54740,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54681,10 +54938,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54949,7 +55202,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -54998,10 +55256,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55366,12 +55624,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57769,10 +58042,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57860,7 +58129,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58138,7 +58408,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58214,11 +58488,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58808,7 +59082,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59639,14 +59918,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59762,7 +60033,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59788,6 +60060,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59835,9 +60112,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59848,8 +60125,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59889,7 +60166,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60258,11 +60535,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60297,12 +60573,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61650,10 +61938,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61680,8 +61964,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62337,6 +62620,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62547,23 +62838,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62591,7 +62882,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62682,7 +62975,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63405,10 +63700,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65163,10 +65454,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65601,8 +65888,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65875,7 +66162,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68183,6 +68473,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68282,10 +68588,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68742,10 +69044,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69083,13 +69381,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69138,8 +69432,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70845,11 +71139,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70873,6 +71167,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70978,15 +71280,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71050,6 +71352,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/nb.po b/doc/translations/nb.po
index 395ddd5a2f..4358fdbfc5 100644
--- a/doc/translations/nb.po
+++ b/doc/translations/nb.po
@@ -6,12 +6,13 @@
# slasken06 <ask.skivdal@gmail.com>, 2021.
# Daniel Skogly <daniel@klungo.no>, 2021.
# Imre Kristoffer Eilertsen <imreeil42@gmail.com>, 2022.
+# Edvard Ekrem Sæther <edvardekrem@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-10 13:19+0000\n"
-"Last-Translator: Imre Kristoffer Eilertsen <imreeil42@gmail.com>\n"
+"PO-Revision-Date: 2022-01-24 02:06+0000\n"
+"Last-Translator: Edvard Ekrem Sæther <edvardekrem@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
"engine/godot-class-reference/nb_NO/>\n"
"Language: nb\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -27,7 +28,7 @@ msgstr "Beskrivelse"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Opplæring"
+msgstr "Veiledninger"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -3396,8 +3397,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3756,20 +3757,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4110,9 +4111,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4122,7 +4122,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4202,6 +4202,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4336,10 +4340,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4768,22 +4768,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4967,6 +4951,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4976,7 +4969,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4998,7 +4991,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5645,6 +5638,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5928,6 +5925,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6394,7 +6395,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6630,18 +6631,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7028,9 +7029,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7227,10 +7231,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7530,12 +7530,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8657,7 +8651,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8952,7 +8946,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9345,7 +9339,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9439,7 +9433,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9484,12 +9480,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9505,7 +9496,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9513,7 +9505,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9674,7 +9671,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9715,14 +9717,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9761,12 +9762,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9971,8 +9972,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10016,6 +10022,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10227,11 +10242,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10338,10 +10353,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10400,7 +10411,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10467,9 +10478,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10772,16 +10783,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10793,12 +10804,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10986,6 +10997,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11020,6 +11039,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11280,14 +11303,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11330,7 +11353,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11364,6 +11387,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11763,12 +11793,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12196,11 +12226,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12396,7 +12426,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12409,7 +12441,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12703,7 +12737,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12753,6 +12787,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12833,16 +12879,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13401,6 +13437,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13485,9 +13522,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13496,9 +13533,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13508,10 +13545,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13604,9 +13642,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13615,22 +13653,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13750,11 +13780,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13794,7 +13823,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13840,15 +13869,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15307,15 +15336,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15416,8 +15445,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17394,10 +17423,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17562,8 +17587,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17652,7 +17677,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17684,7 +17724,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17694,7 +17739,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17736,7 +17786,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17760,7 +17816,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17841,7 +17902,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17916,7 +17983,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17930,7 +18002,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18031,7 +18108,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18062,7 +18145,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18106,10 +18195,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18275,6 +18360,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18985,7 +19078,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19041,8 +19134,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19051,7 +19144,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19079,11 +19176,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19206,10 +19298,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20237,10 +20325,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20272,8 +20356,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20306,8 +20390,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20417,7 +20501,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20681,10 +20765,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21555,10 +21635,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21973,10 +22049,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22297,9 +22369,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22618,24 +22689,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22696,12 +22774,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23379,6 +23459,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23980,11 +24064,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24011,6 +24095,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24151,14 +24251,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24228,10 +24320,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25274,7 +25362,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26270,11 +26358,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26301,7 +26391,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26349,6 +26439,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26570,6 +26666,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26901,15 +27005,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27700,10 +27795,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27848,7 +27939,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28566,6 +28657,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28757,7 +28852,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28986,8 +29081,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29015,8 +29110,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29173,7 +29268,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29308,12 +29408,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29357,8 +29453,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29389,8 +29485,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29434,7 +29530,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29602,17 +29698,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29696,17 +29790,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29717,10 +29815,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29757,9 +29851,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29886,10 +29984,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30644,12 +30738,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30696,6 +30784,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30756,7 +30867,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30772,7 +30883,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30850,7 +30961,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30860,18 +30975,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31023,7 +31154,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31273,7 +31404,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31703,6 +31834,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31899,10 +32034,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33749,10 +33880,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33983,16 +34110,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34136,10 +34253,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34381,10 +34494,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34456,7 +34565,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34494,6 +34603,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34522,7 +34635,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34834,7 +34947,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35386,6 +35499,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35406,6 +35523,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35445,15 +35566,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35692,7 +35804,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35983,11 +36099,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36034,7 +36150,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36049,7 +36165,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36062,7 +36178,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36077,17 +36193,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36097,14 +36213,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36114,7 +36230,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36823,6 +36939,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36975,7 +37103,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37143,7 +37271,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37180,11 +37308,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37321,8 +37449,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37356,12 +37484,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37565,8 +37692,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37690,7 +37817,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37879,6 +38006,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38405,7 +38574,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38666,8 +38844,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38916,6 +39094,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39026,6 +39208,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39969,11 +40158,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40125,9 +40314,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40248,6 +40435,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40991,8 +41182,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43569,7 +43759,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43980,6 +44170,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45276,8 +45470,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45363,8 +45557,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45452,9 +45646,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46835,12 +47029,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46935,6 +47131,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47034,7 +47241,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47453,6 +47661,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47471,7 +47685,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47499,11 +47713,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47668,7 +47877,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48105,7 +48314,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48133,7 +48342,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48288,10 +48501,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48360,7 +48569,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48678,7 +48891,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48899,6 +49112,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49215,7 +49432,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49411,9 +49632,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49998,11 +50220,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50601,7 +50823,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50809,14 +51031,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51272,10 +51486,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51585,14 +51795,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51920,10 +52122,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52233,11 +52431,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52322,11 +52519,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52390,11 +52587,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52535,8 +52737,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52630,10 +52832,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53980,9 +54178,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54158,14 +54356,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54539,6 +54752,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54692,10 +54950,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54960,7 +55214,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55009,10 +55268,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55377,12 +55636,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57780,10 +58054,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57871,7 +58141,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58149,7 +58420,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58225,11 +58500,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58819,7 +59094,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59650,14 +59930,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59773,7 +60045,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59799,6 +60072,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59846,9 +60124,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59859,8 +60137,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59900,7 +60178,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60269,11 +60547,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60308,12 +60585,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61661,10 +61950,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61691,8 +61976,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62348,6 +62632,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62558,23 +62850,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62602,7 +62894,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62693,7 +62987,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63416,10 +63712,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65174,10 +65466,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65612,8 +65900,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65886,7 +66174,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68194,6 +68485,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68293,10 +68600,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68753,10 +69056,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69094,13 +69393,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69149,8 +69444,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70856,11 +71151,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70884,6 +71179,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70989,15 +71292,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71061,6 +71364,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/ne.po b/doc/translations/ne.po
index 1d93069025..d277e5da73 100644
--- a/doc/translations/ne.po
+++ b/doc/translations/ne.po
@@ -3385,8 +3385,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3745,20 +3745,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4099,9 +4099,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4111,7 +4110,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4191,6 +4190,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4325,10 +4328,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4757,22 +4756,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4956,6 +4939,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4965,7 +4957,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4987,7 +4979,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5634,6 +5626,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5917,6 +5913,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6383,7 +6383,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6619,18 +6619,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7017,9 +7017,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7216,10 +7219,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7519,12 +7518,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8646,7 +8639,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8941,7 +8934,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9334,7 +9327,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9428,7 +9421,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9473,12 +9468,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9494,7 +9484,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9502,7 +9493,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9663,7 +9659,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9704,14 +9705,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9750,12 +9750,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9960,8 +9960,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10005,6 +10010,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10216,11 +10230,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10327,10 +10341,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10389,7 +10399,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10456,9 +10466,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10761,16 +10771,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10782,12 +10792,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10975,6 +10985,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11009,6 +11027,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11269,14 +11291,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11319,7 +11341,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11353,6 +11375,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11752,12 +11781,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12185,11 +12214,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12385,7 +12414,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12398,7 +12429,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12692,7 +12725,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12742,6 +12775,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12822,16 +12867,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13390,6 +13425,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13474,9 +13510,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13485,9 +13521,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13497,10 +13533,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13593,9 +13630,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13604,22 +13641,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13739,11 +13768,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13783,7 +13811,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13829,15 +13857,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15296,15 +15324,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15405,8 +15433,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17383,10 +17411,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17551,8 +17575,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17641,7 +17665,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17673,7 +17712,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17683,7 +17727,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17725,7 +17774,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17749,7 +17804,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17830,7 +17890,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17905,7 +17971,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17919,7 +17990,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18020,7 +18096,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18051,7 +18133,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18095,10 +18183,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18264,6 +18348,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18974,7 +19066,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19030,8 +19122,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19040,7 +19132,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19068,11 +19164,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19195,10 +19286,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20226,10 +20313,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20261,8 +20344,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20295,8 +20378,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20406,7 +20489,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20670,10 +20753,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21544,10 +21623,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21962,10 +22037,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22286,9 +22357,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22607,24 +22677,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22685,12 +22762,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23368,6 +23447,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23969,11 +24052,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24000,6 +24083,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24140,14 +24239,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24217,10 +24308,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25263,7 +25350,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26259,11 +26346,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26290,7 +26379,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26338,6 +26427,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26559,6 +26654,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26890,15 +26993,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27689,10 +27783,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27837,7 +27927,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28555,6 +28645,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28746,7 +28840,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28975,8 +29069,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29004,8 +29098,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29162,7 +29256,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29297,12 +29396,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29346,8 +29441,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29378,8 +29473,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29423,7 +29518,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29591,17 +29686,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29685,17 +29778,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29706,10 +29803,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29746,9 +29839,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29875,10 +29972,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30633,12 +30726,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30685,6 +30772,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30745,7 +30855,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30761,7 +30871,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30839,7 +30949,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30849,18 +30963,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31012,7 +31142,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31262,7 +31392,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31692,6 +31822,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31888,10 +32022,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33738,10 +33868,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33972,16 +34098,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34125,10 +34241,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34370,10 +34482,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34445,7 +34553,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34483,6 +34591,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34511,7 +34623,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34823,7 +34935,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35375,6 +35487,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35395,6 +35511,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35434,15 +35554,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35681,7 +35792,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35972,11 +36087,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36023,7 +36138,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36038,7 +36153,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36051,7 +36166,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36066,17 +36181,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36086,14 +36201,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36103,7 +36218,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36812,6 +36927,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36964,7 +37091,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37132,7 +37259,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37169,11 +37296,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37310,8 +37437,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37345,12 +37472,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37554,8 +37680,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37679,7 +37805,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37868,6 +37994,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38394,7 +38562,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38655,8 +38832,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38905,6 +39082,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39015,6 +39196,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39958,11 +40146,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40114,9 +40302,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40237,6 +40423,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40980,8 +41170,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43558,7 +43747,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43969,6 +44158,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45265,8 +45458,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45352,8 +45545,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45441,9 +45634,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46824,12 +47017,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46924,6 +47119,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47023,7 +47229,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47442,6 +47649,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47460,7 +47673,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47488,11 +47701,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47657,7 +47865,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48094,7 +48302,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48122,7 +48330,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48277,10 +48489,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48349,7 +48557,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48667,7 +48879,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48888,6 +49100,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49204,7 +49420,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49400,9 +49620,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49987,11 +50208,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50590,7 +50811,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50798,14 +51019,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51261,10 +51474,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51574,14 +51783,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51909,10 +52110,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52222,11 +52419,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52311,11 +52507,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52379,11 +52575,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52524,8 +52725,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52619,10 +52820,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53969,9 +54166,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54147,14 +54344,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54528,6 +54740,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54681,10 +54938,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54949,7 +55202,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -54998,10 +55256,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55366,12 +55624,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57769,10 +58042,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57860,7 +58129,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58138,7 +58408,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58214,11 +58488,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58808,7 +59082,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59639,14 +59918,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59762,7 +60033,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59788,6 +60060,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59835,9 +60112,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59848,8 +60125,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59889,7 +60166,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60258,11 +60535,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60297,12 +60573,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61650,10 +61938,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61680,8 +61964,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62337,6 +62620,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62547,23 +62838,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62591,7 +62882,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62682,7 +62975,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63405,10 +63700,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65163,10 +65454,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65601,8 +65888,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65875,7 +66162,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68183,6 +68473,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68282,10 +68588,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68742,10 +69044,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69083,13 +69381,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69138,8 +69432,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70845,11 +71139,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70873,6 +71167,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70978,15 +71280,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71050,6 +71352,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/nl.po b/doc/translations/nl.po
index cc577df882..d725a7872e 100644
--- a/doc/translations/nl.po
+++ b/doc/translations/nl.po
@@ -3436,8 +3436,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3796,22 +3796,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4151,11 +4150,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4164,9 +4161,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4245,6 +4241,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4379,10 +4379,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4811,25 +4807,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5013,6 +4990,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5022,9 +5008,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5045,9 +5030,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5693,6 +5677,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5976,6 +5964,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6442,9 +6434,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6679,23 +6670,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7081,9 +7068,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7280,13 +7270,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7586,12 +7569,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8713,9 +8690,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9009,10 +8985,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9404,11 +9378,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9501,7 +9472,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9546,15 +9519,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9569,7 +9535,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9577,7 +9544,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9738,7 +9710,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9779,18 +9756,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9828,12 +9801,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10038,8 +10011,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10083,6 +10061,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10294,11 +10281,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10405,12 +10392,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10469,7 +10450,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10536,9 +10517,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10841,23 +10822,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10868,15 +10843,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11063,6 +11036,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11097,6 +11078,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11357,17 +11342,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11409,9 +11392,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11444,6 +11426,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11843,15 +11832,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12278,14 +12265,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12480,7 +12465,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12493,7 +12480,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12787,7 +12776,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12837,6 +12826,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12917,20 +12918,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13489,6 +13476,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13573,9 +13561,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13584,9 +13572,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13596,10 +13584,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13692,9 +13681,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13703,22 +13692,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13838,15 +13819,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13885,9 +13862,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13932,19 +13908,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15402,20 +15375,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15515,8 +15484,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17493,12 +17462,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17663,8 +17626,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17753,7 +17716,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17785,7 +17763,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17795,7 +17778,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17837,7 +17825,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17861,7 +17855,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17942,7 +17941,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18017,7 +18022,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18031,7 +18041,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18132,7 +18147,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18163,7 +18184,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18207,13 +18234,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18379,6 +18399,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19089,11 +19117,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19148,8 +19173,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19158,7 +19183,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19186,13 +19215,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19315,12 +19337,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20348,13 +20364,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20386,8 +20395,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20420,8 +20429,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20531,11 +20540,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20798,12 +20804,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21674,13 +21674,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22095,13 +22088,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22422,9 +22408,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22743,31 +22728,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22827,12 +22816,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23510,6 +23501,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24111,11 +24106,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24142,6 +24137,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24282,20 +24293,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24365,13 +24362,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25414,7 +25404,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26410,11 +26400,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26441,10 +26433,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26491,6 +26481,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26712,6 +26708,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27043,21 +27047,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27848,13 +27837,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27999,11 +27981,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28720,6 +28699,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28911,7 +28894,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29140,8 +29123,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29169,8 +29152,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29327,7 +29310,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29462,15 +29450,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29513,8 +29495,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29545,8 +29527,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29590,11 +29572,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29761,17 +29740,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29855,17 +29832,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29876,13 +29857,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29919,9 +29893,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30048,13 +30026,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30808,15 +30779,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30864,6 +30826,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30924,11 +30909,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30943,9 +30925,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31022,7 +31003,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31032,18 +31017,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31195,11 +31196,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31448,11 +31446,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31881,6 +31876,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32077,13 +32076,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33930,10 +33922,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34164,22 +34152,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34323,13 +34295,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34571,13 +34536,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34649,9 +34607,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34688,6 +34645,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34716,9 +34677,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35029,7 +34989,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35581,6 +35541,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35601,6 +35565,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35640,18 +35608,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35890,9 +35846,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36182,16 +36141,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36237,7 +36192,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36252,7 +36207,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36265,7 +36220,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36280,17 +36235,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36300,14 +36255,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36317,7 +36272,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37026,6 +36981,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37178,11 +37145,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37349,9 +37313,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37387,11 +37350,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37528,8 +37491,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37563,19 +37526,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37778,8 +37734,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37903,7 +37859,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38092,6 +38048,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38618,7 +38616,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38879,8 +38886,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39129,6 +39136,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39239,6 +39250,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40182,14 +40200,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40340,13 +40356,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40466,6 +40477,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41209,11 +41224,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43789,9 +43801,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44201,6 +44212,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45497,8 +45512,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45584,8 +45599,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45673,9 +45688,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47056,12 +47071,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47156,6 +47173,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47255,7 +47283,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47674,6 +47703,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47692,9 +47727,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47721,14 +47755,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47893,9 +47919,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48331,7 +48356,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48359,7 +48384,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48514,12 +48543,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48588,7 +48611,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48906,9 +48933,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49128,6 +49154,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49445,9 +49475,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49642,9 +49675,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50229,14 +50263,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50834,11 +50866,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51045,18 +51074,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51512,10 +51529,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51825,16 +51838,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52162,12 +52165,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52477,16 +52474,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52568,17 +52562,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52641,11 +52630,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52786,8 +52780,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52881,12 +52875,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54233,9 +54221,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54411,14 +54399,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54792,6 +54795,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54945,13 +54993,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55216,7 +55257,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55265,10 +55311,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55633,12 +55679,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58036,10 +58097,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58127,7 +58184,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58405,11 +58463,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58484,15 +58543,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59081,7 +59137,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59912,17 +59973,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60038,7 +60088,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60064,6 +60115,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60111,9 +60167,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60124,8 +60180,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60165,7 +60221,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60534,11 +60590,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60573,12 +60628,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61926,12 +61993,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61958,8 +62019,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62615,6 +62675,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62825,28 +62893,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62873,7 +62937,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62964,7 +63030,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63687,13 +63755,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65448,13 +65509,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65889,8 +65943,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66163,7 +66217,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68471,6 +68528,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68570,12 +68643,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69032,13 +69099,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69376,16 +69436,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69434,8 +69487,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71141,11 +71194,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71169,6 +71222,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71274,15 +71335,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71346,6 +71407,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/pl.po b/doc/translations/pl.po
index 34ad88e7af..ef534544e1 100644
--- a/doc/translations/pl.po
+++ b/doc/translations/pl.po
@@ -18,12 +18,13 @@
# CXVMNER <cxvmner@gmail.com>, 2021.
# Tomasz Piechocki <t.piechocki@yahoo.com>, 2021.
# DeiranZ <jwabik322@gmail.com>, 2022.
+# Piotr <promantix@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-07 12:18+0000\n"
-"Last-Translator: DeiranZ <jwabik322@gmail.com>\n"
+"PO-Revision-Date: 2022-01-19 22:07+0000\n"
+"Last-Translator: Piotr <promantix@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/pl/>\n"
"Language: pl\n"
@@ -32,7 +33,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -81,11 +82,11 @@ msgstr "Opisy właściwości"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "Dziedziczy:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "Dziedziczone przez:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
@@ -101,7 +102,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "wartość"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -110,13 +111,15 @@ msgstr ""
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
-msgstr ""
+msgstr "Ta metoda powinna zostać przesłonięta, by mieć widoczny efekt."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Ta metoda nie ma żadnych efektów ubocznych i nie modyfikuje zmiennych "
+"obiektu."
#: doc/tools/make_rst.py
msgid ""
@@ -132,6 +135,8 @@ msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Ta metoda nie może zostać wywołana poprzez obiekt. Dostęp do niej można "
+"zyskać bezpośrednio używając nazwę klasy."
#: doc/tools/make_rst.py
msgid ""
@@ -3853,8 +3858,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4213,22 +4218,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4568,11 +4572,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4581,9 +4583,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4662,6 +4663,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4797,10 +4802,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5229,25 +5230,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5431,6 +5413,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Węzeł Kinematic body 2D."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5440,9 +5432,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5463,9 +5454,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -6111,6 +6101,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Węzeł Kinematic body 2D."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6394,6 +6389,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6867,9 +6866,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -7104,23 +7102,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7506,9 +7500,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7705,13 +7702,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8011,12 +8001,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9138,9 +9122,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9435,10 +9418,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9830,11 +9811,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9927,7 +9905,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9972,15 +9952,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9995,7 +9968,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10003,7 +9977,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10164,7 +10143,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10205,18 +10189,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -10254,12 +10234,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10464,8 +10444,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10509,6 +10494,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10720,11 +10714,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10831,12 +10825,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10895,7 +10883,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10962,9 +10950,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11268,23 +11256,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -11295,15 +11277,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11490,6 +11470,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11524,6 +11512,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11784,17 +11777,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11836,9 +11827,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11871,6 +11861,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12271,15 +12268,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12717,14 +12712,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12919,7 +12912,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12932,7 +12927,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13226,7 +13223,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -13276,6 +13273,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13356,20 +13365,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13928,6 +13923,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -14013,9 +14009,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14024,9 +14020,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14036,10 +14032,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14132,9 +14129,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14143,22 +14140,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14278,15 +14267,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14325,9 +14310,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14372,19 +14356,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15845,20 +15826,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Klawisz Control."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15958,8 +15936,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17942,12 +17920,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18112,8 +18084,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18202,7 +18174,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18234,7 +18221,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18244,7 +18236,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18286,7 +18283,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18310,7 +18313,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18391,7 +18399,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18466,7 +18480,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18480,7 +18499,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18581,7 +18605,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18612,7 +18642,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18656,13 +18692,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18828,6 +18857,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19541,11 +19578,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19603,8 +19637,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19613,7 +19647,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19642,13 +19680,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19771,12 +19802,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20804,13 +20829,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20842,8 +20860,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20876,8 +20894,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20987,11 +21005,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21254,12 +21269,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22133,13 +22142,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22554,13 +22556,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22882,9 +22877,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23203,31 +23197,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -23287,12 +23285,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23971,6 +23971,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24572,11 +24576,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24603,6 +24607,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Zwraca obecną długość spring arm."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24743,20 +24764,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24826,13 +24833,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25875,7 +25875,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26885,11 +26885,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26916,10 +26918,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26965,6 +26965,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27187,6 +27194,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27518,21 +27533,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28323,13 +28323,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28474,11 +28467,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29197,6 +29187,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29389,7 +29383,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29618,8 +29612,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29647,8 +29641,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29805,7 +29799,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29940,15 +29939,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29991,8 +29984,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30023,8 +30016,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30068,11 +30061,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30239,17 +30229,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30333,17 +30321,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30354,13 +30346,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30397,9 +30382,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30526,13 +30515,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31290,15 +31272,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31346,6 +31319,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31406,11 +31402,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31425,9 +31418,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31504,7 +31496,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31514,18 +31510,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31677,11 +31689,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31937,10 +31946,8 @@ msgstr ""
#: doc/classes/KinematicBody2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
+msgstr "Węzeł Kinematic body 2D."
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32370,6 +32377,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32567,13 +32578,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34420,10 +34424,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34655,22 +34655,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34814,13 +34798,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35069,13 +35046,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35147,9 +35117,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -35186,6 +35155,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35214,9 +35187,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35551,7 +35523,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36111,6 +36083,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Zwraca arcus sinus parametru."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Zwraca odwrotność pierwiastka kwadratowego z parametru."
@@ -36132,6 +36109,10 @@ msgid "Returns the map's up direction."
msgstr "Zwraca arcus sinus parametru."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Zwraca sinus parametru."
@@ -36172,18 +36153,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36422,9 +36391,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36714,16 +36686,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36769,7 +36737,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36784,7 +36752,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36797,7 +36765,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36812,17 +36780,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36832,14 +36800,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36849,7 +36817,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37558,6 +37526,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37710,11 +37690,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37881,9 +37858,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37919,11 +37895,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38060,8 +38036,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38095,19 +38071,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38310,8 +38279,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38435,7 +38404,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38624,6 +38593,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39153,7 +39164,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39417,8 +39437,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39669,6 +39689,13 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
+"wyłączone."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39785,6 +39812,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40749,14 +40783,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40907,13 +40939,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -41033,6 +41060,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41778,11 +41809,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44364,9 +44392,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44776,6 +44803,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46073,8 +46105,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46160,8 +46192,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46249,9 +46281,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47632,12 +47664,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47732,6 +47766,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47831,7 +47876,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48250,6 +48296,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48268,9 +48320,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -48297,14 +48348,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48474,9 +48517,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48915,8 +48957,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Zwraca odwrotność pierwiastka kwadratowego z parametru."
#: doc/classes/Rect2.xml
msgid ""
@@ -48943,7 +48986,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49098,12 +49145,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49172,7 +49213,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49490,9 +49535,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49712,6 +49756,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50028,9 +50076,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -50225,9 +50276,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50812,14 +50864,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51417,11 +51467,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51628,18 +51675,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52098,10 +52133,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52411,16 +52442,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52749,12 +52770,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53064,14 +53079,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -53155,17 +53167,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53228,11 +53235,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53373,8 +53385,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53468,12 +53480,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54823,9 +54829,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -55001,14 +55007,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55382,6 +55403,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Zwraca tangens parametru."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Zwraca sinus parametru."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55535,13 +55603,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55806,7 +55867,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55855,10 +55921,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56223,12 +56289,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58638,10 +58719,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58730,7 +58807,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -59011,11 +59089,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -59090,15 +59169,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59687,7 +59763,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60518,17 +60599,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60645,7 +60715,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60671,6 +60742,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60719,9 +60795,9 @@ msgstr "Zwraca cosinus parametru."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60732,8 +60808,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60773,8 +60849,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Zwraca odwrotność pierwiastka kwadratowego z parametru."
#: doc/classes/Tree.xml
msgid ""
@@ -61142,11 +61219,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61180,12 +61256,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]b[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]b[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62534,12 +62624,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62566,8 +62650,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63226,6 +63309,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63437,28 +63528,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63486,7 +63573,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Zwraca przeciwieństwo parametru."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63581,7 +63670,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64307,13 +64398,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66073,13 +66157,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66515,8 +66592,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66790,7 +66867,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69120,6 +69200,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69219,12 +69315,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69681,13 +69771,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -70027,16 +70110,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70085,8 +70161,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71793,11 +71869,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71821,6 +71897,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71926,15 +72010,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71998,6 +72082,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/pt.po b/doc/translations/pt.po
index 4452a8e461..b81b137493 100644
--- a/doc/translations/pt.po
+++ b/doc/translations/pt.po
@@ -4150,8 +4150,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4510,20 +4510,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
-msgstr ""
+#, fuzzy
+msgid "Vector math"
+msgstr "Vetor utilizado para matemática 2D."
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4866,9 +4867,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4878,7 +4878,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4960,6 +4960,10 @@ msgstr ""
"configurado no editor através do painel SpriteFrames."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -5094,10 +5098,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "Adiciona uma trilha à Animação."
@@ -5529,22 +5529,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5728,6 +5712,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Nó de animação."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5737,7 +5731,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5759,7 +5753,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -6411,6 +6405,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Nó de animação."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6694,6 +6693,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+#, fuzzy
+msgid "Using AnimationTree"
+msgstr "Reseta este [AnimationTreePlayer]."
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7160,7 +7164,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -7396,18 +7400,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7794,9 +7798,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7993,10 +8000,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8296,12 +8299,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9423,7 +9420,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -9718,7 +9715,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -10111,7 +10108,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -10205,7 +10202,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -10250,12 +10249,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10271,7 +10265,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10279,7 +10274,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10440,7 +10440,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10481,14 +10486,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -10527,12 +10531,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10737,8 +10741,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10782,6 +10791,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10993,11 +11011,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11104,10 +11122,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11166,7 +11180,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11233,9 +11247,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11538,16 +11552,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -11559,12 +11573,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -11752,6 +11766,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11790,6 +11812,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Muda o nome da animação para [code]newname[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12050,14 +12077,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -12100,7 +12127,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -12134,6 +12161,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12533,12 +12567,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12969,11 +13003,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13169,8 +13203,10 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
-msgstr "Retorna a posição global do mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the global transform matrix of this item."
@@ -13182,7 +13218,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13489,8 +13527,9 @@ msgstr ""
"camada -1 ou abaixo)."
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr ""
+#, fuzzy
+msgid "Canvas layers"
+msgstr "Camada para desenhar no ecrã."
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -13547,6 +13586,19 @@ msgstr "O tamanho da camada."
msgid "The layer's transform."
msgstr "A transformação da camada."
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "Emitido quando [member visibility_state] muda."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13627,17 +13679,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -14196,6 +14237,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr "Retorna o [RID] do objeto."
@@ -14280,9 +14322,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14291,9 +14333,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14303,10 +14345,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14399,9 +14442,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14410,22 +14453,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14545,12 +14580,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
+#, fuzzy
+msgid "Physics introduction"
+msgstr "Interpolação cúbica."
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14589,7 +14624,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -14635,15 +14670,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -16111,15 +16146,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr ""
+#, fuzzy
+msgid "Control node gallery"
+msgstr "Tecla Control."
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -16220,8 +16256,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -18208,10 +18244,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18378,8 +18410,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18468,7 +18500,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18500,7 +18547,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18510,7 +18562,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18552,7 +18609,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18576,7 +18639,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18657,7 +18725,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18732,7 +18806,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18746,7 +18825,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18847,7 +18931,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18878,7 +18968,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18922,10 +19018,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -19091,6 +19183,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19801,7 +19901,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19857,8 +19957,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19867,7 +19967,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19895,11 +19999,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -20022,10 +20121,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -21053,10 +21148,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -21088,8 +21179,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -21122,8 +21213,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -21233,7 +21324,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -21497,10 +21588,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22373,10 +22460,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22791,10 +22874,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -23120,9 +23199,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23442,24 +23520,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -23520,12 +23605,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -24203,6 +24290,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24804,11 +24895,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24835,6 +24926,24 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "Nó base para os containers."
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Retorna o comprimento atual do braço da mola."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24975,14 +25084,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -25052,10 +25153,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -26098,7 +26195,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -27095,11 +27192,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -27126,7 +27225,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -27174,6 +27273,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27395,6 +27500,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27726,15 +27839,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28525,10 +28629,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28673,7 +28773,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -29391,6 +29491,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr "Uma [Texture] baseada numa [Image]."
@@ -29582,7 +29686,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29811,8 +29915,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29840,8 +29944,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29998,7 +30102,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -30133,12 +30242,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -30182,8 +30287,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30214,8 +30319,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30259,7 +30364,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -30427,17 +30532,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30521,17 +30624,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30542,10 +30649,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30582,9 +30685,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30715,10 +30822,6 @@ msgstr ""
"action_add_event]. Veja [method Node._input]."
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31473,12 +31576,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -31525,6 +31622,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31585,7 +31705,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -31601,7 +31721,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -31679,7 +31799,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31689,18 +31813,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31852,7 +31992,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -32102,7 +32242,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -32532,6 +32672,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32728,10 +32872,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34578,10 +34718,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34812,16 +34948,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34965,10 +35091,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35210,10 +35332,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35285,7 +35403,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -35323,6 +35441,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35351,7 +35473,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -35679,7 +35801,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36235,6 +36357,11 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Retorna o tamanho da textura."
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -36256,6 +36383,10 @@ msgid "Returns the map's up direction."
msgstr "Retorna a largura da imagem."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Para o áudio."
@@ -36296,15 +36427,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36543,7 +36665,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -36834,11 +36960,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36885,7 +37011,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36900,7 +37026,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36913,7 +37039,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36928,17 +37054,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36948,14 +37074,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36965,7 +37091,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37674,6 +37800,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr "Emitido quando o nó está preparado."
@@ -37826,7 +37964,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37994,7 +38132,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -38031,11 +38169,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38172,8 +38310,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38207,12 +38345,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -38416,8 +38553,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38541,7 +38678,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38730,6 +38867,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39256,7 +39435,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39517,8 +39705,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39767,6 +39955,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39879,6 +40072,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40822,11 +41022,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40978,9 +41178,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -41101,6 +41299,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41844,8 +42046,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -44422,7 +44623,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -44833,6 +45034,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Retorna o nome do nó em [code]idx[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46129,8 +46335,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46216,8 +46422,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46305,9 +46511,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47688,12 +47894,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47788,6 +47996,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47887,7 +48106,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48306,6 +48526,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48324,7 +48550,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -48352,11 +48578,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48521,7 +48742,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48958,7 +49179,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48986,7 +49207,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49141,10 +49366,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49213,7 +49434,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49531,7 +49756,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -49752,6 +49977,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50068,7 +50297,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50264,9 +50497,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50851,11 +51085,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -51454,7 +51688,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -51662,14 +51896,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52127,10 +52353,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
@@ -52440,14 +52662,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52776,10 +52990,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53090,11 +53300,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -53179,11 +53388,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -53247,11 +53456,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53392,8 +53606,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53487,10 +53701,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53858,10 +54068,10 @@ msgid ""
"areas are transparent. Useful for overlaying shadows onto a camera feed in "
"AR."
msgstr ""
-"Se [code]true[/code], ativa o modo de renderização \"sombra para opacidade"
-"\", em que a iluminação modifica o alfa de forma que as áreas sombreadas "
-"serão opacas e as áreas não sombreadas serão transparentes. Útil para "
-"sobrepor sombras em imagens de câmara em RA (Realidade Aumentada)."
+"Se [code]true[/code], ativa o modo de renderização \"sombra para "
+"opacidade\", em que a iluminação modifica o alfa de forma que as áreas "
+"sombreadas serão opacas e as áreas não sombreadas serão transparentes. Útil "
+"para sobrepor sombras em imagens de câmara em RA (Realidade Aumentada)."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -54855,9 +55065,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -55033,14 +55243,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55414,6 +55639,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Retorna a largura da textura."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Retorna o seno do parâmetro."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55567,10 +55839,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55835,7 +56103,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55884,10 +56157,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56252,12 +56525,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58657,10 +58945,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr "Limpa todos os valores no tema."
@@ -58749,7 +59033,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -59027,7 +59312,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -59103,11 +59392,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -59697,7 +59986,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60528,14 +60822,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60651,7 +60937,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60677,6 +60964,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60724,9 +61016,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60737,8 +61029,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60778,8 +61070,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Retorna o valor padrão da propriedade especificada."
#: doc/classes/Tree.xml
msgid ""
@@ -61149,11 +61442,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61188,11 +61480,26 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"Retorna [code]true[/code] se a guia no índice [code]tab_idx[/code] estiver "
+"oculta."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62541,10 +62848,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62571,8 +62874,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63231,6 +63533,15 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "Nó base para os containers."
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63441,23 +63752,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -63485,7 +63796,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63576,7 +63889,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64299,10 +64614,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66057,10 +66368,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66495,8 +66802,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66769,7 +67076,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69077,6 +69387,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69176,10 +69502,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69636,10 +69958,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69979,13 +70297,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70034,8 +70348,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71744,11 +72058,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71772,6 +72086,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71877,15 +72199,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71949,6 +72271,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "Emitido quando [member visibility_state] muda."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po
index 00f49e35c1..ff0825d6a7 100644
--- a/doc/translations/pt_BR.po
+++ b/doc/translations/pt_BR.po
@@ -17,14 +17,14 @@
# Carlos Bonifacio <carlosboni.sa@gmail.com>, 2021.
# Stev David <stevedavidh5@gmail.com>, 2021.
# Lucas E. <lukas.ed45@gmail.com>, 2021.
-# Júlio César <diolandajr@gmail.com>, 2021.
+# Júlio César <diolandajr@gmail.com>, 2021, 2022.
# Kett Lovahr <vagnerlunes@gmail.com>, 2021.
# Jaide Alonso Ambrosio <jaide.sp@gmail.com>, 2021.
# DeeJayLSP <djlsplays@gmail.com>, 2021.
# Douglas Leão <djlsplays@gmail.com>, 2021.
# Cauê Henrique Sousa Ferrareto <caue313@gmail.com>, 2021.
# William Weber Berrutti <wwberrutti@protonmail.ch>, 2021.
-# jak3z <jose_renato06@outlook.com>, 2021.
+# jak3z <jose_renato06@outlook.com>, 2021, 2022.
# Henrique Darko <henridark00@gmail.com>, 2021.
# Cearaj <pmoraisleal@gmail.com>, 2021.
# Fernando H. Rosa <ferhrosa@gmail.com>, 2021.
@@ -34,12 +34,15 @@
# Vinicius A. Portela <vinicius@simpx.net>, 2021, 2022.
# Felipe SiFa <felipe@logus.digital>, 2022.
# Gabriel Gian <gabrielgian@live.com>, 2022.
+# Kawan Weege <therealdragonofwar@gmail.com>, 2022.
+# Schnippss <rian.uzum1901@gmail.com>, 2022.
+# Gonçalo Pascoal <goncalojpascoal@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-07 12:18+0000\n"
-"Last-Translator: Gabriel Gian <gabrielgian@live.com>\n"
+"PO-Revision-Date: 2022-01-15 22:14+0000\n"
+"Last-Translator: jak3z <jose_renato06@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/pt_BR/>\n"
"Language: pt_BR\n"
@@ -90,25 +93,24 @@ msgid "Method Descriptions"
msgstr "Descrições do Método"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "Descrições da Propriedade"
+msgstr "Descrições da Propriedade do Tema"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "Herda de:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "Herdado por:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(substitui %s)"
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "Padrão"
#: doc/tools/make_rst.py
msgid "Setter"
@@ -116,7 +118,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "Valor"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -126,27 +128,34 @@ msgstr ""
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"Este método normalmente deve ser substituído pelo usuário para ter algum "
+"efeito."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Esse método não possui efeitos colaterais. Ele não modifica qualquer das "
+"variáveis membro da instância."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"Este método aceita qualquer número de argumentos após os descritos aqui."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "Este método é usado para construir um tipo."
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Esse método não necessita de uma instância para ser chamado, ele pode ser "
+"chamado diretamente usando o nome da classe."
#: doc/tools/make_rst.py
msgid ""
@@ -235,10 +244,10 @@ msgid ""
msgstr ""
"Retorna o arco cosseno de [code]s[/code] em radianos. Use para pegar o "
"ângulo do cosseno [code]s[/code]. [code]s[/code] deve estar entre "
-"[code]-1.0[/code] e [code]-1.0[/code] (inclusivo), caso contrário, [method "
-"acos] retornará [constant NAN].\n"
+"[code]-1.0[/code] e [code]1.0[/code] (inclusivo), se não, [method acos] "
+"retornará [constant NAN].\n"
"[codeblock]\n"
-"# c é 0.523599 ou 30 graus se convertido com rad2deg(s)\n"
+"# c é 0.523599 ou 30 graus se convertido usando rad2deg(s)\n"
"c = acos(0.866025)\n"
"[/codeblock]"
@@ -1553,6 +1562,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Returns an array with the given range. Range can be 1 argument [code]N[/"
"code] (0 to [code]N[/code] - 1), two arguments ([code]initial[/code], "
@@ -1624,7 +1634,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
"rounded away from zero.\n"
@@ -1635,11 +1644,14 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method ceil], [method stepify], and [int]."
msgstr ""
-"Arredonda [code]s[/code] para o número inteiro mais próximo, se "
-"perfeitamente centrado, arredonda para o número mais distante do zero.\n"
+"Arredonda [code]s[/code] para o número inteiro mais próximo, com os casos "
+"intermediários arredondados a partir de zero.\n"
"[codeblock]\n"
-"round(2.6) # Retorna 3\n"
-"[/codeblock]"
+"a = round(2.49) # a é 2.0\n"
+"a = round(2.5) # a é 3.0\n"
+"a = round(2.51) # a é 3.0\n"
+"[/codeblock]\n"
+"Veja também [method floor], [method ceil], [method stepify] e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1700,7 +1712,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the result of smoothly interpolating the value of [code]s[/code] "
"between [code]0[/code] and [code]1[/code], based on the where [code]s[/code] "
@@ -1732,14 +1743,22 @@ msgstr ""
"code] se [code]s >= to[/code]. Se [code]s[/code] estiver entre [code]from[/"
"code] e [code]to[/code], o valor retornado segue uma curva em formato de S "
"que mapeia [code]s[/code] entre [code]0[/code] and [code]1[/code].\n"
-"Essa curva em formato de S é o interpolador cúbico de Hermite, obtido com a "
-"função [code]f(s) = 3*s^2 - 2*s^3[/code].\n"
+"Essa curva em formato de S é o interpolador cúbico de Hermite, obtido com "
+"[code]f(y) = 3*y^2 - 2*y^3[/code] onde [code]y = (x-from) / (to-from)[/"
+"code].\n"
"[codeblock]\n"
"smoothstep(0, 2, -5.0) # Retorna 0.0\n"
"smoothstep(0, 2, 0.5) # Retorna 0.15625\n"
"smoothstep(0, 2, 1.0) # Retorna 0.5\n"
"smoothstep(0, 2, 2.0) # Retorna 1.0\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"Comparado com [method ease] com o valor da curva de [code]-1.6521[/code], "
+"[method smoothstep] retorna a curva mais suave possível sem mudanças "
+"repentinas na derivada. Se você precisa para efetuar transições mais "
+"avançadas, use [Tween] ou [AnimationPlayer].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"smoothstep_ease_comparison.png]Comparação de valores retornados entre "
+"smoothstep() e ease(x, -1.6521)[/url]"
#: modules/gdscript/doc_classes/@GDScript.xml
#, fuzzy
@@ -1757,12 +1776,11 @@ msgstr ""
"[codeblock]\n"
"sqrt(9) # Retorna 3\n"
"[/codeblock]\n"
-"[b]Nota:[/b] Valores negativos de [code]s[/code] retornam NaN. se você "
+"[b]Nota:[/b] Valores negativos de [code]s[/code] retornam NaN. Se você "
"precisar de valores de entrada negativos, use [code]System.Numerics.Complex[/"
"code] no C#."
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the position of the first non-zero digit, after the decimal point. "
"Note that the maximum return value is 10, which is a design decision in the "
@@ -1774,15 +1792,12 @@ msgid ""
"[/codeblock]"
msgstr ""
"Retorna a posição do primeiro dígito não zero, após o ponto decimal. Note "
-"que o valor máximo de retorno é 10, o que foi uma decisão feita durante a "
-"implementação.\n"
+"que o valor máximo de retorno é 10, o que foi uma decisão de design feita "
+"durante a implementação.\n"
"[codeblock]\n"
-"# n é 0\n"
-"n = step_decimals(5)\n"
-"# n é 4\n"
-"n = step_decimals(1.0005)\n"
-"# n é 9\n"
-"n = step_decimals(0.000000005)\n"
+"n = step_decimals(5) # n é 0\n"
+"n = step_decimals(1.0005) # n é 4\n"
+"n = step_decimals(0.000000005) # n é 9\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -1801,12 +1816,12 @@ msgstr ""
"próximo. Também pode ser usado para arredondar um float para um número "
"arbitrário de decimais.\n"
"[codeblock]\n"
-"stepify(100, 32) # Retorna 96\n"
+"stepify(100, 32) # Retorna 96.0\n"
"stepify(3.14159, 0.01) # Retorna 3.14\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"Veja também [method ceil], [method floor], [method round] e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Converts one or more arguments of any type to string in the best way "
"possible.\n"
@@ -1817,7 +1832,8 @@ msgid ""
"len(b) # Returns 12\n"
"[/codeblock]"
msgstr ""
-"Converte um ou mais argumentos para string da melhor forma possível.\n"
+"Converte um ou mais argumentos de qualquer tipo para string da melhor forma "
+"possível.\n"
"[codeblock]\n"
"var a = [10, 20, 30]\n"
"var b = str(a);\n"
@@ -1856,7 +1872,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the hyperbolic tangent of [code]s[/code].\n"
"[codeblock]\n"
@@ -1866,8 +1881,8 @@ msgid ""
msgstr ""
"Retorna a tangente hiperbólica de [code]s[/code].\n"
"[codeblock]\n"
-"a = log(2.0) # Retorna 0.693147\n"
-"tanh(a) # Retorna 0.6\n"
+"a = log(2.0) # a é 0.693147\n"
+"b = tanh(a) # b é 0.6\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -3653,6 +3668,11 @@ msgid ""
"- Linux: Up to 80 buttons.\n"
"- Windows and macOS: Up to 128 buttons."
msgstr ""
+"O número máximo de botões de controles suportados pelo motor. O limite real "
+"pode ser mais baixo nas plataformas específicas:\n"
+"- Android: Até 36 botões.\n"
+"- Linux: Até 80 botões.\n"
+"- Windows e macOS: Até 128 botões."
#: doc/classes/@GlobalScope.xml
msgid "DualShock circle button."
@@ -4362,8 +4382,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"Indica que uma propriedade de string é um caminho absoluto para um arquivo "
"fora da pasta do projeto. Editá-la irá exibir um diálogo de arquivo para "
@@ -4411,6 +4431,9 @@ msgid ""
"Hints that a color property should be edited without changing its alpha "
"component, i.e. only R, G and B channels are edited."
msgstr ""
+"Sugere que uma propriedade de cor deve ser editada sem mudar o seu "
+"componente alfa, ou seja, apenas os canais R (vermelho), G (verde) e B "
+"(azul) são editados."
#: doc/classes/@GlobalScope.xml
msgid "Hints that an image is compressed using lossy compression."
@@ -4422,31 +4445,32 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid "The property is serialized and saved in the scene file (default)."
-msgstr ""
+msgstr "A propriedade é serializada e salva no arquivo de cena (padrão)."
#: doc/classes/@GlobalScope.xml
msgid "The property is shown in the editor inspector (default)."
-msgstr ""
+msgstr "A propriedade é mostrada no inspetor do editor (padrão)."
#: doc/classes/@GlobalScope.xml
msgid "Deprecated usage flag, unused."
-msgstr ""
+msgstr "Sinalizador de uso depreciado, não usada."
#: doc/classes/@GlobalScope.xml
msgid "The property can be checked in the editor inspector."
msgstr "A propriedade pode ser checada no inspetor do editor."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
msgid "The property is checked in the editor inspector."
-msgstr ""
+msgstr "A propriedade é verificada no inspetor do editor."
#: doc/classes/@GlobalScope.xml
msgid "The property is a translatable string."
-msgstr ""
+msgstr "A propriedade é uma string traduzível."
#: doc/classes/@GlobalScope.xml
msgid "Used to group properties together in the editor."
-msgstr ""
+msgstr "Usado para agrupar propriedade no editor."
#: doc/classes/@GlobalScope.xml
msgid "Used to categorize properties together in the editor."
@@ -4468,27 +4492,31 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid "Default usage (storage, editor and network)."
-msgstr ""
+msgstr "Uso padrão (armazenamento, editor e rede)."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
msgid ""
"Default usage for translatable strings (storage, editor, network and "
"internationalized)."
msgstr ""
+"Uso padrão para strings traduzíveis (armazenamento, editor, rede e "
+"internacionalizados)."
#: doc/classes/@GlobalScope.xml
msgid ""
"Default usage but without showing the property in the editor (storage, "
"network)."
msgstr ""
+"Uso padrão, mas sem mostrar a propriedade no editor (armazenamento, rede)."
#: doc/classes/@GlobalScope.xml
msgid "Flag for a normal method."
-msgstr ""
+msgstr "Sinalizador para um método normal."
#: doc/classes/@GlobalScope.xml
msgid "Flag for an editor method."
-msgstr ""
+msgstr "Sinalizador para um método de editor."
#: doc/classes/@GlobalScope.xml
msgid "Deprecated method flag, unused."
@@ -4620,23 +4648,23 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid "Equality operator ([code]==[/code])."
-msgstr ""
+msgstr "Operador de igualdade ([code]==[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Inequality operator ([code]!=[/code])."
-msgstr ""
+msgstr "Operador de desigualdade ([code]!=[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Less than operator ([code]<[/code])."
-msgstr ""
+msgstr "Operador menor que ([code]<[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Less than or equal operator ([code]<=[/code])."
-msgstr ""
+msgstr "Operador menor que ou igual ([code]<=[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Greater than operator ([code]>[/code])."
-msgstr ""
+msgstr "Operador maior que ([code]>[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Greater than or equal operator ([code]>=[/code])."
@@ -4648,7 +4676,7 @@ msgstr "Operador de adição ([code]+[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Subtraction operator ([code]-[/code])."
-msgstr ""
+msgstr "Operador de subtração ([code]-[/code])."
#: doc/classes/@GlobalScope.xml
msgid "Multiplication operator ([code]*[/code])."
@@ -4720,7 +4748,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid "Represents the size of the [enum Variant.Operator] enum."
-msgstr ""
+msgstr "Representa o tamanho da enumeração [enum Variant.Operator]."
#: doc/classes/AABB.xml
msgid "Axis-Aligned Bounding Box."
@@ -4736,22 +4764,22 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
-msgstr ""
+#, fuzzy
+msgid "Vector math"
+msgstr "Vetor utilizado para matemática 2D."
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4897,14 +4925,17 @@ msgid ""
msgstr ""
#: doc/classes/AcceptDialog.xml
+#, fuzzy
msgid "Base dialog for user notification."
-msgstr ""
+msgstr "Diálogo de base para notificação do usuário."
#: doc/classes/AcceptDialog.xml
msgid ""
"This dialog is useful for small notifications to the user about an event. It "
"can only be accepted or closed, with the same result."
msgstr ""
+"Este diálogo é útil para pequenas notificações ao usuário sobre um evento. "
+"Ele só pode ser aceito ou fechado, com o mesmo resultado."
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -5093,11 +5124,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5106,7 +5135,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -5188,6 +5217,10 @@ msgstr ""
"configurado no editor através do painel SpriteFrames."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -5323,10 +5356,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "Adiciona uma trilha à Animação."
@@ -5758,25 +5787,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5960,6 +5970,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Nó de animação."
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5969,7 +5989,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5991,7 +6011,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -6643,6 +6663,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Nó de animação."
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6926,6 +6951,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+#, fuzzy
+msgid "Using AnimationTree"
+msgstr "Reseta este [AnimationTreePlayer]."
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7407,7 +7437,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -7643,20 +7673,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -8043,9 +8071,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -8242,13 +8273,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8548,12 +8572,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9675,7 +9693,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -9972,10 +9990,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -10367,11 +10383,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -10464,7 +10477,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -10509,12 +10524,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10530,7 +10540,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10538,7 +10549,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10699,7 +10715,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10740,16 +10761,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -10788,12 +10806,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10998,8 +11016,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -11043,6 +11066,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -11254,11 +11286,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11365,12 +11397,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11429,7 +11455,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11496,9 +11522,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11802,21 +11828,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -11828,12 +11849,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -12021,6 +12042,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -12059,6 +12088,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Retorna o nome do nó em [code]idx[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12319,14 +12353,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -12369,7 +12403,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -12403,6 +12437,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12803,12 +12844,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -13245,14 +13286,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -13447,8 +13486,10 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
-msgstr "Retorna a posição global do mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the global transform matrix of this item."
@@ -13460,7 +13501,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13767,8 +13810,9 @@ msgstr ""
"camada -1 ou abaixo)."
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr ""
+#, fuzzy
+msgid "Canvas layers"
+msgstr "Camada para desenhar na tela."
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -13825,6 +13869,19 @@ msgstr "O tamanho da camada."
msgid "The layer's transform."
msgstr "A transformação da camada."
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "Emitido quando [member visibility_state] muda."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13905,20 +13962,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -14477,6 +14520,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr "Retorna o [RID] do objeto."
@@ -14562,9 +14606,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14573,9 +14617,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14585,10 +14629,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14681,9 +14726,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14692,22 +14737,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14827,15 +14864,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
+msgid "Physics introduction"
+msgstr "Interpolação cúbica."
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14874,7 +14908,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -14935,15 +14969,15 @@ msgstr ""
"opaco). Caso contrário, uma cor sempre será avaliada como [code]true[/code]."
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -16429,20 +16463,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Tecla Control."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -16542,8 +16573,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -18530,12 +18561,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18702,8 +18727,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18792,7 +18817,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18824,7 +18864,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18834,7 +18879,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18876,7 +18926,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18900,7 +18956,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18981,7 +19042,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -19056,7 +19123,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -19070,7 +19142,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -19171,7 +19248,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -19202,7 +19285,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -19246,13 +19335,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -19418,6 +19500,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -20131,11 +20221,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -20191,8 +20278,8 @@ msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -20201,7 +20288,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -20230,13 +20321,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -20359,12 +20443,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -21392,13 +21470,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -21430,8 +21501,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -21464,8 +21535,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -21575,11 +21646,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21842,12 +21910,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22721,13 +22783,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -23143,13 +23198,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -23475,9 +23523,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23797,29 +23844,34 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -23880,12 +23932,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -24566,6 +24620,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -25167,11 +25225,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -25198,6 +25256,24 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "Nó base para os containers."
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Retorna o comprimento atual do braço da mola."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -25338,20 +25414,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -25421,13 +25483,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -26470,7 +26525,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -27294,22 +27349,20 @@ msgid ""
msgstr ""
#: doc/classes/GraphNode.xml
-#, fuzzy
msgid ""
"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
"code]."
msgstr ""
"Define o tipo esquerdo (entrada) do espaço [code]idx[/code] para "
-"[code]type_left[/code]"
+"[code]type_left[/code]."
#: doc/classes/GraphNode.xml
-#, fuzzy
msgid ""
"Sets the right (output) type of the slot [code]idx[/code] to "
"[code]type_right[/code]."
msgstr ""
-"Define o tipo direito (entrada) do espaço [code]idx[/code] para "
-"[code]type_right[/code]"
+"Define o tipo direita (saída) do espaço [code]idx[/code] para "
+"[code]type_right[/code]."
#: doc/classes/GraphNode.xml
msgid "If [code]true[/code], the GraphNode is a comment node."
@@ -27492,11 +27545,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -27523,10 +27578,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -27572,6 +27625,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27794,6 +27854,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -28125,21 +28193,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28930,13 +28983,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -29081,11 +29127,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29804,6 +29847,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr "Uma [Texture] baseada em uma [Image]."
@@ -29997,7 +30044,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -30226,8 +30273,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30256,8 +30303,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30414,7 +30461,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -30549,15 +30601,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -30600,8 +30646,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30632,8 +30678,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30677,11 +30723,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30848,17 +30891,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30942,17 +30983,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30963,13 +31008,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -31006,9 +31044,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -31139,13 +31181,6 @@ msgstr ""
"action_add_event]. Veja [method Node._input]."
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31903,15 +31938,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31959,6 +31985,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -32019,11 +32068,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -32038,7 +32084,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -32116,7 +32162,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -32126,18 +32176,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -32289,11 +32355,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -32542,11 +32605,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32979,6 +33039,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -33177,13 +33241,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -35031,10 +35088,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -35266,22 +35319,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -35425,13 +35462,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35680,13 +35710,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35758,7 +35781,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -35796,6 +35819,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35824,7 +35851,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -36156,7 +36183,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36720,6 +36747,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Retorna o tamanho da textura."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Retorna o inverso da raiz quadrada do parâmetro."
@@ -36741,6 +36773,10 @@ msgid "Returns the map's up direction."
msgstr "Retorna a largura da imagem."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Para o áudio."
@@ -36781,18 +36817,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -37031,7 +37055,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -37322,16 +37350,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -37377,7 +37401,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37392,7 +37416,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37405,7 +37429,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37420,17 +37444,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -37440,14 +37464,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -37457,7 +37481,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38166,6 +38190,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr "Emitido quando o nó está preparado."
@@ -38318,11 +38354,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -38489,7 +38522,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -38526,11 +38559,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38667,8 +38700,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38702,19 +38735,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38917,8 +38943,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -39042,7 +39068,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -39231,6 +39257,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39758,7 +39826,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -40022,8 +40099,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -40275,6 +40352,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -40390,6 +40472,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -41121,7 +41210,6 @@ msgstr ""
"será permitida (e pode incluir código)."
#: doc/classes/PacketPeer.xml
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [code]get_var[/code] and [code]put_var[/code] "
"parameters instead.\n"
@@ -41131,12 +41219,13 @@ msgid ""
"Do not use this option if the serialized object comes from untrusted sources "
"to avoid potential security threats such as remote code execution."
msgstr ""
-"Decodifica um array de bytes em um valor. Quando [code]allow_objects[/code] "
-"é [code]true[/code] decodificar objetos é permitido.\n"
-"[b]AVISO:[/b] Objetos desserializados podem conter código que pode ser "
-"executado. Não use esta opção se o objeto serializado vier de fontes não "
-"confiáveis para evitar potenciais ameaças à segurança (execução remota de "
-"código)."
+"[i]Depreciado.[/i] Invés disso, use os parâmetros [code]get_var[/code] e "
+"[code]put_var[/code].\n"
+"Se [code]true[/code], o PacketPeer permitirá codificação e decodificação do "
+"objeto via [method get_var] e [method put_var].\n"
+"[b]Aviso:[/b] Objetos desserializados podem conter código que é executado. "
+"Não use essa opção se o objeto serializado vier de fontes não confiáveis "
+"para evitar possíveis ameaças à segurança, como execução remota de código."
#: doc/classes/PacketPeer.xml
msgid ""
@@ -41359,11 +41448,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -41515,13 +41604,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -41641,6 +41725,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -42386,11 +42474,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/pt_BR/stable/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -42502,9 +42587,8 @@ msgid "Calls the built-in force integration code."
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
-#, fuzzy
msgid "The body's rotational velocity in [i]radians[/i] per second."
-msgstr "A rotação da camada em radianos."
+msgstr "A velocidade rotacional dos corpos em [i]radianos[/i] por segundo."
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
@@ -44974,7 +45058,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -45386,6 +45470,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Retorna o nome do nó em [code]idx[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46684,8 +46773,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46771,8 +46860,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46860,9 +46949,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -48243,12 +48332,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48343,6 +48434,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -48442,7 +48544,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48861,6 +48964,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48879,7 +48988,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -48892,7 +49001,7 @@ msgstr ""
#: doc/classes/Quat.xml
msgid "Quaternion."
-msgstr "Quatérnio."
+msgstr "Quaternião."
#: doc/classes/Quat.xml
msgid ""
@@ -48907,14 +49016,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/stable/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -49083,9 +49184,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -49524,8 +49624,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Retorna o inverso da raiz quadrada do parâmetro."
#: doc/classes/Rect2.xml
msgid ""
@@ -49552,7 +49653,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49707,12 +49812,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49781,7 +49880,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -50099,9 +50202,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -50321,6 +50423,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50637,7 +50743,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50833,9 +50943,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -51420,11 +51531,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -52023,11 +52134,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -52181,7 +52289,7 @@ msgstr ""
#: doc/classes/SceneState.xml
msgid "Returns the type of the node at [code]idx[/code]."
-msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+msgstr "Retorna o tipo do nó em [code]idx[/code]."
#: doc/classes/SceneState.xml
msgid ""
@@ -52235,18 +52343,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/pt_BR/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52705,10 +52801,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
@@ -53019,16 +53111,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -53358,13 +53440,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/animation/2d_skeletons."
-"html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53675,14 +53750,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -53767,17 +53839,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53840,11 +53907,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53985,8 +54057,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -54080,12 +54152,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54453,10 +54519,10 @@ msgid ""
"areas are transparent. Useful for overlaying shadows onto a camera feed in "
"AR."
msgstr ""
-"Se [code]true[/code], ativa o modo de renderização \"sombra para opacidade"
-"\", em que a iluminação modifica o alfa de forma que as áreas sombreadas "
-"serão opacas e as áreas não sombreadas serão transparentes. Útil para "
-"sobrepor sombras em imagens de câmera em RA (Realidade Aumentada)."
+"Se [code]true[/code], ativa o modo de renderização \"sombra para "
+"opacidade\", em que a iluminação modifica o alfa de forma que as áreas "
+"sombreadas serão opacas e as áreas não sombreadas serão transparentes. Útil "
+"para sobrepor sombras em imagens de câmera em RA (Realidade Aumentada)."
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -55453,9 +55519,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -55631,14 +55697,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -56012,6 +56093,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Retorna a tangente do parâmetro."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Retorna o seno do parâmetro."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -56165,13 +56293,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -56436,7 +56557,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -56485,10 +56611,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56853,12 +56979,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58200,8 +58341,7 @@ msgid ""
"Returns the width in pixels of the [code]wrap_index[/code] on [code]line[/"
"code]."
msgstr ""
-"Define o tipo esquerdo (entrada) do espaço [code]idx[/code] para "
-"[code]type_left[/code]"
+"Retorna a largura em píxeis de [code]wrap_index[/code] em [code]line[/code]."
#: doc/classes/TextEdit.xml
#, fuzzy
@@ -59279,10 +59419,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr "Limpa todos os valores no tema."
@@ -59331,11 +59467,11 @@ msgid "Sets the theme's values to a copy of a given theme."
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Color] at [code]name[/code] if the theme has [code]node_type[/"
"code]."
-msgstr "Retorna o nome do nó em [code]idx[/code]."
+msgstr ""
+"Retorna a [Cor] em [code]name[/code] se o tema tiver [code]node_type[/code]."
#: doc/classes/Theme.xml
msgid ""
@@ -59350,11 +59486,12 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the constant at [code]name[/code] if the theme has [code]node_type[/"
"code]."
-msgstr "Retorna o nome do nó em [code]idx[/code]."
+msgstr ""
+"Retorna a constante em [code]name[/code] se o tema tiver [code]node_type[/"
+"code]."
#: doc/classes/Theme.xml
msgid ""
@@ -59371,11 +59508,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
-msgstr "Retorna o nome do nó em [code]idx[/code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
+msgstr ""
#: doc/classes/Theme.xml
msgid ""
@@ -59654,11 +59791,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
#: doc/classes/Thread.xml
msgid ""
@@ -59733,13 +59871,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -60329,7 +60465,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -61160,17 +61301,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -61287,7 +61417,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -61313,6 +61444,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -61361,9 +61497,9 @@ msgstr "Retorna o cosseno do parâmetro."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -61374,8 +61510,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -61416,7 +61552,7 @@ msgstr ""
#: doc/classes/Tree.xml
#, fuzzy
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "Retorna o valor padrão da propriedade especificada."
#: doc/classes/Tree.xml
@@ -61787,11 +61923,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61825,12 +61960,28 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Retorna a largura em píxeis de [code]wrap_index[/code] em [code]line[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"Retorna a largura em píxeis de [code]wrap_index[/code] em [code]line[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -63080,7 +63231,7 @@ msgstr "Desconectado."
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Unknown device."
-msgstr ""
+msgstr "Dispositivo desconhecido."
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Invalid control."
@@ -63180,11 +63331,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -63211,8 +63357,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63873,6 +64018,15 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "Nó base para os containers."
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -64084,23 +64238,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -64129,7 +64283,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Retorna o valor oposto do parâmetro."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64223,7 +64379,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64950,13 +65108,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66718,13 +66869,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/pt_BR/latest/tutorials/optimization/"
-"using_servers.html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -67160,8 +67304,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -67435,7 +67579,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69766,6 +69913,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69865,11 +70028,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr "https://docs.godotengine.org/pt_BR/latest/tutorials/shading/index.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -70326,13 +70484,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -70672,14 +70823,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr "https://docs.godotengine.org/pt_BR/latest/tutorials/shading/index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70728,8 +70874,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71106,7 +71252,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeUniformRef.xml
msgid "A reference to an existing [VisualShaderNodeUniform]."
-msgstr ""
+msgstr "Uma referência para um [VisualShaderNodeUniform] existente."
#: doc/classes/VisualShaderNodeUniformRef.xml
msgid ""
@@ -72439,11 +72585,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -72467,6 +72613,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -72572,15 +72726,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -72644,6 +72798,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "Emitido quando [member visibility_state] muda."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/ro.po b/doc/translations/ro.po
index 2d61f987eb..d27baf73b8 100644
--- a/doc/translations/ro.po
+++ b/doc/translations/ro.po
@@ -3405,8 +3405,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3765,22 +3765,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4120,11 +4119,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4133,9 +4130,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4214,6 +4210,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4348,10 +4348,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4780,25 +4776,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4982,6 +4959,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4991,9 +4977,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5014,9 +4999,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5662,6 +5646,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5945,6 +5933,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6411,9 +6403,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6648,23 +6639,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7050,9 +7037,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7249,13 +7239,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7555,12 +7538,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8682,9 +8659,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8978,10 +8954,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9373,11 +9347,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9470,7 +9441,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9515,15 +9488,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9538,7 +9504,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9546,7 +9513,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9707,7 +9679,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9748,18 +9725,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9797,12 +9770,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10007,8 +9980,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10052,6 +10030,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10263,11 +10250,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10374,12 +10361,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10438,7 +10419,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10505,9 +10486,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10810,23 +10791,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10837,15 +10812,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11032,6 +11005,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11066,6 +11047,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11326,17 +11311,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11378,9 +11361,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11413,6 +11395,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11812,15 +11801,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12247,14 +12234,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12449,7 +12434,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12462,7 +12449,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12756,7 +12745,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12806,6 +12795,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12886,20 +12887,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13458,6 +13445,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13542,9 +13530,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13553,9 +13541,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13565,10 +13553,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13661,9 +13650,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13672,22 +13661,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13807,15 +13788,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13854,9 +13831,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13901,19 +13877,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15371,20 +15344,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15484,8 +15453,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17462,12 +17431,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17632,8 +17595,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17722,7 +17685,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17754,7 +17732,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17764,7 +17747,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17806,7 +17794,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17830,7 +17824,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17911,7 +17910,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17986,7 +17991,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18000,7 +18010,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18101,7 +18116,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18132,7 +18153,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18176,13 +18203,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18348,6 +18368,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19058,11 +19086,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19117,8 +19142,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19127,7 +19152,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19155,13 +19184,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19284,12 +19306,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20317,13 +20333,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20355,8 +20364,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20389,8 +20398,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20500,11 +20509,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20767,12 +20773,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21643,13 +21643,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22064,13 +22057,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22391,9 +22377,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22712,31 +22697,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22796,12 +22785,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23479,6 +23470,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24080,11 +24075,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24111,6 +24106,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24251,20 +24262,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24334,13 +24331,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25383,7 +25373,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26379,11 +26369,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26410,10 +26402,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26460,6 +26450,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26681,6 +26677,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27012,21 +27016,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27817,13 +27806,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27968,11 +27950,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28689,6 +28668,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28880,7 +28863,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29109,8 +29092,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29138,8 +29121,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29296,7 +29279,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29431,15 +29419,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29482,8 +29464,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29514,8 +29496,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29559,11 +29541,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29730,17 +29709,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29824,17 +29801,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29845,13 +29826,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29888,9 +29862,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30017,13 +29995,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30777,15 +30748,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30833,6 +30795,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30893,11 +30878,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30912,9 +30894,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -30991,7 +30972,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31001,18 +30986,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31164,11 +31165,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31417,11 +31415,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31850,6 +31845,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32046,13 +32045,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33899,10 +33891,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34133,22 +34121,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34292,13 +34264,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34540,13 +34505,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34618,9 +34576,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34657,6 +34614,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34685,9 +34646,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -34998,7 +34958,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35550,6 +35510,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35570,6 +35534,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35609,18 +35577,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35859,9 +35815,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36151,16 +36110,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36206,7 +36161,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36221,7 +36176,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36234,7 +36189,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36249,17 +36204,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36269,14 +36224,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36286,7 +36241,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36995,6 +36950,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37147,11 +37114,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37318,9 +37282,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37356,11 +37319,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37497,8 +37460,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37532,19 +37495,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37747,8 +37703,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37872,7 +37828,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38061,6 +38017,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38587,7 +38585,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38848,8 +38855,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39098,6 +39105,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39208,6 +39219,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40151,14 +40169,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40309,13 +40325,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40435,6 +40446,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41178,11 +41193,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43758,9 +43770,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44170,6 +44181,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45466,8 +45481,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45553,8 +45568,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45642,9 +45657,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47025,12 +47040,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47125,6 +47142,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47224,7 +47252,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47643,6 +47672,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47661,9 +47696,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47690,14 +47724,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47862,9 +47888,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48300,7 +48325,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48328,7 +48353,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48483,12 +48512,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48557,7 +48580,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48875,9 +48902,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49097,6 +49123,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49413,9 +49443,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49610,9 +49643,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50197,14 +50231,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50802,11 +50834,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51013,18 +51042,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51480,10 +51497,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51793,16 +51806,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52130,12 +52133,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52445,16 +52442,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52536,17 +52530,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52609,11 +52598,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52754,8 +52748,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52849,12 +52843,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54201,9 +54189,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54379,14 +54367,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54760,6 +54763,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54913,13 +54961,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55184,7 +55225,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55233,10 +55279,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55601,12 +55647,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58004,10 +58065,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58095,7 +58152,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58373,11 +58431,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58452,15 +58511,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59049,7 +59105,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59880,17 +59941,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60006,7 +60056,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60032,6 +60083,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60079,9 +60135,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60092,8 +60148,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60133,7 +60189,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60502,11 +60558,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60541,12 +60596,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61894,12 +61961,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61926,8 +61987,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62583,6 +62643,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62793,28 +62861,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62841,7 +62905,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62932,7 +62998,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63655,13 +63723,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65416,13 +65477,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65857,8 +65911,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66131,7 +66185,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68439,6 +68496,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68538,12 +68611,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69000,13 +69067,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69344,16 +69404,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69402,8 +69455,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71109,11 +71162,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71137,6 +71190,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71242,15 +71303,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71314,6 +71375,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/ru.po b/doc/translations/ru.po
index 6bfd3b83b6..dfde3ad01b 100644
--- a/doc/translations/ru.po
+++ b/doc/translations/ru.po
@@ -34,21 +34,25 @@
# artem <artem999.r@protonmail.com>, 2021.
# Werryx <artoops@mail.ru>, 2022.
# Eugene <oukey311@gmail.com>, 2022.
+# 140bpmdubstep <maksim.afonin.1927@bk.ru>, 2022.
+# ÐлекÑей Зотов <ancrad@yandex.ru>, 2022.
+# Russkikh Michail <summersay415@gmail.com>, 2022.
+# Kirill Slesarenok <s.k.s.10.09.2001@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-03 03:53+0000\n"
-"Last-Translator: Eugene <oukey311@gmail.com>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: Kirill Slesarenok <s.k.s.10.09.2001@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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.10.1\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.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -91,63 +95,68 @@ msgid "Method Descriptions"
msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð²"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "ОпиÑÐ°Ð½Ð¸Ñ ÑвойÑтв"
+msgstr "ОпиÑÐ°Ð½Ð¸Ñ ÑвойÑтв темы"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "ÐаÑледует:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "УнаÑледовано:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(переназначает %s)"
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "По умолчанию"
#: doc/tools/make_rst.py
msgid "Setter"
-msgstr ""
+msgstr "Сеттер"
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "значение"
#: doc/tools/make_rst.py
msgid "Getter"
-msgstr ""
+msgstr "Геттер"
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-"
+"либо Ñффект."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Этот метод не имеет побочных Ñффектов. Он не изменÑет ни одного Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ "
+"ÑкземплÑра клаÑÑа."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
-msgstr ""
+msgstr "Этот метод принимает любое количеÑтво аргументов поÑле опиÑанных."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "Этот метод иÑпользуетÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð°."
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Этот метод не нуждаетÑÑ Ð² вызове ÑкземплÑра, поÑтому его можно вызвать "
+"напрÑмую, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¸Ð¼Ñ ÐºÐ»Ð°ÑÑа."
#: doc/tools/make_rst.py
msgid ""
@@ -380,7 +389,6 @@ msgstr ""
"от начала координат и угол)."
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -393,9 +401,10 @@ msgstr ""
"ОкруглÑет [code]s[/code] вверх (в Ñторону положительной беÑконечноÑти), "
"Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑŒÑˆÐµÐµ целое чиÑло, которое больше или равно [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i равно 2\n"
-"i = ceil(1.001) # i равно 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a равно 2.0\n"
+"a = ceil(1.001) # a равно 2.0\n"
+"[/codeblock]\n"
+"См. также [method floor], [method round], [method stepify] и [int]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -418,7 +427,6 @@ msgstr ""
"Это Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð° [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -465,7 +473,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -473,9 +480,10 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Возвращает ÑÐ¸Ð½ÑƒÑ ÑƒÐ³Ð»Ð° [code]s[/code], заданного в радианах.\n"
+"Возвращает коÑÐ¸Ð½ÑƒÑ ÑƒÐ³Ð»Ð° [code]s[/code] в радианах.\n"
"[codeblock]\n"
-"sin(0.523599) # Возвращает 0.5\n"
+"a = cos(TAU) # a = 1.0\n"
+"a = cos(PI) # a = -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -3938,38 +3946,35 @@ msgstr "ОÑÑŒ X левого джойÑтика игрового контрол
#: doc/classes/@GlobalScope.xml
msgid "Gamepad right stick horizontal axis."
-msgstr "Ð“Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑÑŒ правого Ñтика геймпада."
+msgstr "Ð“Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑÑŒ правого джойÑтика игрового контроллера."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad right stick vertical axis."
-msgstr "ОÑÑŒ X правого джойÑтика игрового контроллера."
+msgstr "Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑÑŒ правого джойÑтика игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 4."
-msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ геймпада 4."
+msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ 4 игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 5."
-msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ геймпада 5."
+msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ 5 игрового контроллера."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad left trigger analog axis."
-msgstr "ОÑÑŒ левого триггера игрового контроллера."
+msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ð°Ñ Ð¾ÑÑŒ левого курка игрового контроллера."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "Gamepad right trigger analog axis."
-msgstr "ОÑÑŒ правого триггера игрового контроллера."
+msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ð°Ñ Ð¾ÑÑŒ правого курка игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 8."
-msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ геймпада 8."
+msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ 8 игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 9."
-msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ геймпада 9."
+msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑÑŒ 9 игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Represents the maximum number of joystick axes supported."
@@ -3978,67 +3983,76 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid "Gamepad left analog trigger."
-msgstr "Левый аналоговый курок геймпада."
+msgstr "Левый аналоговый курок игрового контроллера."
#: doc/classes/@GlobalScope.xml
msgid "Gamepad right analog trigger."
-msgstr "Правый аналоговый курок геймпада."
+msgstr "Правый аналоговый курок игрового контроллера."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "VR Controller analog trigger."
-msgstr "ОÑÑŒ левого триггера игрового контроллера."
+msgstr "ОÑÑŒ левого курка игрового контроллера."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "VR Controller analog grip (side buttons)."
-msgstr "Кнопка Guide игрового контроллера SDL."
+msgstr "ÐÐ½Ð°Ð»Ð¾Ð³Ð¾Ð²Ð°Ñ Ñ€ÑƒÐºÐ¾Ñтка контроллера VR (боковые кнопки)."
#: doc/classes/@GlobalScope.xml
msgid ""
"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
-"ОÑÑŒ X тачпада OpenVR (оÑÑŒ джойÑтика на контроллерах Oculus Touch и Windows "
-"MR)."
+"ОÑÑŒ X ÑенÑорной панели OpenVR (оÑÑŒ джойÑтика на контроллерах Oculus Touch и "
+"Windows MR)."
#: doc/classes/@GlobalScope.xml
msgid ""
"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
msgstr ""
-"ОÑÑŒ Y тачпада OpenVR (оÑÑŒ джойÑтика на контроллерах Oculus Touch и Windows "
-"MR)."
+"ОÑÑŒ Y ÑенÑорной панели OpenVR (оÑÑŒ джойÑтика на контроллерах Oculus Touch и "
+"Windows MR)."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI note OFF message. See the documentation of [InputEventMIDI] for "
"information of how to use MIDI inputs."
msgstr ""
+"Сообщение о отключении MIDI-ноты. Смотрите документацию [InputEventMIDI] Ð´Ð»Ñ "
+"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о том, как иÑпользовать MIDI-входы."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI note ON message. See the documentation of [InputEventMIDI] for "
"information of how to use MIDI inputs."
msgstr ""
+"Сообщение о включении MIDI-ноты. Смотрите документацию [InputEventMIDI] Ð´Ð»Ñ "
+"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о том, как иÑпользовать MIDI-входы."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI aftertouch message. This message is most often sent by pressing down on "
"the key after it \"bottoms out\"."
msgstr ""
+"Сообщение поÑле каÑÐ°Ð½Ð¸Ñ MIDI-ноты. Это Ñообщение чаще вÑего отправлÑетÑÑ "
+"нажатием клавиши поÑле того, как оно \"доÑтигнет дна\"."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI control change message. This message is sent when a controller value "
"changes. Controllers include devices such as pedals and levers."
msgstr ""
+"Сообщение об изменении ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ MIDI. Это Ñообщение отправлÑетÑÑ Ð¿Ñ€Ð¸ "
+"изменении Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ð»ÐµÑ€Ð°. Контроллеры включают в ÑÐµÐ±Ñ Ñ‚Ð°ÐºÐ¸Ðµ "
+"уÑтройÑтва, как педали и рычаги."
#: doc/classes/@GlobalScope.xml
msgid ""
"MIDI program change message. This message sent when the program patch number "
"changes."
msgstr ""
+"Сообщение об изменении MIDI-программы. Это Ñообщение отправлÑетÑÑ Ð¿Ñ€Ð¸ "
+"изменении номера патча программы."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4046,6 +4060,10 @@ msgid ""
"down on the key after it \"bottoms out\". This message is different from "
"polyphonic after-touch as it indicates the highest pressure across all keys."
msgstr ""
+"Сообщение о давлении в MIDI-канале. Это Ñообщение чаще вÑего отправлÑетÑÑ "
+"нажатием клавиши поÑле того, как оно \"доÑтигнет дна\". Это Ñообщение "
+"отличаетÑÑ Ð¾Ñ‚ полифоничеÑкого поÑле-каÑаниÑ, поÑкольку оно указывает на "
+"наибольшее давление на вÑех клавишах."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4478,8 +4496,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"Указывает, что Ñтроковое ÑвойÑтво ÑвлÑетÑÑ Ð°Ð±Ñолютным путём к файлу вне "
"проекта. При редактировании ÑвойÑтва будет поÑвлÑтьÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³ выбора файла. "
@@ -4879,22 +4897,23 @@ msgstr ""
"[b]Примечание:[/b] В отличие от [Rect2], у [AABB] нет варианта, "
"иÑпользующего целочиÑленные координаты."
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+#, fuzzy
+msgid "Vector math"
msgstr ""
+"Вектор иÑпользуемый Ð´Ð»Ñ 2D математики иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленные координаты."
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
#, fuzzy
@@ -5378,11 +5397,9 @@ msgstr ""
"[code]run_normal[/code] Ñделает так, что Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [code]run[/code] будет "
"иÑпользовать карту нормалей."
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5391,9 +5408,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5486,6 +5502,10 @@ msgstr ""
"Ñконфигурирован в редакторе через панель SpriteFrames."
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
"Возвращает [code]true[/code], еÑли в данный момент воÑпроизводитÑÑ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ."
@@ -5699,10 +5719,6 @@ msgstr ""
"различные типы, каждый из которых имеет Ñвой набор Ñпециальных методов. "
"Смотрите [enum TrackType], чтобы увидеть доÑтупные типы."
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "ДобавлÑет дорожку в анимацию."
@@ -6173,25 +6189,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6375,6 +6372,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -6384,9 +6390,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6407,9 +6412,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -7065,6 +7069,10 @@ msgstr ""
"Обновление целевых ÑвойÑтв анимаций проиÑходит во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа."
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7393,6 +7401,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7871,9 +7883,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -8108,23 +8119,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -8588,9 +8595,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -8841,13 +8851,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -9147,12 +9150,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -10275,9 +10272,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -10577,10 +10573,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -10972,11 +10966,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -11069,7 +11060,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -11114,15 +11107,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -11137,7 +11123,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11145,7 +11132,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11306,7 +11298,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -11347,18 +11344,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -11396,12 +11389,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11609,8 +11602,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -11654,6 +11652,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -11865,11 +11872,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11976,12 +11983,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12040,7 +12041,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12107,9 +12108,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -12413,23 +12414,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -12440,15 +12435,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -12643,6 +12636,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -12677,6 +12678,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Возвращает ÑкалÑрное произведение Ñ [code]b[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12937,17 +12943,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -12989,9 +12993,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -13024,6 +13027,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -13425,15 +13435,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -13870,14 +13878,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -14072,7 +14078,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -14085,7 +14093,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -14382,7 +14392,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -14432,6 +14442,19 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "ИзлучаетÑÑ Ð¿Ñ€Ð¸ изменении [member frame]."
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -14512,20 +14535,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -15090,6 +15099,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -15176,9 +15186,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15187,9 +15197,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15199,10 +15209,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -15295,9 +15306,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -15306,22 +15317,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -15441,15 +15444,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -15488,9 +15487,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -15535,19 +15533,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -17076,20 +17071,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "Клавиша Control."
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -17189,8 +17181,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -19205,12 +19197,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -19375,8 +19361,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -19465,7 +19451,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -19497,7 +19498,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19507,7 +19513,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -19549,7 +19560,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -19573,7 +19590,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -19654,7 +19676,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -19730,7 +19758,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -19744,7 +19777,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -19845,7 +19883,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -19876,7 +19920,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -19920,13 +19970,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -20093,6 +20136,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -20806,11 +20857,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -20870,8 +20918,8 @@ msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтоÐ
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -20880,7 +20928,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -20909,13 +20961,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -21038,12 +21083,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -22071,13 +22110,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -22109,8 +22141,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -22143,8 +22175,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -22254,11 +22286,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -22527,12 +22556,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -23404,13 +23427,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -23832,13 +23848,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -24162,9 +24171,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -24484,31 +24492,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -24568,12 +24580,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -25254,6 +25268,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -25856,11 +25874,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -25887,6 +25905,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Возвращает длину вектора."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -26027,20 +26062,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -26112,13 +26133,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -27161,7 +27175,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -28171,11 +28185,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -28202,10 +28218,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -28251,6 +28265,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "Возвращает вектор Ñпроецированный на вектор [code]b[/code]."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -28473,6 +28494,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -28806,21 +28835,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -29611,13 +29625,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -29763,11 +29770,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -30487,6 +30491,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -30679,7 +30687,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -30908,8 +30916,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30937,8 +30945,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31095,7 +31103,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -31230,15 +31243,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -31281,8 +31288,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31313,8 +31320,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -31358,11 +31365,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -31529,17 +31533,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -31623,17 +31625,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -31644,13 +31650,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -31687,9 +31686,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -31816,13 +31819,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -32578,15 +32574,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -32634,6 +32621,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -32694,11 +32704,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -32713,9 +32720,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -32792,7 +32798,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -32802,18 +32812,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -32986,11 +33012,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
#, fuzzy
@@ -33242,11 +33265,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -33678,6 +33698,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -33875,13 +33899,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -35731,10 +35748,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -35966,22 +35979,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -36125,13 +36122,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -36380,13 +36370,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -36458,9 +36441,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -36497,6 +36479,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -36525,9 +36511,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -36860,7 +36845,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -37421,6 +37406,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Возвращает значение задержки данного кадра."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Возвращает обратный квадратный корень из аргумента."
@@ -37442,6 +37432,10 @@ msgid "Returns the map's up direction."
msgstr "Возвращает значение задержки данного кадра."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
@@ -37482,18 +37476,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -37732,9 +37714,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -38024,16 +38009,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -38079,7 +38060,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38094,7 +38075,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38107,7 +38088,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38122,17 +38103,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -38142,14 +38123,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -38159,7 +38140,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -38871,6 +38852,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -39025,11 +39018,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -39196,9 +39186,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -39234,11 +39223,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -39375,8 +39364,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -39410,19 +39399,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -39625,8 +39607,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -39753,7 +39735,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -39942,6 +39924,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -40473,7 +40497,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -40737,8 +40770,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -40990,6 +41023,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтой."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -41105,6 +41143,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -42074,14 +42119,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -42232,13 +42275,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -42358,6 +42396,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -43103,11 +43145,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -45700,9 +45739,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -46120,6 +46158,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Возвращает ÑкалÑрное произведение Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð¼ [code]b[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -47429,8 +47472,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47516,8 +47559,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -47605,9 +47648,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -48988,12 +49031,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49088,6 +49133,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -49187,7 +49243,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49606,6 +49663,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -49624,9 +49687,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -49653,14 +49715,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -49858,9 +49912,8 @@ msgstr ""
"[/codeblock]"
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -50315,8 +50368,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Возвращает обратный квадратный корень из аргумента."
#: doc/classes/Rect2.xml
#, fuzzy
@@ -50344,7 +50398,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -50499,12 +50557,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -50573,7 +50625,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -50891,9 +50947,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -51113,6 +51168,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -51433,9 +51492,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -51630,9 +51692,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -52217,14 +52280,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -52822,11 +52883,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -53033,18 +53091,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -53501,10 +53547,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -53814,16 +53856,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -54152,12 +54184,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -54467,16 +54493,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -54564,17 +54587,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -54637,11 +54655,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -54782,8 +54805,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -54877,12 +54900,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -56234,9 +56251,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -56412,14 +56429,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -56804,6 +56836,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Возвращает Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -56960,13 +57039,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -57243,7 +57315,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -57292,10 +57369,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -57660,12 +57737,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -60083,10 +60175,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -60187,11 +60275,11 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
-msgstr "Возвращает [code]true[/code] еÑли маÑÑив Ñодержит [code]value[/code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
+msgstr ""
#: doc/classes/Theme.xml
msgid ""
@@ -60477,11 +60565,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -60556,15 +60645,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -61153,7 +61239,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -61989,17 +62080,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -62116,7 +62196,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -62142,6 +62223,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -62190,9 +62276,9 @@ msgstr "Возвращает коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -62203,8 +62289,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -62244,8 +62330,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Возвращает обратный квадратный корень из аргумента."
#: doc/classes/Tree.xml
msgid ""
@@ -62613,11 +62700,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -62651,12 +62737,28 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"Возвращает [code]true[/code] еÑли [code]a[/code] и [code]b[/code] "
+"приблизительно равны друг другу."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Возвращает ÑкалÑрное произведение Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¾Ð¼ [code]b[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -64015,12 +64117,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -64057,8 +64153,7 @@ msgstr ""
"вÑегда будет преобразован в [code]true[/code]."
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -64828,6 +64923,15 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð»Ð¾Ñа прокрутки."
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -65039,28 +65143,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -65088,7 +65188,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Возвращает значение, противоположное параметру."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -65183,7 +65285,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -65913,13 +66017,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -67695,13 +67792,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -68137,8 +68227,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68412,7 +68502,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -70740,6 +70833,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -70839,12 +70948,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -71301,13 +71404,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -71647,16 +71743,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -71705,8 +71794,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -73418,11 +73507,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -73446,6 +73535,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -73551,15 +73648,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -73624,6 +73721,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "ИзлучаетÑÑ Ð¿Ñ€Ð¸ изменении [member frame]."
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/sk.po b/doc/translations/sk.po
index 1939f0226d..8758caf868 100644
--- a/doc/translations/sk.po
+++ b/doc/translations/sk.po
@@ -3388,8 +3388,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3748,22 +3748,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4103,11 +4102,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4116,9 +4113,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4197,6 +4193,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4331,10 +4331,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4763,25 +4759,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4965,6 +4942,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4974,9 +4960,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -4997,9 +4982,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5645,6 +5629,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5928,6 +5916,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6394,9 +6386,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6631,23 +6622,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7033,9 +7020,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7232,13 +7222,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7538,12 +7521,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8665,9 +8642,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8961,10 +8937,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9356,11 +9330,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9453,7 +9424,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9498,15 +9471,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9521,7 +9487,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9529,7 +9496,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9690,7 +9662,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9731,18 +9708,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9780,12 +9753,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9990,8 +9963,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10035,6 +10013,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10246,11 +10233,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10357,12 +10344,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10421,7 +10402,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10488,9 +10469,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10793,23 +10774,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10820,15 +10795,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11015,6 +10988,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11049,6 +11030,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11309,17 +11294,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11361,9 +11344,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11396,6 +11378,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11795,15 +11784,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12230,14 +12217,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12432,7 +12417,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12445,7 +12432,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12739,7 +12728,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12789,6 +12778,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12869,20 +12870,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13441,6 +13428,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13525,9 +13513,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13536,9 +13524,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13548,10 +13536,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13644,9 +13633,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13655,22 +13644,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13790,15 +13771,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13837,9 +13814,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13884,19 +13860,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15354,20 +15327,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15467,8 +15436,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17445,12 +17414,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17615,8 +17578,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17705,7 +17668,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17737,7 +17715,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17747,7 +17730,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17789,7 +17777,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17813,7 +17807,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17894,7 +17893,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17969,7 +17974,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17983,7 +17993,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18084,7 +18099,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18115,7 +18136,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18159,13 +18186,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18331,6 +18351,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19041,11 +19069,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19100,8 +19125,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19110,7 +19135,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19138,13 +19167,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19267,12 +19289,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20300,13 +20316,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20338,8 +20347,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20372,8 +20381,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20483,11 +20492,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20750,12 +20756,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21626,13 +21626,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22047,13 +22040,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22374,9 +22360,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22695,31 +22680,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22779,12 +22768,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23462,6 +23453,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24063,11 +24058,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24094,6 +24089,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24234,20 +24245,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24317,13 +24314,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25366,7 +25356,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26362,11 +26352,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26393,10 +26385,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26443,6 +26433,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26664,6 +26660,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26995,21 +26999,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27800,13 +27789,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27951,11 +27933,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28672,6 +28651,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28863,7 +28846,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29092,8 +29075,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29121,8 +29104,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29279,7 +29262,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29414,15 +29402,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29465,8 +29447,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29497,8 +29479,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29542,11 +29524,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29713,17 +29692,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29807,17 +29784,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29828,13 +29809,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29871,9 +29845,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30000,13 +29978,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30760,15 +30731,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30816,6 +30778,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30876,11 +30861,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30895,9 +30877,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -30974,7 +30955,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30984,18 +30969,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31147,11 +31148,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31400,11 +31398,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31833,6 +31828,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32029,13 +32028,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33882,10 +33874,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34116,22 +34104,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34275,13 +34247,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34523,13 +34488,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34601,9 +34559,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34640,6 +34597,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34668,9 +34629,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -34981,7 +34941,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35533,6 +35493,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35553,6 +35517,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35592,18 +35560,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35842,9 +35798,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36134,16 +36093,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36189,7 +36144,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36204,7 +36159,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36217,7 +36172,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36232,17 +36187,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36252,14 +36207,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36269,7 +36224,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36978,6 +36933,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37130,11 +37097,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37301,9 +37265,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37339,11 +37302,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37480,8 +37443,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37515,19 +37478,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37730,8 +37686,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37855,7 +37811,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38044,6 +38000,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38570,7 +38568,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38831,8 +38838,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39081,6 +39088,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39191,6 +39202,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40134,14 +40152,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40292,13 +40308,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40418,6 +40429,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41161,11 +41176,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43741,9 +43753,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44153,6 +44164,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45449,8 +45464,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45536,8 +45551,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45625,9 +45640,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47008,12 +47023,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47108,6 +47125,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47207,7 +47235,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47626,6 +47655,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47644,9 +47679,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47673,14 +47707,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47845,9 +47871,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48283,7 +48308,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48311,7 +48336,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48466,12 +48495,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48540,7 +48563,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48858,9 +48885,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49080,6 +49106,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49396,9 +49426,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49593,9 +49626,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50180,14 +50214,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50785,11 +50817,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -50996,18 +51025,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51463,10 +51480,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51776,16 +51789,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52113,12 +52116,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52428,16 +52425,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52519,17 +52513,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52592,11 +52581,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52737,8 +52731,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52832,12 +52826,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54184,9 +54172,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54362,14 +54350,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54743,6 +54746,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54896,13 +54944,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55167,7 +55208,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55216,10 +55262,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55584,12 +55630,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57987,10 +58048,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58078,7 +58135,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58356,11 +58414,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58435,15 +58494,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59032,7 +59088,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59863,17 +59924,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59989,7 +60039,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60015,6 +60066,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60062,9 +60118,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60075,8 +60131,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60116,7 +60172,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60485,11 +60541,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60524,12 +60579,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61877,12 +61944,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61909,8 +61970,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62566,6 +62626,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62776,28 +62844,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62824,7 +62888,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62915,7 +62981,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63638,13 +63706,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65399,13 +65460,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65840,8 +65894,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66114,7 +66168,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68422,6 +68479,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68521,12 +68594,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68983,13 +69050,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69327,16 +69387,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69385,8 +69438,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71092,11 +71145,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71120,6 +71173,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71225,15 +71286,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71297,6 +71358,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po
index 7dd34a8986..780b9a451e 100644
--- a/doc/translations/sr_Cyrl.po
+++ b/doc/translations/sr_Cyrl.po
@@ -18,8 +18,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.9-dev\n"
#: doc/tools/make_rst.py
@@ -3399,8 +3399,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3759,22 +3759,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4114,11 +4113,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4127,9 +4124,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4208,6 +4204,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4342,10 +4342,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4774,25 +4770,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4976,6 +4953,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4985,9 +4971,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5008,9 +4993,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5656,6 +5640,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5939,6 +5927,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6405,9 +6397,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6642,23 +6633,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7044,9 +7031,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7243,13 +7233,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7549,12 +7532,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8676,9 +8653,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -8972,10 +8948,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9367,11 +9341,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9464,7 +9435,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9509,15 +9482,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9532,7 +9498,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9540,7 +9507,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9701,7 +9673,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9742,18 +9719,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9791,12 +9764,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10001,8 +9974,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10046,6 +10024,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10257,11 +10244,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10368,12 +10355,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10432,7 +10413,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10499,9 +10480,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10804,23 +10785,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10831,15 +10806,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11026,6 +10999,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11060,6 +11041,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11320,17 +11305,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11372,9 +11355,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11407,6 +11389,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11806,15 +11795,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12241,14 +12228,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12443,7 +12428,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12456,7 +12443,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12750,7 +12739,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12800,6 +12789,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12880,20 +12881,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13452,6 +13439,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13536,9 +13524,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13547,9 +13535,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13559,10 +13547,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13655,9 +13644,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13666,22 +13655,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13801,15 +13782,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13848,9 +13825,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13895,19 +13871,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15365,20 +15338,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15478,8 +15447,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17456,12 +17425,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17626,8 +17589,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17716,7 +17679,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17748,7 +17726,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17758,7 +17741,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17800,7 +17788,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17824,7 +17818,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17905,7 +17904,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17980,7 +17985,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17994,7 +18004,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18095,7 +18110,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18126,7 +18147,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18170,13 +18197,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18342,6 +18362,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19052,11 +19080,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19111,8 +19136,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19121,7 +19146,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19149,13 +19178,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19278,12 +19300,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20311,13 +20327,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20349,8 +20358,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20383,8 +20392,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20494,11 +20503,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20761,12 +20767,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21637,13 +21637,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22058,13 +22051,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22385,9 +22371,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22706,31 +22691,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22790,12 +22779,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23473,6 +23464,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24074,11 +24069,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24105,6 +24100,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24245,20 +24256,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24328,13 +24325,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25377,7 +25367,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26373,11 +26363,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26404,10 +26396,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26454,6 +26444,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26675,6 +26671,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27006,21 +27010,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27811,13 +27800,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27962,11 +27944,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28683,6 +28662,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28874,7 +28857,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29103,8 +29086,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29132,8 +29115,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29290,7 +29273,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29425,15 +29413,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29476,8 +29458,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29508,8 +29490,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29553,11 +29535,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29724,17 +29703,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29818,17 +29795,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29839,13 +29820,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29882,9 +29856,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30011,13 +29989,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30771,15 +30742,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30827,6 +30789,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30887,11 +30872,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -30906,9 +30888,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -30985,7 +30966,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30995,18 +30980,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31158,11 +31159,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31411,11 +31409,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31844,6 +31839,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -32040,13 +32039,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33893,10 +33885,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34127,22 +34115,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34286,13 +34258,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34534,13 +34499,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34612,9 +34570,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34651,6 +34608,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34679,9 +34640,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -34992,7 +34952,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35544,6 +35504,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35564,6 +35528,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35603,18 +35571,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35853,9 +35809,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36145,16 +36104,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36200,7 +36155,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36215,7 +36170,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36228,7 +36183,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36243,17 +36198,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36263,14 +36218,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36280,7 +36235,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36989,6 +36944,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37141,11 +37108,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37312,9 +37276,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37350,11 +37313,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37491,8 +37454,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37526,19 +37489,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37741,8 +37697,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37866,7 +37822,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38055,6 +38011,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38581,7 +38579,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38842,8 +38849,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39092,6 +39099,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39202,6 +39213,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40145,14 +40163,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40303,13 +40319,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40429,6 +40440,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41172,11 +41187,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43752,9 +43764,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44164,6 +44175,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45460,8 +45475,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45547,8 +45562,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45636,9 +45651,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47019,12 +47034,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47119,6 +47136,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47218,7 +47246,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47637,6 +47666,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47655,9 +47690,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47684,14 +47718,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47856,9 +47882,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48294,7 +48319,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48322,7 +48347,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48477,12 +48506,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48551,7 +48574,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48869,9 +48896,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49091,6 +49117,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49407,9 +49437,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49604,9 +49637,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50191,14 +50225,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50796,11 +50828,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51007,18 +51036,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51474,10 +51491,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51787,16 +51800,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52124,12 +52127,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52439,16 +52436,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52530,17 +52524,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52603,11 +52592,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52748,8 +52742,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52843,12 +52837,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54195,9 +54183,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54373,14 +54361,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54754,6 +54757,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54907,13 +54955,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55178,7 +55219,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55227,10 +55273,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55595,12 +55641,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57998,10 +58059,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58089,7 +58146,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58367,11 +58425,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58446,15 +58505,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59043,7 +59099,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59874,17 +59935,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60000,7 +60050,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60026,6 +60077,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60073,9 +60129,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60086,8 +60142,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60127,7 +60183,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60496,11 +60552,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60535,12 +60590,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61888,12 +61955,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61920,8 +61981,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62577,6 +62637,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62787,28 +62855,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -62835,7 +62899,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62926,7 +62992,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63649,13 +63717,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65410,13 +65471,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65851,8 +65905,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66125,7 +66179,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68433,6 +68490,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68532,12 +68605,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68994,13 +69061,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69338,16 +69398,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69396,8 +69449,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71103,11 +71156,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71131,6 +71184,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71236,15 +71297,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71308,6 +71369,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/sv.po b/doc/translations/sv.po
index c665310546..7cc04c7527 100644
--- a/doc/translations/sv.po
+++ b/doc/translations/sv.po
@@ -3388,8 +3388,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3748,20 +3748,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4102,9 +4102,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4114,7 +4113,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4194,6 +4193,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4328,10 +4331,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4760,22 +4759,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -4959,6 +4942,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -4968,7 +4960,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -4990,7 +4982,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5637,6 +5629,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5920,6 +5916,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6386,7 +6386,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6622,18 +6622,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7020,9 +7020,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7219,10 +7222,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7522,12 +7521,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8649,7 +8642,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -8944,7 +8937,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9337,7 +9330,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9431,7 +9424,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9476,12 +9471,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9497,7 +9487,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9505,7 +9496,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9666,7 +9662,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9707,14 +9708,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9753,12 +9753,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -9963,8 +9963,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10008,6 +10013,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10219,11 +10233,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10330,10 +10344,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10392,7 +10402,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10459,9 +10469,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10764,16 +10774,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10785,12 +10795,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -10978,6 +10988,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11012,6 +11030,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11272,14 +11294,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11322,7 +11344,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11356,6 +11378,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11755,12 +11784,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12188,11 +12217,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12388,7 +12417,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12401,7 +12432,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12695,7 +12728,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12745,6 +12778,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12825,16 +12870,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13393,6 +13428,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13477,9 +13513,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13488,9 +13524,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13500,10 +13536,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13596,9 +13633,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13607,22 +13644,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13742,11 +13771,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13786,7 +13814,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13832,15 +13860,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15299,15 +15327,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15408,8 +15436,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17386,10 +17414,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17554,8 +17578,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17644,7 +17668,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17676,7 +17715,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17686,7 +17730,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17728,7 +17777,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17752,7 +17807,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17833,7 +17893,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17908,7 +17974,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17922,7 +17993,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18023,7 +18099,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18054,7 +18136,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18098,10 +18186,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18267,6 +18351,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -18977,7 +19069,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19033,8 +19125,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19043,7 +19135,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19071,11 +19167,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19198,10 +19289,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20229,10 +20316,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20264,8 +20347,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20298,8 +20381,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20409,7 +20492,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20673,10 +20756,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21547,10 +21626,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -21965,10 +22040,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22289,9 +22360,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22610,24 +22680,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22688,12 +22765,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23371,6 +23450,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -23972,11 +24055,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24003,6 +24086,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24143,14 +24242,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24220,10 +24311,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25266,7 +25353,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26262,11 +26349,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26293,7 +26382,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26341,6 +26430,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26562,6 +26657,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26893,15 +26996,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27692,10 +27786,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27840,7 +27930,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28558,6 +28648,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28749,7 +28843,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -28978,8 +29072,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29007,8 +29101,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29165,7 +29259,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29300,12 +29399,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29349,8 +29444,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29381,8 +29476,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29426,7 +29521,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29594,17 +29689,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29688,17 +29781,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29709,10 +29806,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29749,9 +29842,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29878,10 +29975,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30636,12 +30729,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30688,6 +30775,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30748,7 +30858,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30764,7 +30874,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30842,7 +30952,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30852,18 +30966,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31015,7 +31145,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31265,7 +31395,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31695,6 +31825,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31891,10 +32025,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33741,10 +33871,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -33975,16 +34101,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34128,10 +34244,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34373,10 +34485,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34448,7 +34556,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34486,6 +34594,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34514,7 +34626,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34826,7 +34938,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35378,6 +35490,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35398,6 +35514,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35437,15 +35557,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35684,7 +35795,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -35975,11 +36090,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36026,7 +36141,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36041,7 +36156,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36054,7 +36169,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36069,17 +36184,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36089,14 +36204,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36106,7 +36221,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36815,6 +36930,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -36967,7 +37094,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37135,7 +37262,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37172,11 +37299,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37313,8 +37440,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37348,12 +37475,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37557,8 +37683,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37682,7 +37808,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37871,6 +37997,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38397,7 +38565,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38658,8 +38835,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38908,6 +39085,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39018,6 +39199,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -39961,11 +40149,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40117,9 +40305,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40240,6 +40426,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -40983,8 +41173,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43561,7 +43750,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -43972,6 +44161,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45268,8 +45461,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45355,8 +45548,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45444,9 +45637,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46827,12 +47020,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46927,6 +47122,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47026,7 +47232,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47445,6 +47652,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47463,7 +47676,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47491,11 +47704,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47660,7 +47868,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48097,7 +48305,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48125,7 +48333,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48280,10 +48492,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48352,7 +48560,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48670,7 +48882,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48891,6 +49103,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49207,7 +49423,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49403,9 +49623,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49990,11 +50211,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50593,7 +50814,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50801,14 +51022,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51264,10 +51477,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51577,14 +51786,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51912,10 +52113,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52225,11 +52422,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52314,11 +52510,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52382,11 +52578,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52527,8 +52728,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52622,10 +52823,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -53972,9 +54169,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54150,14 +54347,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54531,6 +54743,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54684,10 +54941,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -54952,7 +55205,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55001,10 +55259,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55369,12 +55627,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57772,10 +58045,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57863,7 +58132,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58141,7 +58411,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58217,11 +58491,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58811,7 +59085,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59642,14 +59921,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59765,7 +60036,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59791,6 +60063,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59838,9 +60115,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59851,8 +60128,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59892,7 +60169,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60261,11 +60538,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60300,12 +60576,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61653,10 +61941,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61683,8 +61967,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62340,6 +62623,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62550,23 +62841,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62594,7 +62885,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62685,7 +62978,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63408,10 +63703,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65166,10 +65457,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65604,8 +65891,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65878,7 +66165,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68186,6 +68476,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68285,10 +68591,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68745,10 +69047,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69086,13 +69384,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69141,8 +69435,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70848,11 +71142,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70876,6 +71170,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -70981,15 +71283,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71053,6 +71355,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/th.po b/doc/translations/th.po
index c71cda4def..fa12585e9c 100644
--- a/doc/translations/th.po
+++ b/doc/translations/th.po
@@ -3481,8 +3481,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3848,22 +3848,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4203,11 +4202,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4216,9 +4213,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4297,6 +4293,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4431,10 +4431,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4863,25 +4859,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5065,6 +5042,16 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Node à¸à¸¥à¸¨à¸²à¸ªà¸•ร์à¸à¸²à¸£à¹€à¸„ลื่อนไหวร่างà¸à¸²à¸¢à¹à¸šà¸š 2D"
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5074,9 +5061,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5097,9 +5083,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5745,6 +5730,11 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Node à¸à¸¥à¸¨à¸²à¸ªà¸•ร์à¸à¸²à¸£à¹€à¸„ลื่อนไหวร่างà¸à¸²à¸¢à¹à¸šà¸š 2D"
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6028,6 +6018,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6495,9 +6489,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6732,23 +6725,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7134,9 +7123,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7333,13 +7325,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7639,12 +7624,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8766,9 +8745,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9063,10 +9041,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9458,11 +9434,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9555,7 +9528,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9600,15 +9575,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9623,7 +9591,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9631,7 +9600,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9792,7 +9766,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9833,18 +9812,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9882,12 +9857,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10092,8 +10067,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10137,6 +10117,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10348,11 +10337,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10459,12 +10448,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10523,7 +10506,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10590,9 +10573,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10895,23 +10878,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10922,15 +10899,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11117,6 +11092,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11151,6 +11134,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11411,17 +11398,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11463,9 +11448,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11498,6 +11482,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11897,15 +11888,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12334,14 +12323,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12536,7 +12523,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12549,7 +12538,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12843,7 +12834,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12893,6 +12884,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12973,20 +12976,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13545,6 +13534,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13629,9 +13619,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13640,9 +13630,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13652,10 +13642,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13748,9 +13739,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13759,22 +13750,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13894,15 +13877,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13941,9 +13920,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -13988,19 +13966,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15458,20 +15433,17 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr "ปุ่ม"
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15571,8 +15543,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17549,12 +17521,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17719,8 +17685,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17809,7 +17775,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17841,7 +17822,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17851,7 +17837,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17893,7 +17884,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17917,7 +17914,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17998,7 +18000,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18073,7 +18081,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18087,7 +18100,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18188,7 +18206,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18219,7 +18243,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18263,13 +18293,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18435,6 +18458,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19145,11 +19176,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19204,8 +19232,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19214,7 +19242,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19242,13 +19274,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19371,12 +19396,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20404,13 +20423,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20442,8 +20454,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20476,8 +20488,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20587,11 +20599,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20854,12 +20863,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21730,13 +21733,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22151,13 +22147,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22479,9 +22468,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22800,31 +22788,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22884,12 +22876,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23567,6 +23561,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24168,11 +24166,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24199,6 +24197,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24339,20 +24354,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24422,13 +24423,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25471,7 +25465,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26468,11 +26462,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26499,10 +26495,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26549,6 +26543,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26770,6 +26770,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27101,21 +27109,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27906,13 +27899,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28057,11 +28043,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28779,6 +28762,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28971,7 +28958,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29205,8 +29192,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"ส่งคืนค่า [code]true[/code] หาà¸à¸„ุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸à¸²à¸£à¸à¸” action event โปรดทราบไว้ว่าหาภ"
@@ -29237,8 +29224,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29395,7 +29382,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29530,15 +29522,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29581,8 +29567,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29613,8 +29599,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29658,11 +29644,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29829,17 +29812,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29923,17 +29904,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29944,13 +29929,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29987,9 +29965,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30116,13 +30098,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30876,15 +30851,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30932,6 +30898,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30992,11 +30981,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31011,9 +30997,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31090,7 +31075,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31100,18 +31089,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31263,11 +31268,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31522,10 +31524,8 @@ msgstr ""
#: doc/classes/KinematicBody2D.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
+msgstr "Node à¸à¸¥à¸¨à¸²à¸ªà¸•ร์à¸à¸²à¸£à¹€à¸„ลื่อนไหวร่างà¸à¸²à¸¢à¹à¸šà¸š 2D"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31959,6 +31959,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32156,13 +32160,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34009,10 +34006,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34243,22 +34236,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34402,13 +34379,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34650,13 +34620,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34728,9 +34691,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34767,6 +34729,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34795,9 +34761,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35115,7 +35080,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35668,6 +35633,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
@@ -35689,6 +35659,10 @@ msgid "Returns the map's up direction."
msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35728,18 +35702,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35978,9 +35940,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36270,16 +36235,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36326,7 +36287,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ในระหว่างที่เรียà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ physics processing à¸à¹‡à¸„ือà¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³ "
"หมายความว่าà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥à¸—างฟิสิà¸à¸ªà¹Œà¸à¹‡à¸„ืออัตราเฟรมที่จะถูà¸à¸‹à¸´à¸‡à¸„์à¸à¸±à¸šà¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ ดังนั้นตัวà¹à¸›à¸£ [code]delta[/"
@@ -36351,7 +36312,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ในระหว่างที่เรียà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ physics processing à¸à¹‡à¸„ือà¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³ "
"หมายความว่าà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥à¸—างฟิสิà¸à¸ªà¹Œà¸à¹‡à¸„ืออัตราเฟรมที่จะถูà¸à¸‹à¸´à¸‡à¸„์à¸à¸±à¸šà¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ ดังนั้นตัวà¹à¸›à¸£ [code]delta[/"
@@ -36374,7 +36335,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"ในระหว่างที่เรียà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ physics processing à¸à¹‡à¸„ือà¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³ "
"หมายความว่าà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥à¸—างฟิสิà¸à¸ªà¹Œà¸à¹‡à¸„ืออัตราเฟรมที่จะถูà¸à¸‹à¸´à¸‡à¸„์à¸à¸±à¸šà¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ ดังนั้นตัวà¹à¸›à¸£ [code]delta[/"
@@ -36398,17 +36359,18 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36418,14 +36380,24 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
+"ในระหว่างที่เรียà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ physics processing à¸à¹‡à¸„ือà¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³ "
+"หมายความว่าà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥à¸—างฟิสิà¸à¸ªà¹Œà¸à¹‡à¸„ืออัตราเฟรมที่จะถูà¸à¸‹à¸´à¸‡à¸„์à¸à¸±à¸šà¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ ดังนั้นตัวà¹à¸›à¸£ [code]delta[/"
+"code] ควรเป็นค่าคงที่\n"
+"จะทำงานà¸à¹‡à¸•่อเมื่อเปิดใช้งาน physics processing ซึ่งจะทำงานโดยอัตโนมัติ "
+"หาà¸à¹€à¸¡à¸˜à¸­à¸”นี้ถูà¸à¸£à¸šà¸à¸§à¸™à¸ªà¸²à¸¡à¸²à¸£à¸–สลับใช้ [method set_physics_process] เพื่อปิดเปิดใช้งาน "
+"physics processing ได้\n"
+"สอดคล้องà¸à¸±à¸š [constant NOTIFICATION_PHYSICS_PROCESS] à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนใน [method "
+"Object._notification]\n"
+"[b]หมายเหตุ:[/b]เมธอดนี้จะถูà¸à¹€à¸£à¸µà¸¢à¸à¸à¹‡à¸•่อเมื่อมีโหนดอยู่ในผังฉาà¸à¹€à¸—่านั้น"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36435,8 +36407,17 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
+"ในระหว่างที่เรียà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ physics processing à¸à¹‡à¸„ือà¸à¸²à¸£à¸§à¸™à¸‹à¹‰à¸³ "
+"หมายความว่าà¸à¸²à¸£à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥à¸—างฟิสิà¸à¸ªà¹Œà¸à¹‡à¸„ืออัตราเฟรมที่จะถูà¸à¸‹à¸´à¸‡à¸„์à¸à¸±à¸šà¸Ÿà¸´à¸ªà¸´à¸à¸ªà¹Œ ดังนั้นตัวà¹à¸›à¸£ [code]delta[/"
+"code] ควรเป็นค่าคงที่\n"
+"จะทำงานà¸à¹‡à¸•่อเมื่อเปิดใช้งาน physics processing ซึ่งจะทำงานโดยอัตโนมัติ "
+"หาà¸à¹€à¸¡à¸˜à¸­à¸”นี้ถูà¸à¸£à¸šà¸à¸§à¸™à¸ªà¸²à¸¡à¸²à¸£à¸–สลับใช้ [method set_physics_process] เพื่อปิดเปิดใช้งาน "
+"physics processing ได้\n"
+"สอดคล้องà¸à¸±à¸š [constant NOTIFICATION_PHYSICS_PROCESS] à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•ือนใน [method "
+"Object._notification]\n"
+"[b]หมายเหตุ:[/b]เมธอดนี้จะถูà¸à¹€à¸£à¸µà¸¢à¸à¸à¹‡à¸•่อเมื่อมีโหนดอยู่ในผังฉาà¸à¹€à¸—่านั้น"
#: doc/classes/Node.xml
msgid ""
@@ -37144,6 +37125,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37296,11 +37289,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37467,9 +37457,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37505,11 +37494,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37646,8 +37635,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37681,19 +37670,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37896,8 +37878,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38021,7 +38003,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38210,6 +38192,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38736,7 +38760,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38997,8 +39030,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39249,6 +39282,10 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39359,6 +39396,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40303,14 +40347,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40461,13 +40503,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40587,6 +40624,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41332,11 +41373,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43914,9 +43952,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44326,6 +44363,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45622,8 +45664,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45709,8 +45751,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45798,9 +45840,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47186,12 +47228,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47286,6 +47330,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47385,7 +47440,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47804,6 +47860,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47822,9 +47884,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47851,14 +47912,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48023,9 +48076,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48461,8 +48513,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
#: doc/classes/Rect2.xml
msgid ""
@@ -48489,7 +48542,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48644,12 +48701,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48718,7 +48769,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49036,9 +49091,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49258,6 +49312,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49574,9 +49632,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49771,9 +49832,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50358,14 +50420,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50963,11 +51023,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51174,18 +51231,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51641,10 +51686,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51954,16 +51995,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52291,12 +52322,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52606,14 +52631,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -52697,17 +52719,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52770,11 +52787,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52915,8 +52937,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53010,12 +53032,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54362,9 +54378,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54541,14 +54557,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54922,6 +54953,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55075,13 +55153,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55346,7 +55417,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55395,10 +55471,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55763,12 +55839,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58168,10 +58259,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58259,7 +58346,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58537,11 +58625,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58616,15 +58705,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59213,7 +59299,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60044,17 +60135,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60170,7 +60250,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60196,6 +60277,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60243,9 +60329,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60256,8 +60342,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60297,8 +60383,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
#: doc/classes/Tree.xml
msgid ""
@@ -60666,11 +60753,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60705,12 +60791,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -62058,12 +62156,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62096,8 +62188,7 @@ msgstr ""
"[code]true[/code] เสมอ"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62759,6 +62850,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62969,28 +63068,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63017,7 +63112,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63108,7 +63205,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63831,13 +63930,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65592,13 +65684,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66033,8 +66118,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66307,7 +66392,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68619,6 +68707,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68718,12 +68822,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69180,13 +69278,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69526,16 +69617,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69584,8 +69668,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71292,11 +71376,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71320,6 +71404,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71425,15 +71517,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71497,6 +71589,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/tl.po b/doc/translations/tl.po
index a30b704472..95b59e8579 100644
--- a/doc/translations/tl.po
+++ b/doc/translations/tl.po
@@ -3460,8 +3460,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3820,20 +3820,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4174,9 +4174,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4186,7 +4185,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4266,6 +4265,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4400,10 +4403,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4832,22 +4831,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5031,6 +5014,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5040,7 +5032,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5062,7 +5054,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5709,6 +5701,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -5992,6 +5988,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6458,7 +6458,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -6694,18 +6694,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7092,9 +7092,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7291,10 +7294,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7594,12 +7593,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8721,7 +8714,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -9016,7 +9009,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9409,7 +9402,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9503,7 +9496,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9548,12 +9543,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9569,7 +9559,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9577,7 +9568,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9738,7 +9734,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9779,14 +9780,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -9825,12 +9825,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10035,8 +10035,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10080,6 +10085,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10291,11 +10305,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10402,10 +10416,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10464,7 +10474,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10531,9 +10541,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10836,16 +10846,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -10857,12 +10867,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -11050,6 +11060,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11084,6 +11102,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11344,14 +11366,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11394,7 +11416,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11428,6 +11450,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11827,12 +11856,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12263,11 +12292,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12463,7 +12492,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12476,7 +12507,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12770,7 +12803,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12820,6 +12853,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12900,16 +12945,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13468,6 +13503,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13552,9 +13588,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13563,9 +13599,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13575,10 +13611,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13671,9 +13708,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13682,22 +13719,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13817,11 +13846,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -13861,7 +13889,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -13907,15 +13935,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15374,15 +15402,15 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+msgid "Control node gallery"
msgstr ""
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15483,8 +15511,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17461,10 +17489,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17629,8 +17653,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17719,7 +17743,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17751,7 +17790,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17761,7 +17805,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17803,7 +17852,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17827,7 +17882,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17908,7 +17968,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -17983,7 +18049,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -17997,7 +18068,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18098,7 +18174,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18129,7 +18211,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18173,10 +18261,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18342,6 +18426,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19052,7 +19144,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19108,8 +19200,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19118,7 +19210,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19146,11 +19242,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19273,10 +19364,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20304,10 +20391,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20339,8 +20422,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20373,8 +20456,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20484,7 +20567,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -20748,10 +20831,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21622,10 +21701,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22040,10 +22115,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22364,9 +22435,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22685,24 +22755,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -22763,12 +22840,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23446,6 +23525,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24047,11 +24130,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24078,6 +24161,22 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid "Returns the current line count."
+msgstr ""
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24218,14 +24317,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24295,10 +24386,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25341,7 +25428,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26337,11 +26424,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26368,7 +26457,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26416,6 +26505,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26637,6 +26732,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -26968,15 +27071,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27767,10 +27861,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -27915,7 +28005,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -28633,6 +28723,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -28824,7 +28918,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29053,8 +29147,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29082,8 +29176,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29240,7 +29334,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29375,12 +29474,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29424,8 +29519,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29456,8 +29551,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29501,7 +29596,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -29669,17 +29764,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29763,17 +29856,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29784,10 +29881,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -29824,9 +29917,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -29953,10 +30050,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30711,12 +30804,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -30763,6 +30850,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -30823,7 +30933,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -30839,7 +30949,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -30917,7 +31027,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -30927,18 +31041,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31090,7 +31220,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31340,7 +31470,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -31770,6 +31900,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr ""
@@ -31966,10 +32100,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -33816,10 +33946,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34050,16 +34176,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34203,10 +34319,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34448,10 +34560,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34523,7 +34631,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34561,6 +34669,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34589,7 +34701,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -34907,7 +35019,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35459,6 +35571,10 @@ msgid ""
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Returns the map cell height."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr ""
@@ -35479,6 +35595,10 @@ msgid "Returns the map's up direction."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr ""
@@ -35518,15 +35638,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -35765,7 +35876,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -36056,11 +36171,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36107,7 +36222,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36122,7 +36237,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36135,7 +36250,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36150,17 +36265,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36170,14 +36285,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36187,7 +36302,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36896,6 +37011,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37048,7 +37175,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37216,7 +37343,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37253,11 +37380,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37394,8 +37521,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37429,12 +37556,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -37638,8 +37764,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -37763,7 +37889,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -37952,6 +38078,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38478,7 +38646,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -38739,8 +38916,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -38989,6 +39166,13 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39099,6 +39283,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40042,11 +40233,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40198,9 +40389,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40321,6 +40510,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41064,8 +41257,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -43642,7 +43834,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -44053,6 +44245,10 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr ""
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45349,8 +45545,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45436,8 +45632,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45525,9 +45721,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -46908,12 +47104,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47008,6 +47206,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47107,7 +47316,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47526,6 +47736,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47544,7 +47760,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -47572,11 +47788,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -47741,7 +47952,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48178,7 +48389,7 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48206,7 +48417,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48361,10 +48576,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48433,7 +48644,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -48751,7 +48966,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -48972,6 +49187,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49288,7 +49507,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49484,9 +49707,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50071,11 +50295,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -50674,7 +50898,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -50882,14 +51106,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51345,10 +51561,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51658,14 +51870,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -51993,10 +52197,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52306,11 +52506,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52395,11 +52594,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52463,11 +52662,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52608,8 +52812,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -52703,10 +52907,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54053,9 +54253,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54231,14 +54431,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54612,6 +54827,51 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the current cursor position."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Returns the size of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -54765,10 +55025,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55033,7 +55289,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55082,10 +55343,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55450,12 +55711,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -57856,10 +58132,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -57947,7 +58219,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58225,7 +58498,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58301,11 +58578,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -58895,7 +59172,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -59726,14 +60008,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -59849,7 +60123,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -59875,6 +60150,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -59922,9 +60202,9 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -59935,8 +60215,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -59976,7 +60256,7 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr ""
#: doc/classes/Tree.xml
@@ -60345,11 +60625,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60384,12 +60663,24 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+
+#: doc/classes/TreeItem.xml
+msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
@@ -61737,10 +62028,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -61767,8 +62054,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62424,6 +62710,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62634,23 +62928,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -62678,7 +62972,9 @@ msgid "Returns the topmost modal in the stack."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -62769,7 +63065,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63492,10 +63790,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65250,10 +65544,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -65688,8 +65978,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -65962,7 +66252,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68270,6 +68563,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68369,10 +68678,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -68829,10 +69134,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69170,13 +69471,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69225,8 +69522,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -70932,11 +71229,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -70960,6 +71257,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71065,15 +71370,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71137,6 +71442,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/tr.po b/doc/translations/tr.po
index 31c0cd045f..f08c6a8e63 100644
--- a/doc/translations/tr.po
+++ b/doc/translations/tr.po
@@ -1030,8 +1030,8 @@ msgid ""
msgstr ""
"Doğal logaritma. Belirli bir sürekli büyüme düzeyine ulaşmak için gereken "
"zaman miktarı.\n"
-"[b] Not: [/b] Bu, çoğu hesap makinesinde 10 tabanlı logaritma kullanan \"log"
-"\" işleviyle aynı değildir.\n"
+"[b] Not: [/b] Bu, çoğu hesap makinesinde 10 tabanlı logaritma kullanan "
+"\"log\" işleviyle aynı değildir.\n"
"[codeblock]\n"
"log (10) # 2.302585 döndürür\n"
"[/codeblock]\n"
@@ -4159,8 +4159,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4519,22 +4519,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4874,11 +4873,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4887,9 +4884,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4968,6 +4964,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -5103,10 +5103,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5535,25 +5531,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5737,6 +5714,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5746,9 +5732,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5769,9 +5754,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -6417,6 +6401,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6700,6 +6688,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -7166,9 +7158,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -7403,23 +7394,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7805,9 +7792,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -8004,13 +7994,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -8310,12 +8293,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9437,9 +9414,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9734,10 +9710,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -10129,11 +10103,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -10226,7 +10197,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -10271,15 +10244,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -10294,7 +10260,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10302,7 +10269,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10463,7 +10435,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10504,18 +10481,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -10553,12 +10526,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10763,8 +10736,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10808,6 +10786,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -11019,11 +11006,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -11130,12 +11117,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11194,7 +11175,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11261,9 +11242,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11567,23 +11548,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -11594,15 +11569,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11789,6 +11762,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11823,6 +11804,10 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr ""
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -12083,17 +12068,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -12135,9 +12118,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -12170,6 +12152,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12570,15 +12559,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -13016,14 +13003,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -13218,7 +13203,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13231,7 +13218,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13525,7 +13514,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -13575,6 +13564,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13655,20 +13656,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -14227,6 +14214,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -14311,9 +14299,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14322,9 +14310,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14334,10 +14322,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14430,9 +14419,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14441,22 +14430,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14576,15 +14557,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -14623,9 +14600,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14670,19 +14646,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -16142,20 +16115,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -16255,8 +16224,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -18239,12 +18208,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18409,8 +18372,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18499,7 +18462,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18531,7 +18509,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18541,7 +18524,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18583,7 +18571,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18607,7 +18601,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18688,7 +18687,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18763,7 +18768,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18777,7 +18787,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18878,7 +18893,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18909,7 +18930,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18953,13 +18980,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -19125,6 +19145,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19838,11 +19866,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19897,8 +19922,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19907,7 +19932,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19936,13 +19965,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -20065,12 +20087,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -21098,13 +21114,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -21136,8 +21145,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -21170,8 +21179,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -21281,11 +21290,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -21548,12 +21554,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22426,13 +22426,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22847,13 +22840,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -23175,9 +23161,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23496,31 +23481,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -23580,12 +23569,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -24264,6 +24255,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24869,11 +24864,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24900,6 +24895,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Verilen değerin tanjantını döndürür."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -25040,20 +25052,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -25123,13 +25121,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -26172,7 +26163,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -27174,11 +27165,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -27205,10 +27198,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -27255,6 +27246,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27476,6 +27473,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27807,21 +27812,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28612,13 +28602,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28763,11 +28746,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -29485,6 +29465,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29677,7 +29661,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29906,8 +29890,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29935,8 +29919,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30093,7 +30077,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -30228,15 +30217,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -30279,8 +30262,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30311,8 +30294,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -30356,11 +30339,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -30527,17 +30507,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30621,17 +30599,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30642,13 +30624,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30685,9 +30660,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30814,13 +30793,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31577,15 +31549,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -31633,6 +31596,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31693,11 +31679,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31712,9 +31695,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31791,7 +31773,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31801,18 +31787,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31964,11 +31966,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -32217,11 +32216,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -32650,6 +32646,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32847,13 +32847,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34700,10 +34693,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34935,22 +34924,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -35094,13 +35067,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -35348,13 +35314,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -35426,9 +35385,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -35465,6 +35423,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35493,9 +35455,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35821,7 +35782,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -36380,6 +36341,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Verilen bir değerin ark-sinüsünü döndürür."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Verilen değerin karekökünün tersini döndürür."
@@ -36401,6 +36367,10 @@ msgid "Returns the map's up direction."
msgstr "Verilen bir değerin ark-sinüsünü döndürür."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Verilen değerin sinüsünü döndürür."
@@ -36441,18 +36411,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36691,9 +36649,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36983,16 +36944,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -37038,7 +36995,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37053,7 +37010,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37066,7 +37023,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37081,17 +37038,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -37101,14 +37058,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -37118,7 +37075,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37827,6 +37784,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37979,11 +37948,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -38150,9 +38116,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -38188,11 +38153,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -38329,8 +38294,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -38364,19 +38329,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -38579,8 +38537,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38704,7 +38662,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38893,6 +38851,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -39419,7 +39419,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39683,8 +39692,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39935,6 +39944,12 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr ""
+"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -40045,6 +40060,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -41008,14 +41030,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -41166,13 +41186,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -41292,6 +41307,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -42037,11 +42056,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -44623,9 +44639,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -45035,6 +45050,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -46332,8 +46352,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46419,8 +46439,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -46508,9 +46528,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47891,12 +47911,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47991,6 +48013,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -48090,7 +48123,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48509,6 +48543,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48527,9 +48567,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -48556,14 +48595,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48733,9 +48764,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -49173,8 +49203,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Verilen değerin karekökünün tersini döndürür."
#: doc/classes/Rect2.xml
msgid ""
@@ -49201,7 +49232,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -49356,12 +49391,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -49430,7 +49459,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49748,9 +49781,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49970,6 +50002,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -50286,9 +50322,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -50483,9 +50522,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -51070,14 +51110,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51675,11 +51713,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51886,18 +51921,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -52353,10 +52376,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52666,16 +52685,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -53003,12 +53012,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -53318,14 +53321,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -53409,17 +53409,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -53482,11 +53477,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53627,8 +53627,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53722,12 +53722,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -55076,9 +55070,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -55254,14 +55248,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55635,6 +55644,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Verilen değerin tanjantını döndürür."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55788,13 +55844,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -56059,7 +56108,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -56108,10 +56162,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -56476,12 +56530,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58887,10 +58956,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58978,7 +59043,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -59256,11 +59322,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -59335,15 +59402,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59932,7 +59996,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60763,17 +60832,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60890,7 +60948,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60916,6 +60975,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60964,9 +61028,9 @@ msgstr "Parametrenin kosinüsünü döndürür."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60977,8 +61041,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -61018,8 +61082,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Verilen değerin karekökünün tersini döndürür."
#: doc/classes/Tree.xml
msgid ""
@@ -61387,11 +61452,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -61425,12 +61489,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62779,12 +62857,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62811,8 +62883,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -63470,6 +63541,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63681,28 +63760,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63730,7 +63805,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Verilen değerin zıt değerini döndürür."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63822,7 +63899,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -64547,13 +64626,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -66311,13 +66383,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66753,8 +66818,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -67028,7 +67093,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -69354,6 +69422,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -69453,12 +69537,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69915,13 +69993,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -70261,16 +70332,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -70319,8 +70383,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -72027,11 +72091,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -72055,6 +72119,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -72160,15 +72232,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -72232,6 +72304,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/uk.po b/doc/translations/uk.po
index c4a4cdbaf5..0eed155e80 100644
--- a/doc/translations/uk.po
+++ b/doc/translations/uk.po
@@ -3,27 +3,29 @@
# Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# Yuri Chornoivan <yurchor@ukr.net>, 2020.
+# Yuri Chornoivan <yurchor@ukr.net>, 2020, 2022.
# Kiev Ball <supermensy2@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Wataru Onuki <bettawat@yahoo.co.jp>, 2020.
# IllusiveMan196 <hamsterrv@gmail.com>, 2021.
# Valerii Bosiak <valerii540@protonmail.com>, 2021.
+# KazanskiyMaks <kazanskiy.maks@gmail.com>, 2022.
+# Vladyslav Anisimov <uniss@ua.fm>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-11-11 16:02+0000\n"
-"Last-Translator: Valerii Bosiak <valerii540@protonmail.com>\n"
+"PO-Revision-Date: 2022-01-29 12:53+0000\n"
+"Last-Translator: Vladyslav Anisimov <uniss@ua.fm>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.9.1-dev\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.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -68,67 +70,84 @@ msgstr "ОпиÑи методів"
#: doc/tools/make_rst.py
#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "ОпиÑи влаÑтивоÑтей"
+msgstr "ОпиÑи ВлаÑтивоÑтей Теми"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "Inherits:"
-msgstr ""
+msgstr "УÑпадковує:"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "Inherited By:"
-msgstr ""
+msgstr "УÑпадковано:"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "(overrides %s)"
-msgstr ""
+msgstr "(перевизначає %s)"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "Default"
-msgstr ""
+msgstr "За замовчуваннÑм"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "Setter"
-msgstr ""
+msgstr "Ð’Ñтановлювач"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "value"
-msgstr ""
+msgstr "значеннÑ"
#: doc/tools/make_rst.py
+#, fuzzy
msgid "Getter"
-msgstr ""
+msgstr "Отримувач"
#: doc/tools/make_rst.py
+#, fuzzy
msgid ""
"This method should typically be overridden by the user to have any effect."
-msgstr ""
+msgstr "Зазвичай, цей метод перевизначаєтьÑÑ ÐºÐ¾Ñ€Ð¸Ñтувачем, щоб він мав вплив."
#: doc/tools/make_rst.py
+#, fuzzy
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Цей метод не має побічних ефектів. Ðе змінює ніÑку змінну екземплÑра об'єкта."
#: doc/tools/make_rst.py
+#, fuzzy
msgid ""
"This method accepts any number of arguments after the ones described here."
-msgstr ""
+msgstr "Цей метод приймає будь-Ñке чиÑло аргументів піÑÐ»Ñ Ð¾Ð¿Ð¸Ñаних тут."
#: doc/tools/make_rst.py
+#, fuzzy
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "Цей метод викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸ типів."
#: doc/tools/make_rst.py
+#, fuzzy
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"Ð”Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ, цей метод не потребує ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð±'єкта, тому він може "
+"бути викликаним напрÑму вказавши назву клаÑу."
#: doc/tools/make_rst.py
msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"Цей метод опиÑує дійÑний оператор, Ð´Ð»Ñ Ð²Ð·Ð°Ñ”Ð¼Ð¾Ð´Ñ–Ñ— з цим типом, Ñк з лівим "
+"операндом."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -199,7 +218,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -211,7 +229,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"Повертає арккоÑÐ¸Ð½ÑƒÑ [code]s[/code] в радіанах. ВикориÑтовуєтьÑÑ Ð´Ð»Ñ "
-"Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÑƒÑ‚Ð° коÑинуÑа [code]s[/code].\n"
+"Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÑƒÑ‚Ð° коÑинуÑа [code]s[/code]. [code]s[/code] повинен знаходитиÑÑŒ у "
+"межах від [code]-1.0[/code] до [code]1.0[/code] (включно), інакше, [method "
+"acos] поверне [constant NAN].\n"
"[codeblock]\n"
"# c дорівнює 0.523599 або 30 градуÑів, Ñкщо конвертувати за допомогою "
"rad2deg(s)\n"
@@ -219,7 +239,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -231,7 +250,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"Повертає аркÑÐ¸Ð½ÑƒÑ [code]s[/code] у радіанах. ВикориÑтовуєтьÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ "
-"кута ÑинуÑа [code]s[/code].\n"
+"кута ÑинуÑа [code]s[/code]. [code]s[/code] повинен бути між [code]-1.0[/"
+"code] і [code]1.0[/code] (включно), інакше, [method asin] поверне [constant "
+"NAN].\n"
"[codeblock]\n"
"# s дорівнює 0.523599 або 30 градуÑів, Ñкщо конвертувати за допомогою "
"rad2deg(s)\n"
@@ -265,25 +286,30 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"ПеревірÑÑ”, чи дорівнює [code]condition[/code] [code]true[/code]. Якщо "
+"ПеревірÑÑ”, чи [code]condition[/code] дорівнює [code]true[/code]. Якщо "
"[code]condition[/code] дорівнює [code]false[/code], буде згенеровано "
-"помилку, Ñ– Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ буде припинено, поки ви не продовжите його. Ð¦Ñ "
-"Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ у діагноÑтичних збірках, або коли гра "
-"запуÑкаєтьÑÑ Ð² редакторі. ВикориÑтовуйте Ñ—Ñ— Ð´Ð»Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики, щоб "
-"переконатиÑÑ, що вираз дорівнює [code]true[/code] протÑгом розробки.\n"
+"помилку. Якщо виконуєтьÑÑ Ñƒ редакторі, проєкт буде також призупинено, поки "
+"ви не продовжите його. Може бути викориÑтано, Ñк більш дієва форма [method "
+"push_error] Ð´Ð»Ñ Ð·Ð²Ñ–Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº розробникам проєкту, або допоміжним "
+"кориÑтувачам.\n"
+"[b]Ðотатка:[/b] З міркувань продуктивноÑті, код вÑередині [method assert] "
+"виконуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ у діагноÑтичних збірках, або коли проєкт виконуєтьÑÑ Ñƒ "
+"редакторі. Ðе викориÑтовуйте код, Ñкий негативно впливає на Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ "
+"[method assert]. Інакше, проєкт буде поводити Ñебе інакше, Ñкщо він буде "
+"екÑпортованим у режимі публікації.\n"
"Якщо задано необов'Ñзковий аргумент [code]message[/code], то він буде "
-"показаний у додаток до Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Â«Assertion failed». Ви можете "
+"показаний у додаток до Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ \"Assertion failed\". Ви можете "
"ÑкориÑтатиÑÑ Ñ†Ð¸Ð¼ Ð´Ð»Ñ Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей щодо того, чому перевірку "
"не було пройдено.\n"
"[codeblock]\n"
-"# ПрипуÑтімо, що ви хочете, щоб швидкіÑть (speed) була між 0 Ñ– 20\n"
-"speed = -10\n"
+"# ПрипуÑтимо, що ви хочете, щоб швидкіÑть (speed) була у межах від 0 до 20.\n"
+"var speed = -10\n"
"assert(speed < 20) # ІÑтина, програма продовжить виконаннÑ\n"
-"assert(speed >= 0) # ХибніÑть, програму буде зупинено\n"
-"assert(speed >= 0 && speed <20) # Ви можете комбінувати два умовних вирази в "
-"одній перевірці\n"
-"assert(speed < 20, \"speed =%f, але Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ñті дорівнює 20\" "
-"%speed) # Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· уточненнÑм подробиць\n"
+"assert(speed >= 0) # Хиба, програму буде зупинено\n"
+"assert(speed >= 0 and speed < 20) # Ви можете об'єднувати два умовних вирази "
+"в одній перевірці\n"
+"assert(speed < 20, \"швидкіÑть = %f, але швидкіÑть має Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñƒ 20\" % "
+"speed) # Показує Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· уточненнÑм подробиць\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -3512,8 +3538,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3872,22 +3898,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4227,11 +4252,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4240,9 +4263,8 @@ msgstr "https://docs.godotengine.org/uk/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4321,6 +4343,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4456,10 +4482,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4888,25 +4910,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5090,6 +5093,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5099,9 +5111,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5122,9 +5133,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5770,6 +5780,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6053,6 +6067,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6525,9 +6543,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6762,23 +6779,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7164,9 +7177,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7363,13 +7379,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7669,12 +7678,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8796,9 +8799,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9093,10 +9095,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9488,11 +9488,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9585,7 +9582,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9630,15 +9629,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9653,7 +9645,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9661,7 +9654,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9822,7 +9820,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9863,18 +9866,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9912,12 +9911,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10122,8 +10121,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10167,6 +10171,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10378,11 +10391,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10489,12 +10502,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10553,7 +10560,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10620,9 +10627,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10926,23 +10933,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10953,15 +10954,13 @@ msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11148,6 +11147,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11182,6 +11189,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11442,17 +11454,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11494,9 +11504,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11529,6 +11538,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11929,15 +11945,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12369,14 +12383,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12571,7 +12583,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12584,7 +12598,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12878,7 +12894,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12928,6 +12944,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13008,20 +13036,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13580,6 +13594,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13665,9 +13680,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13676,9 +13691,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13688,10 +13703,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13784,9 +13800,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13795,22 +13811,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13930,15 +13938,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13977,9 +13981,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14024,19 +14027,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15494,20 +15494,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15607,8 +15603,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17591,12 +17587,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17761,8 +17751,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17851,7 +17841,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17883,7 +17888,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17893,7 +17903,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17935,7 +17950,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17959,7 +17980,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18040,7 +18066,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18115,7 +18147,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18129,7 +18166,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18230,7 +18272,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18261,7 +18309,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18305,13 +18359,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18477,6 +18524,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19190,11 +19245,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19249,8 +19301,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19259,7 +19311,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19288,13 +19344,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19417,12 +19466,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20450,13 +20493,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20488,8 +20524,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20522,8 +20558,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20633,11 +20669,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20900,12 +20933,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21776,13 +21803,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22197,13 +22217,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22525,9 +22538,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22846,31 +22858,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/uk/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22930,12 +22946,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23614,6 +23632,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24215,11 +24237,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24246,6 +24268,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24386,20 +24425,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24469,13 +24494,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25518,7 +25536,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26522,11 +26540,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26553,10 +26573,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26602,6 +26620,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26824,6 +26849,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27155,21 +27188,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27960,13 +27978,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28111,11 +28122,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28833,6 +28841,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29025,7 +29037,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29254,8 +29266,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29283,8 +29295,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29441,7 +29453,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29576,15 +29593,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29627,8 +29638,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29659,8 +29670,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29704,11 +29715,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29875,17 +29883,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29969,17 +29975,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29990,13 +30000,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30033,9 +30036,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30162,13 +30169,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30923,15 +30923,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30979,6 +30970,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31039,11 +31053,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31058,9 +31069,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31137,7 +31147,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31147,18 +31161,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31310,11 +31340,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31563,11 +31590,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31997,6 +32021,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32194,13 +32222,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34047,10 +34068,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34282,22 +34299,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34441,13 +34442,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34696,13 +34690,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34774,9 +34761,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34813,6 +34799,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34841,9 +34831,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35167,7 +35156,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35723,6 +35712,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Повертає аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Повертає одиницю поділену на квадратний корінь з параметра."
@@ -35744,6 +35738,10 @@ msgid "Returns the map's up direction."
msgstr "Повертає аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
@@ -35784,18 +35782,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36034,9 +36020,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36326,16 +36315,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36381,7 +36366,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36396,7 +36381,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36409,7 +36394,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36424,17 +36409,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36444,14 +36429,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36461,7 +36446,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37170,6 +37155,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37322,11 +37319,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37493,9 +37487,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37531,11 +37524,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37672,8 +37665,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37707,19 +37700,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37922,8 +37908,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38047,7 +38033,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38236,6 +38222,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38762,7 +38790,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39026,8 +39063,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39278,6 +39315,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39388,6 +39430,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40345,14 +40394,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40503,13 +40550,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40629,6 +40671,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41374,11 +41420,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43958,9 +44001,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44370,6 +44412,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45667,8 +45714,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45754,8 +45801,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45843,9 +45890,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47226,12 +47273,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47326,6 +47375,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47425,7 +47485,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47844,6 +47905,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47862,9 +47929,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47891,14 +47957,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48063,9 +48121,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48501,8 +48558,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Повертає одиницю поділену на квадратний корінь з параметра."
#: doc/classes/Rect2.xml
msgid ""
@@ -48529,7 +48587,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48684,12 +48746,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48758,7 +48814,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49076,9 +49136,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49298,6 +49357,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49614,9 +49677,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49811,9 +49877,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50398,14 +50465,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -51003,11 +51068,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51214,18 +51276,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51681,10 +51731,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51994,16 +52040,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52332,12 +52368,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52647,16 +52677,13 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/physics/soft_body.html"
-
-#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
msgstr ""
@@ -52738,17 +52765,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52811,11 +52833,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52956,8 +52983,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53051,12 +53078,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54404,9 +54425,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54582,14 +54603,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54963,6 +54999,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Повертає Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55116,13 +55199,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55387,7 +55463,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55436,10 +55517,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55804,12 +55885,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58214,10 +58310,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58306,7 +58398,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58584,11 +58677,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58663,15 +58757,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59260,7 +59351,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60091,17 +60187,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60218,7 +60303,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60244,6 +60330,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60292,9 +60383,9 @@ msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60305,8 +60396,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60346,8 +60437,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Повертає одиницю поділену на квадратний корінь з параметра."
#: doc/classes/Tree.xml
msgid ""
@@ -60715,11 +60807,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60753,12 +60844,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62107,12 +62212,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62139,8 +62238,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62799,6 +62897,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63010,28 +63116,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/uk/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63059,7 +63161,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Повертає значеннÑ, Ñке Ñ” протилежним до Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63151,7 +63255,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63874,13 +63980,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65639,13 +65738,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66081,8 +66173,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66356,7 +66448,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68676,6 +68771,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68775,12 +68886,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69237,13 +69342,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/uk/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69583,16 +69681,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/uk/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69641,8 +69732,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71353,11 +71444,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71381,6 +71472,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71486,15 +71585,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71558,6 +71657,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/vi.po b/doc/translations/vi.po
index f6621f3c4b..1c0c455fec 100644
--- a/doc/translations/vi.po
+++ b/doc/translations/vi.po
@@ -3814,8 +3814,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -4183,20 +4183,20 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
msgstr ""
#: doc/classes/AABB.xml
@@ -4537,9 +4537,8 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
@@ -4549,7 +4548,7 @@ msgstr ""
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
msgstr ""
#: doc/classes/AnimatedSprite.xml
@@ -4631,6 +4630,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4778,10 +4781,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -5210,22 +5209,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5409,6 +5392,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5418,7 +5410,7 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -5440,7 +5432,7 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
@@ -6087,6 +6079,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6370,6 +6366,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6837,7 +6837,7 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
msgstr ""
#: doc/classes/Area.xml
@@ -7073,18 +7073,18 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
msgstr ""
#: doc/classes/Area2D.xml
@@ -7471,9 +7471,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7670,10 +7673,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7973,12 +7972,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -9100,7 +9093,7 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
+msgid "Audio Mic Record Demo"
msgstr ""
#: doc/classes/AudioEffectAmplify.xml
@@ -9396,7 +9389,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
#: doc/classes/AudioEffectDistortion.xml
@@ -9789,7 +9782,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
#: doc/classes/AudioEffectRecord.xml
@@ -9883,7 +9876,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9928,12 +9923,7 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr ""
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
+msgid "Audio Device Changer Demo"
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9949,7 +9939,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9957,7 +9948,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10118,7 +10114,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -10159,14 +10160,13 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
+msgid "Audio Generator Demo"
msgstr ""
#: doc/classes/AudioStream.xml
@@ -10205,12 +10205,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10415,8 +10415,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10460,6 +10465,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10671,11 +10685,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10782,10 +10796,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10844,7 +10854,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10911,9 +10921,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -11217,16 +11227,16 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
@@ -11238,12 +11248,12 @@ msgstr ""
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
msgstr ""
#: doc/classes/Basis.xml
@@ -11431,6 +11441,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11465,6 +11483,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "Biến [code]null[/code] (rỗng)."
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11725,14 +11748,14 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
msgstr ""
#: doc/classes/BoxShape.xml
@@ -11775,7 +11798,7 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
msgstr ""
#: doc/classes/Button.xml
@@ -11809,6 +11832,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -12209,12 +12239,12 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
msgstr ""
#: doc/classes/Camera2D.xml
@@ -12648,11 +12678,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12848,7 +12878,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12861,7 +12893,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -13155,7 +13189,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -13205,6 +13239,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -13285,16 +13331,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13854,6 +13890,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13938,9 +13975,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13949,9 +13986,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13961,10 +13998,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -14057,9 +14095,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -14068,22 +14106,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -14203,11 +14233,10 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
#: doc/classes/CollisionShape.xml
@@ -14247,7 +14276,7 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
msgstr ""
#: doc/classes/CollisionShape2D.xml
@@ -14293,15 +14322,15 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
msgstr ""
#: doc/classes/Color.xml
@@ -15761,15 +15790,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr ""
+#, fuzzy
+msgid "Control node gallery"
+msgstr "Phím Control (Ctrl)."
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
#: doc/classes/Control.xml
@@ -15870,8 +15900,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17854,10 +17884,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -18022,8 +18048,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -18112,7 +18138,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -18144,7 +18185,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18154,7 +18200,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -18196,7 +18247,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -18220,7 +18277,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18301,7 +18363,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18377,7 +18445,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18391,7 +18464,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18492,7 +18570,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18523,7 +18607,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18567,10 +18657,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18736,6 +18822,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19449,7 +19543,7 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19505,8 +19599,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19515,7 +19609,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19544,11 +19642,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19671,10 +19764,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20702,10 +20791,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20737,8 +20822,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20771,8 +20856,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20882,7 +20967,7 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
@@ -21146,10 +21231,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -22021,10 +22102,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22439,10 +22516,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22764,9 +22837,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -23085,24 +23157,31 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
msgstr ""
#: doc/classes/Environment.xml
@@ -23163,12 +23242,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23849,6 +23930,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24450,11 +24535,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24481,6 +24566,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "Trả vỠ[Texture2D] của khung hình được cho."
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24621,14 +24723,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24698,10 +24792,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25744,7 +25834,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26743,11 +26833,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26774,7 +26866,7 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
@@ -26822,6 +26914,12 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -27043,6 +27141,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27374,15 +27480,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -28173,10 +28270,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28321,7 +28414,7 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
#: doc/classes/Image.xml
@@ -29041,6 +29134,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29233,7 +29330,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29462,8 +29559,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29491,8 +29588,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29649,7 +29746,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29784,12 +29886,8 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
#: doc/classes/InputEvent.xml
@@ -29833,8 +29931,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29865,8 +29963,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29910,7 +30008,7 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
#: doc/classes/InputEventAction.xml
@@ -30078,17 +30176,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -30172,17 +30268,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -30193,10 +30293,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30233,9 +30329,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30362,10 +30462,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -31122,12 +31218,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -31174,6 +31264,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31234,7 +31347,7 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
#: doc/classes/Joint.xml
@@ -31250,7 +31363,7 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
msgstr ""
#: doc/classes/Joint.xml
@@ -31328,7 +31441,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31338,18 +31455,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31501,7 +31634,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
#: doc/classes/KinematicBody.xml
@@ -31751,7 +31884,7 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
#: doc/classes/KinematicBody2D.xml
@@ -32181,6 +32314,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32378,10 +32515,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34228,10 +34361,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34463,16 +34592,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34616,10 +34735,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34867,10 +34982,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34942,7 +35053,7 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
@@ -34980,6 +35091,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -35008,7 +35123,7 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
msgstr ""
#: doc/classes/Navigation2D.xml
@@ -35334,7 +35449,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35892,6 +36007,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "Trả vỠ[Texture2D] của khung hình được cho."
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "Trả vỠnghịch đảo căn bậc hai của tham số."
@@ -35913,6 +36033,10 @@ msgid "Returns the map's up direction."
msgstr "Trả vỠ[Texture2D] của khung hình được cho."
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "Trả vỠsin của tham số."
@@ -35953,15 +36077,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr ""
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36200,7 +36315,11 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
@@ -36491,11 +36610,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
msgstr ""
#: doc/classes/Node.xml
@@ -36542,7 +36661,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36557,7 +36676,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36570,7 +36689,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36585,17 +36704,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36605,14 +36724,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36622,7 +36741,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37331,6 +37450,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37483,7 +37614,7 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
#: doc/classes/Node2D.xml
@@ -37651,7 +37782,7 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
msgstr ""
#: doc/classes/NodePath.xml
@@ -37688,11 +37819,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37829,8 +37960,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37864,12 +37995,11 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
#: doc/classes/Object.xml
@@ -38073,8 +38203,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38198,7 +38328,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38387,6 +38517,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38913,7 +39085,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39177,8 +39358,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39429,6 +39610,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39539,6 +39725,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40500,11 +40693,11 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
msgstr ""
#: doc/classes/Panel.xml
@@ -40656,9 +40849,7 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
#: doc/classes/Particles.xml
@@ -40779,6 +40970,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41524,8 +41719,7 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
@@ -44110,7 +44304,7 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
msgstr ""
#: doc/classes/PoolVector2Array.xml
@@ -44521,6 +44715,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45821,8 +46020,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45908,8 +46107,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45997,9 +46196,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47380,12 +47579,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47480,6 +47681,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47579,7 +47791,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47998,6 +48211,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -48016,7 +48235,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
msgstr ""
#: doc/classes/QuadMesh.xml
@@ -48044,11 +48263,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48216,7 +48430,7 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
+msgid "Random number generation"
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
@@ -48655,8 +48869,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "Trả vỠnghịch đảo căn bậc hai của tham số."
#: doc/classes/Rect2.xml
msgid ""
@@ -48683,7 +48898,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48838,10 +49057,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48910,7 +49125,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49228,7 +49447,7 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
msgstr ""
#: doc/classes/Resource.xml
@@ -49449,6 +49668,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49765,7 +49988,11 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -49961,9 +50188,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50548,11 +50776,11 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
msgstr ""
#: doc/classes/RigidBody2D.xml
@@ -51151,7 +51379,7 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
#: doc/classes/RootMotionView.xml
@@ -51359,14 +51587,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51822,10 +52042,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -52135,14 +52351,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52470,10 +52678,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52783,11 +52987,10 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
#: doc/classes/SoftBody.xml
@@ -52874,11 +53077,11 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
#: doc/classes/Spatial.xml
@@ -52942,11 +53145,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -53087,8 +53295,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53182,10 +53390,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54534,9 +54738,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54712,14 +54916,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -55093,6 +55312,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "Trả vỠtan của tham số."
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55246,10 +55512,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55514,7 +55776,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55563,10 +55830,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55931,12 +56198,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58342,10 +58624,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58433,7 +58711,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58711,7 +58990,11 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
#: doc/classes/Thread.xml
@@ -58787,11 +59070,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
msgstr ""
#: doc/classes/TileMap.xml
@@ -59381,7 +59664,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60212,14 +60500,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60336,7 +60616,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60362,6 +60643,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60410,9 +60696,9 @@ msgstr "Trả vỠcôsin của tham số."
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60423,8 +60709,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60464,8 +60750,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "Trả vỠnghịch đảo căn bậc hai của tham số."
#: doc/classes/Tree.xml
msgid ""
@@ -60833,11 +61120,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60871,12 +61157,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62229,10 +62529,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62259,8 +62555,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62918,6 +63213,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -63129,23 +63432,23 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
msgstr ""
#: doc/classes/Viewport.xml
@@ -63174,7 +63477,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "Trả vỠgiá trị đối của tham số."
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63266,7 +63571,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63996,10 +64303,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65758,10 +66061,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66197,8 +66496,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66472,7 +66771,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68797,6 +69099,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68896,10 +69214,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69359,10 +69673,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69700,13 +70010,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69755,8 +70061,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71469,11 +71775,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71497,6 +71803,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71602,15 +71916,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71674,6 +71988,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po
index 94f4b4d5da..fdd36621c7 100644
--- a/doc/translations/zh_CN.po
+++ b/doc/translations/zh_CN.po
@@ -57,11 +57,12 @@
# Cc <2590090025@qq.com>, 2021.
# è‹è½¼ <youwanyuyu@gmail.com>, 2021.
# ErrorDreemurr <diandaokui@qq.com>, 2021.
+# 烧风 <hk-shao@foxmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-12 16:56+0000\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/zh_Hans/>\n"
@@ -70,7 +71,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -1488,7 +1489,7 @@ msgstr ""
"randi() # 返回介于 0 到 2^32 - 1 ä¹‹é—´çš„éšæœºæ•´æ•°\n"
"randi() % 20 # 返回介于 0 到 19ä¹‹é—´çš„éšæœºæ•´æ•°\n"
"randi() % 100 # 返回介于 0 到 99 ä¹‹é—´çš„éšæœºæ•´æ•°\n"
-"randi() % 100 + 1 # 返回介于 0 到 100 ä¹‹é—´çš„éšæœºæ•´æ•°\n"
+"randi() % 100 + 1 # 返回介于 1 到 100 ä¹‹é—´çš„éšæœºæ•´æ•°\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -1900,9 +1901,9 @@ msgstr ""
"[codeblock]\n"
"p = parse_json('[\"a\", \"b\", \"c\"]')\n"
"if typeof(p) == TYPE_ARRAY:\n"
-" print(p[0]) # Prints a\n"
+" print(p[0]) # 输出 a\n"
"else:\n"
-" print(\"unexpected results\")\n"
+" print(\"å‡ºä¹Žæ„æ–™çš„结果\")\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -1918,15 +1919,15 @@ msgid ""
" push_error(\"Invalid JSON: \" + v)\n"
"[/codeblock]"
msgstr ""
-"检查 [code]json[/code] 是有效的JSONæ•°æ®ã€‚如果有效,则返回空字符串,å¦åˆ™è¿”回错"
-"误消æ¯ã€‚\n"
+"检查 [code]json[/code] 是有效的 JSON æ•°æ®ã€‚如果有效,则返回空字符串,å¦åˆ™è¿”回"
+"错误消æ¯ã€‚\n"
"[codeblock]\n"
"j = to_json([1, 2, 3])\n"
"v = validate_json(j)\n"
"if not v:\n"
-" print(\"Valid JSON.\")\n"
+" print(\"有效 JSON。\")\n"
"else:\n"
-" push_error(\"Invalid JSON: \" + v)\n"
+" push_error(\"无效 JSON:\" + v)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -1960,7 +1961,7 @@ msgstr ""
"a = { \"a\": 1, \"b\": 2 }\n"
"print(var2str(a))\n"
"[/codeblock]\n"
-"prints\n"
+"会输出\n"
"[codeblock]\n"
"{\n"
"\"a\": 1,\n"
@@ -2007,18 +2008,18 @@ msgstr ""
"在 [code]min[/code] 和 [code]max[/code] 之间将 [code]value[/code] 循环。\n"
"å¯ç”¨äºŽåˆ›å»ºç±»ä¼¼å¾ªçŽ¯çš„è¡Œä¸ºæˆ–æ— é™æ›²é¢ã€‚\n"
"[codeblock]\n"
-"# Infinite loop between 5.0 and 9.9\n"
+"# 在 5.0 å’Œ 9.9 之间无é™å¾ªçޝ\n"
"value = wrapf(value + 0.1, 5.0, 10.0)\n"
"[/codeblock]\n"
"[codeblock]\n"
-"# Infinite rotation (in radians)\n"
+"# æ— é™æ—‹è½¬ï¼ˆå¼§åº¦ï¼‰\n"
"angle = wrapf(angle + 0.1, 0.0, TAU)\n"
"[/codeblock]\n"
"[codeblock]\n"
-"# Infinite rotation (in radians)\n"
+"# æ— é™æ—‹è½¬ï¼ˆå¼§åº¦ï¼‰\n"
"angle = wrapf(angle + 0.1, -PI, PI)\n"
"[/codeblock]\n"
-"[b]注æ„:[/b] 如果 [code]min[/code] 为 [code]0[/code],则等价于 [method "
+"[b]注æ„:[/b]如果 [code]min[/code] 为 [code]0[/code],则等价于 [method "
"fposmod],因此请改用它。\n"
"通过让用户控制最å°å€¼ï¼Œ[code]wrapf[/code] 比使用 [method fposmod] æ–¹æ³•æ›´çµæ´»ã€‚"
@@ -3562,6 +3563,10 @@ msgid ""
"- Linux: Up to 80 buttons.\n"
"- Windows and macOS: Up to 128 buttons."
msgstr ""
+"引擎所支æŒçš„æœ€å¤§æ¸¸æˆæŽ§åˆ¶å™¨æŒ‰é’®æ•°ã€‚特定平å°ä¸Šçš„实际界é™å¯èƒ½æ›´ä½Žï¼š\n"
+"- Android:最多 36 个按钮。\n"
+"- Linux:最多 80 个按钮。\n"
+"- Windows 和 macOS:最多 128 个按钮。"
#: doc/classes/@GlobalScope.xml
msgid "DualShock circle button."
@@ -4147,9 +4152,10 @@ msgid ""
"or_greater,or_lesser\"[/code]."
msgstr ""
"通过æç¤ºä¸²[code]\"min,max\"[/code] 或[code]\"min,max,step\"[/code]æ¥æç¤ºä¸€ä¸ª"
-"整数或浮点数属性应当è½åœ¨æŒ‡å®šèŒƒå›´å†…。æç¤ºä¸²å¯ä»¥é€‰æ‹©æ€§åœ°åŒ…å« [code]\"or_greater"
-"\"[/code] 与/或 [code]\"or_lesser\"[/code] æ¥å…许手动输入的值超过或低于最大最"
-"å°å€¼ã€‚例如: [code]\"-360,360,1,or_greater,or_lesser\"[/code]。"
+"整数或浮点数属性应当è½åœ¨æŒ‡å®šèŒƒå›´å†…。æç¤ºä¸²å¯ä»¥é€‰æ‹©æ€§åœ°åŒ…å« "
+"[code]\"or_greater\"[/code] 与/或 [code]\"or_lesser\"[/code] æ¥å…许手动输入的"
+"值超过或低于最大最å°å€¼ã€‚例如: [code]\"-360,360,1,or_greater,or_lesser\"[/"
+"code]。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4229,8 +4235,8 @@ msgid ""
"with wildcards like [code]\"*.png,*.jpg\"[/code]."
msgstr ""
"æç¤ºä¸€ä¸ªå­—符串属性是关于一个文件的路径。编辑该属性时会弹出å–得文件路径的文件"
-"å¯¹è¯æ¡†ã€‚此处的æç¤ºæ–‡æœ¬å¯ä»¥æ˜¯ä¸€ç»„带有通é…符的过滤器,例如 [code]\"*.png,*.jpg"
-"\"[/code]。"
+"å¯¹è¯æ¡†ã€‚此处的æç¤ºæ–‡æœ¬å¯ä»¥æ˜¯ä¸€ç»„带有通é…符的过滤器,例如 [code]\"*.png,*."
+"jpg\"[/code]。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4244,8 +4250,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
"æç¤ºä¸€ä¸ªå­—符串属性是关于一个在项目文件夹之外的文件的ç»å¯¹è·¯å¾„。编辑该属性时会"
"弹出å–å¾—æ–‡ä»¶è·¯å¾„çš„æ–‡ä»¶å¯¹è¯æ¡†ã€‚此处的æç¤ºæ–‡æœ¬å¯ä»¥æ˜¯ä¸€ç»„带有通é…符的过滤器,例"
@@ -4609,7 +4615,6 @@ msgid "Axis-Aligned Bounding Box."
msgstr "轴对é½åŒ…围盒。"
#: doc/classes/AABB.xml
-#, fuzzy
msgid ""
"[AABB] consists of a position, a size, and several utility functions. It is "
"typically used for fast overlap tests.\n"
@@ -4618,27 +4623,26 @@ msgid ""
"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
"integer coordinates."
msgstr ""
-"[AABB] 由一个ä½ç½®ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨å‡½æ•°ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
+"[AABB] 由一个ä½ç½®ã€ä¸€ä¸ªå¤§å°å’Œè‹¥å¹²å®žç”¨å‡½æ•°ç»„æˆï¼Œé€šå¸¸ç”¨äºŽå¿«é€Ÿé‡å æµ‹è¯•。\n"
"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚[AABB] çš„ 2D 对应物为 [Rect2]。\n"
-"䏿”¯æŒè´Ÿæ•°çš„ [member size],大多数方法会无法正常工作。请使用 [method abs] 获"
-"å–æ­£æ•°å¤§å°çš„ AABB。\n"
"[b]注æ„:[/b]与 [Rect2] ä¸åŒï¼Œ[AABB] æ²¡æœ‰ä½¿ç”¨æ•´æ•°åæ ‡çš„å˜ä½“。"
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
-msgstr "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
+msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
-msgstr "$DOCS_URL/tutorials/math/vector_math.html"
+#, fuzzy
+msgid "Vector math"
+msgstr "用于二维数学的å‘é‡ã€‚"
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "$DOCS_URL/tutorials/math/vectors_advanced.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -5075,10 +5079,9 @@ msgstr ""
"[code]run[/code] 和 [code]run_normal[/code],将使 [code]run[/code] 动画使用该"
"法线贴图。"
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -5087,8 +5090,8 @@ msgstr "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://godotengine.org/asset-library/asset/515"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -5175,6 +5178,10 @@ msgstr ""
"动画能够使用一个 [SpriteFrames] 资æºåˆ›å»ºï¼Œå¯ä»¥åœ¨ç¼–è¾‘å™¨çš„åŠ¨ç”»å¸§é¢æ¿é…置。"
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr "当剿­£åœ¨æ’­æ”¾åŠ¨ç”»æ—¶è¿”å›ž [code]true[/code] 。"
@@ -5282,11 +5289,11 @@ msgid ""
"For example, an animation with 8 frames, no frame delay and a [code]fps[/"
"code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds."
msgstr ""
-"动画速度,以æ¯ç§’帧数为å•ä½ã€‚此值定义动画两个帧之间的默认时间间隔,并因此基于"
-"[member frames]属性定义动画循环的总体æŒç»­æ—¶é—´ã€‚值为0表示æ¯ç§’没有预定义的帧"
-"æ•°ï¼ŒåŠ¨ç”»å°†æ ¹æ®æ¯ä¸ªå¸§çš„帧延迟播放(请å‚阅[method set_frame_delay])。\n"
-"例如,具有8帧,无帧延迟且[code]fps[/code]值为2的动画将è¿è¡Œ4秒,æ¯å¸§æŒç»­0.5"
-"秒。"
+"动画速度,以æ¯ç§’帧数为å•ä½ã€‚此值定义动画两个帧之间的默认时间间隔,并因此基于 "
+"[member frames] 属性定义动画循环的总体æŒç»­æ—¶é—´ã€‚值为 0 表示æ¯ç§’没有预定义的帧"
+"æ•°ï¼ŒåŠ¨ç”»å°†æ ¹æ®æ¯ä¸ªå¸§çš„帧延迟播放(请å‚阅 [method set_frame_delay])。\n"
+"例如,具有 8 帧,无帧延迟且 [code]fps[/code] 值为 2 的动画将è¿è¡Œ 4 秒,æ¯å¸§æŒ"
+"续 0.5 秒。"
#: doc/classes/AnimatedTexture.xml
msgid ""
@@ -5365,10 +5372,6 @@ msgstr ""
"点上æ‰èƒ½æ’­æ”¾ã€‚åŠ¨ç”»è½¨é“æœ‰ä¸åŒçš„类型,æ¯ä¸ªéƒ½æœ‰è‡ªå·±çš„一套专用方法。å‚阅 [enum "
"TrackType] 查看å¯ç”¨ç±»åž‹ã€‚"
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr "$DOCS_URL/tutorials/animation/index.html"
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr "å‘动画添加轨é“。"
@@ -5872,22 +5875,6 @@ msgstr ""
"在创建主è¦ç”¨äºŽ [AnimationNodeBlendTree] 的节点时,继承该属性,å¦åˆ™åº”改用 "
"[AnimationRootNode]。"
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr "$DOCS_URL/tutorials/animation/animation_tree.html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -6101,12 +6088,22 @@ msgid ""
"- A +add animation to blend with when the blend amount is in the [code][0.0, "
"1.0][/code] range"
msgstr ""
-"添加到 [AnimationNodeBlendTree] 的资æºã€‚æ ¹æ® [code][-1.0, 1.0][/code] 范围内"
-"的值,将三个动画中的两个动画加法混åˆåœ¨ä¸€èµ·ã€‚\n"
+"坿·»åŠ åˆ° [AnimationNodeBlendTree] 的资æºã€‚æ ¹æ® [code][-1.0, 1.0][/code] 范围"
+"内的值,将三个动画中的两个动画加法混åˆåœ¨ä¸€èµ·ã€‚\n"
"这个节点有三个输入。\n"
"- è¦æ·»åŠ åˆ°åŸºç¡€åŠ¨ç”»ä¸­çš„åŠ¨ç”»\n"
-"- 当混åˆé‡åœ¨[code][-1.0,0.0][/code]范围内时,添加动画进行混åˆã€‚\n"
-"- 当混åˆé‡åœ¨[code][0.0,1.0][/code]范围内时,添加动画进行混åˆ"
+"- 当混åˆé‡åœ¨ [code][-1.0,0.0][/code] 范围内时,添加动画进行混åˆã€‚\n"
+"- 当混åˆé‡åœ¨ [code][0.0,1.0][/code] 范围内时,添加动画进行混åˆ"
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+#, fuzzy
+msgid "AnimationTree"
+msgstr "Animation节点。"
#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
#: doc/classes/AnimationNodeBlend2.xml
@@ -6121,8 +6118,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://godotengine.org/asset-library/asset/678"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -6145,8 +6142,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://godotengine.org/asset-library/asset/125"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -6210,7 +6207,7 @@ msgid ""
"You can set the extents of the axis using the [member min_space] and [member "
"max_space]."
msgstr ""
-"è¦æ·»åŠ åˆ° [AnimationNodeBlendTree] 的资æºã€‚\n"
+"坿·»åŠ åˆ° [AnimationNodeBlendTree] 的资æºã€‚\n"
"这是一个虚拟轴,您å¯ä»¥ä½¿ç”¨ [method add_blend_point] åœ¨ä¸Šé¢æ·»åŠ ä»»ä½•ç±»åž‹çš„ "
"[AnimationNode]。\n"
"输出最接近节点当å‰å€¼çš„两个 [AnimationNode] 的线性混åˆã€‚\n"
@@ -6493,7 +6490,7 @@ msgstr "连接æˆåŠŸã€‚"
#: doc/classes/AnimationNodeBlendTree.xml
msgid "The input node is [code]null[/code]."
-msgstr "输入节点为[code]null[/code]。"
+msgstr "输入节点为 [code]null[/code]。"
#: doc/classes/AnimationNodeBlendTree.xml
msgid "The specified input port is out of range."
@@ -6501,7 +6498,7 @@ msgstr "指定的输入端å£å·²å‡ºèŒƒå›´ã€‚"
#: doc/classes/AnimationNodeBlendTree.xml
msgid "The output node is [code]null[/code]."
-msgstr "输出节点为[code]null[/code]。"
+msgstr "输出节点为 [code]null[/code]。"
#: doc/classes/AnimationNodeBlendTree.xml
msgid "Input and output nodes are the same."
@@ -6513,7 +6510,7 @@ msgstr "指定的连接已ç»å­˜åœ¨ã€‚"
#: doc/classes/AnimationNodeOneShot.xml
msgid "Plays an animation once in [AnimationNodeBlendTree]."
-msgstr "在[AnimationNodeBlendTree]中播放一次动画。"
+msgstr "在 [AnimationNodeBlendTree] 中播放一次动画。"
#: doc/classes/AnimationNodeOneShot.xml
msgid ""
@@ -6521,14 +6518,14 @@ msgid ""
"sub-animation and return once it finishes. Blend times for fading in and out "
"can be customized, as well as filters."
msgstr ""
-"è¦æ·»åŠ åˆ°[AnimationNodeBlendTree]的资æºã€‚这个节点将执行一个å­åŠ¨ç”»ï¼Œå¹¶åœ¨å®ŒæˆåŽ"
-"返回。å¯ä»¥è‡ªå®šä¹‰æ·¡å…¥å’Œæ·¡å‡ºçš„æ··åˆæ—¶é—´ï¼Œä»¥åŠè¿‡æ»¤å™¨ã€‚"
+"坿·»åŠ åˆ° [AnimationNodeBlendTree] 的资æºã€‚这个节点将执行一个å­åŠ¨ç”»ï¼Œå¹¶åœ¨å®Œæˆ"
+"åŽè¿”回。å¯ä»¥è‡ªå®šä¹‰æ·¡å…¥å’Œæ·¡å‡ºçš„æ··åˆæ—¶é—´ï¼Œä»¥åŠè¿‡æ»¤å™¨ã€‚"
#: doc/classes/AnimationNodeOneShot.xml
msgid ""
"If [code]true[/code], the sub-animation will restart automatically after "
"finishing."
-msgstr "如果[code]true[/code],å­åŠ¨ç”»å®ŒæˆåŽä¼šè‡ªåЍ釿–°å¼€å§‹ã€‚"
+msgstr "如果为 [code]true[/code],则å­åŠ¨ç”»å®ŒæˆåŽä¼šè‡ªåЍ釿–°å¼€å§‹ã€‚"
#: doc/classes/AnimationNodeOneShot.xml
msgid "The delay after which the automatic restart is triggered, in seconds."
@@ -6545,7 +6542,7 @@ msgstr ""
#: doc/classes/AnimationNodeOutput.xml
msgid "Generic output node to be added to [AnimationNodeBlendTree]."
-msgstr "è¦æ·»åŠ åˆ°[AnimationNodeBlendTree]的通用输出节点。"
+msgstr "坿·»åŠ åˆ° [AnimationNodeBlendTree] 的通用输出节点。"
#: doc/classes/AnimationNodeStateMachine.xml
msgid "State machine for control of animations."
@@ -6895,6 +6892,11 @@ msgstr ""
"æ›´æ–°åŠ¨ç”»çš„ç›®æ ‡å±žæ€§æ˜¯åœ¨å¤„ç†æ—¶è¿›è¡Œçš„。"
#: doc/classes/AnimationPlayer.xml
+#, fuzzy
+msgid "Animation tutorial index"
+msgstr "Animation节点。"
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -7028,13 +7030,13 @@ msgid ""
"[b]Note:[/b] If a looped animation is currently playing, the queued "
"animation will never play unless the looped animation is stopped somehow."
msgstr ""
-"当当å‰åŠ¨ç”»æ’­æ”¾å®Œæ¯•åŽï¼ŒæŽ’队等待播放。\n"
+"将动画加入队列,在当å‰åŠ¨ç”»æ’­æ”¾å®Œæ¯•åŽæ’­æ”¾ã€‚\n"
"[b]注æ„:[/b]å¦‚æžœå½“å‰æ­£åœ¨æ’­æ”¾å¾ªçŽ¯åŠ¨ç”»ï¼Œé™¤éžä»¥æŸç§æ–¹å¼åœæ­¢å¾ªçŽ¯åŠ¨ç”»ï¼Œå¦åˆ™æŽ’队的"
"动画将永远ä¸ä¼šæ’­æ”¾ã€‚"
#: doc/classes/AnimationPlayer.xml
msgid "Removes the animation with key [code]name[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除键å为 [code]name[/code] 的动画。"
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7101,14 +7103,14 @@ msgid ""
"tracks. For more information, see [Animation]."
msgstr ""
"当剿’­æ”¾çš„动画的å称。如果没有动画正在播放,该属性的值是一个空字符串。改å˜è¿™"
-"个值ä¸ä¼šé‡æ–°å¯åŠ¨åŠ¨ç”»ã€‚å…³äºŽæ’­æ”¾åŠ¨ç”»çš„æ›´å¤šä¿¡æ¯è¯·å‚阅[method play]。\n"
-"[b]注æ„:[/b] è™½ç„¶è¿™ä¸ªå±žæ€§å‡ºçŽ°åœ¨æ£€æŸ¥å™¨ä¸­ï¼Œä½†å®ƒä¸æ˜¯ç”¨æ¥ç¼–辑的,也ä¸ä¼šä¿å­˜åœ¨åœº"
+"个值ä¸ä¼šé‡æ–°å¯åŠ¨åŠ¨ç”»ã€‚å…³äºŽæ’­æ”¾åŠ¨ç”»çš„æ›´å¤šä¿¡æ¯è¯·å‚阅 [method play]。\n"
+"[b]注æ„:[/b]è™½ç„¶è¿™ä¸ªå±žæ€§ä¼šå‡ºçŽ°åœ¨æ£€æŸ¥å™¨ä¸­ï¼Œä½†å®ƒä¸æ˜¯ç”¨æ¥ç¼–辑的,也ä¸ä¼šä¿å­˜åœ¨åœº"
"景中。该属性主è¦ç”¨äºŽèŽ·å–当剿’­æ”¾çš„动画,内部用于动画播放轨é“。有关详细信æ¯ï¼Œ"
-"请å‚阅动画[Animation]。"
+"请å‚阅动画 [Animation]。"
#: doc/classes/AnimationPlayer.xml
msgid "The length (in seconds) of the currently being played animation."
-msgstr "当剿­£åœ¨æ’­æ”¾çš„动画的长度(秒)。"
+msgstr "当剿­£åœ¨æ’­æ”¾çš„动画的长度(以秒为å•ä½ï¼‰ã€‚"
#: doc/classes/AnimationPlayer.xml
msgid "The position (in seconds) of the currently playing animation."
@@ -7185,7 +7187,9 @@ msgstr "当动画开始播放时通知。"
msgid ""
"Notifies when the caches have been cleared, either automatically, or "
"manually via [method clear_caches]."
-msgstr "当缓存被清除时,通过[method clear_caches]自动或手动通知。"
+msgstr ""
+"当缓存被清除时通知,å¯ä»¥æ˜¯è‡ªåŠ¨æ¸…é™¤ï¼Œä¹Ÿå¯ä»¥æ˜¯é€šè¿‡ [method clear_caches] 手动清"
+"除。"
#: doc/classes/AnimationPlayer.xml doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7239,6 +7243,11 @@ msgstr ""
"画。"
#: doc/classes/AnimationTree.xml
+#, fuzzy
+msgid "Using AnimationTree"
+msgstr "é‡ç½®æ­¤ [AnimationTreePlayer]。"
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr "手动将动画å‰è¿›æŒ‡å®šçš„æ—¶é—´ï¼ˆå•ä½ä¸ºç§’)。"
@@ -7774,8 +7783,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://godotengine.org/asset-library/asset/127"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -8091,19 +8100,19 @@ msgstr ""
"傿•°ï¼ˆé‡åŠ›ã€é˜»å°¼ï¼‰ï¼Œå¹¶å°†éŸ³é¢‘路由到一个自定义的音频总线。"
#: doc/classes/Area2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
-msgstr "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://godotengine.org/asset-library/asset/121"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://godotengine.org/asset-library/asset/120"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -8393,9 +8402,9 @@ msgid ""
"pushing/removing elements. Using [code]const[/code] will only prevent "
"assigning the constant with another value after it was initialized."
msgstr ""
-"一个通用数组,å¯ä»¥åŒ…å«å¤šä¸ªä»»ä½•类型的元素,å¯ä»¥é€šè¿‡ä»Ž 0 开始的数字索引进行访"
-"问。负数索引å¯ä»¥ç”¨æ¥ä»ŽåŽé¢æ•°èµ·ï¼Œå°±åƒåœ¨ Python 中一样(-1 是最åŽä¸€ä¸ªå…ƒç´ ã€-2 "
-"是倒数第二,等等)。\n"
+"通用数组,å¯ä»¥åŒ…å«å¤šä¸ªä»»ä½•类型的元素,å¯ä»¥é€šè¿‡ä»Ž 0 开始的数字索引进行访问。负"
+"数索引å¯ä»¥ç”¨æ¥ä»ŽåŽé¢æ•°èµ·ï¼Œå°±åƒåœ¨ Python 中一样(-1 是最åŽä¸€ä¸ªå…ƒç´ ã€-2 是倒数"
+"第二,以此类推)。\n"
"[b]Example:[/b]\n"
"[codeblock]\n"
"var array = [\"One\", 2, 3, \"Four\"]\n"
@@ -8416,36 +8425,36 @@ msgstr ""
"[b]注æ„:[/b]数组总是通过引用æ¥ä¼ é€’。è¦èŽ·å¾—ä¸€ä¸ªå¯ä»¥ç‹¬ç«‹äºŽåŽŸå§‹æ•°ç»„è€Œè¢«ä¿®æ”¹çš„æ•°"
"组的副本,请使用 [method duplicate]。\n"
"[b]注æ„:[/b]当用 [code]const[/code] 声明数组时,数组本身ä»ç„¶å¯ä»¥é€šè¿‡å®šä¹‰å„个"
-"索引上的值或推/移元素而被修改。使用 [code]const[/code] åªèƒ½é˜²æ­¢åœ¨åˆå§‹åŒ–常数åŽ"
-"将其赋值给å¦ä¸€ä¸ªå€¼ã€‚"
+"索引上的值或追加/移除元素而被修改。使用 [code]const[/code] åªèƒ½é˜²æ­¢å¸¸é‡åœ¨åˆå§‹"
+"化åŽè¢«èµ‹å€¼ä¸ºå¦ä¸€ä¸ªå€¼ã€‚"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolColorArray]."
-msgstr "从[PoolColorArray]构建一个数组。"
+msgstr "从 [PoolColorArray] 构建一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolVector3Array]."
-msgstr "从一个[PoolVector3Array]构建一个数组。"
+msgstr "从 [PoolVector3Array] 构建一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolVector2Array]."
-msgstr "从[PoolVector2Array]构造一个数组。"
+msgstr "从 [PoolVector2Array] 构造一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolStringArray]."
-msgstr "从[PoolStringArray]构建一个数组。"
+msgstr "从 [PoolStringArray] 构建一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolRealArray]."
-msgstr "从[PoolRealArray]构造一个数组。"
+msgstr "从 [PoolRealArray] 构造一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolIntArray]."
-msgstr "从[PoolIntArray]构建一个数组。"
+msgstr "从 [PoolIntArray] 构建一个数组。"
#: doc/classes/Array.xml
msgid "Constructs an array from a [PoolByteArray]."
-msgstr "从[PoolByteArray]构建一个数组。"
+msgstr "从 [PoolByteArray] 构建一个数组。"
#: doc/classes/Array.xml doc/classes/PoolByteArray.xml
#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml
@@ -8483,7 +8492,7 @@ msgid ""
msgstr ""
"返回数组的最åŽä¸€ä¸ªå…ƒç´ ã€‚如果数组为空,则打å°ä¸€ä¸ªé”™è¯¯å¹¶è¿”回[code]null[/"
"code]。\n"
-"[b]注æ„:[/b] 调用这个函数与写入[code]array[-1][/code]ä¸ä¸€æ ·ï¼Œå¦‚果数组是空"
+"[b]注æ„:[/b]调用这个函数与写入 [code]array[-1][/code] ä¸ä¸€æ ·ï¼Œå¦‚果数组是空"
"的,当从编辑器è¿è¡Œæ—¶ï¼ŒæŒ‰ç´¢å¼•访问将暂åœé¡¹ç›®çš„æ‰§è¡Œã€‚"
#: doc/classes/Array.xml
@@ -8499,7 +8508,7 @@ msgstr ""
"使用二分法查找已有值的索引(该值ä¸å­˜åœ¨æ—¶ï¼Œä¸ºçŽ°æœ‰é¡ºåºä¸‹çš„æ’å…¥ç´¢å¼•ï¼‰ã€‚"
"[code]before[/code] 傿•°æ˜¯å¯é€‰çš„,为 [code]false[/code] 时返回的索引ä½äºŽæ•°ç»„"
"中所有åŒå€¼å…ƒç´ ä¹‹åŽã€‚\n"
-"[b]注æ„:[/b] 在未排åºçš„æ•°ç»„上调用 [method bsearch] 会产生预料之外的行为。"
+"[b]注æ„:[/b]在未排åºçš„æ•°ç»„上调用 [method bsearch] 会产生预料之外的行为。"
#: doc/classes/Array.xml
msgid ""
@@ -8667,18 +8676,22 @@ msgstr ""
"[\"inside\", 7].has(7) # True\n"
"[\"inside\", 7].has(\"7\") # False\n"
"[/codeblock]\n"
-" [b]注æ„:[/b]这等åŒäºŽä½¿ç”¨[code]in[/code]æ“作符,如下所示。\n"
-"[codeblock] \n"
-"# 将评估为 `true`。 \n"
+"[b]注æ„:[/b]这等åŒäºŽä½¿ç”¨ [code]in[/code] æ“作符,如下所示。\n"
+"[codeblock]\n"
+"# 将评估为 `true`。\n"
"if 2 in [2, 4, 6, 8]:\n"
-" pass \n"
+" pass\n"
"[/codeblock]"
#: doc/classes/Array.xml
+#, fuzzy
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
"返回代表这个数组åŠå…¶å†…容的整数哈希值。\n"
"[b]注æ„:[/b]仅仅内容相åŒçš„æ•°ç»„会产生ä¸åŒçš„哈希值, å¿…é¡»è¦å®Œå…¨ä¸€è‡´çš„æ•°ç»„æ‰ä¼šäº§"
@@ -8964,11 +8977,8 @@ msgstr ""
"程åºå¼å‡ ä½•体生æˆï¼Œè¯·å‚阅 [ImmediateGeometry]ã€[MeshDataTool]ã€"
"[SurfaceTool]。\n"
"[b]注æ„:[/b]Godot 对三角形基本网格模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
-"learnopengl.com/Advanced-OpenGL/Face-culling]环绕顺åº[/url]。"
-
-#: doc/classes/ArrayMesh.xml
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
+"learnopengl-cn.github.io/04%20Advanced%20OpenGL/04%20Face%20culling/]环绕顺åº"
+"[/url]。"
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9044,7 +9054,7 @@ msgid ""
"Returns the length in indices of the index array in the requested surface "
"(see [method add_surface_from_arrays])."
msgstr ""
-"返回请求的曲é¢çš„索引数组的长度,以指数为å•ä½ï¼ˆå‚阅[method "
+"返回请求的曲é¢çš„索引数组的长度,以指数为å•ä½ï¼ˆè¯·å‚阅 [method "
"add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml
@@ -9108,7 +9118,7 @@ msgstr ""
#: doc/classes/ArrayMesh.xml
msgid "Default value used for index_array_len when no indices are present."
-msgstr "当没有索引时,index_array_len的默认值。"
+msgstr "没有索引时,index_array_len 的默认值。"
#: doc/classes/ArrayMesh.xml
msgid "Amount of weights/bone indices per vertex (always 4)."
@@ -9166,10 +9176,10 @@ msgid ""
"vertices of each triangle. For lines, the index array is in pairs indicating "
"the start and end of each line."
msgstr ""
-"[PoolIntArray]整数数组,用作引用顶点ã€é¢œè‰²ã€æ³•线ã€åˆ‡çº¿å’Œçº¹ç†çš„索引。所有这些"
+"[PoolIntArray] 整数数组,用作引用顶点ã€é¢œè‰²ã€æ³•线ã€åˆ‡çº¿å’Œçº¹ç†çš„索引。所有这些"
"数组必须具有与顶点数组相åŒçš„元素数é‡ã€‚任何索引都ä¸èƒ½è¶…过顶点数组的大å°ã€‚当这"
-"个索引数组出现时,它使函数进入“索引模å¼â€ï¼Œå…¶ä¸­ç´¢å¼•选择 *i* çš„é¡¶ç‚¹ã€æ³•线ã€åˆ‡"
-"线ã€é¢œè‰²ã€UV 等。这æ„味ç€å¦‚果你想沿ç€ä¸€æ¡è¾¹æœ‰ä¸åŒçš„æ³•线或颜色,需拷è´é¡¶ç‚¹ã€‚\n"
+"个索引数组出现时,它使函数进入“索引模å¼â€ï¼Œç´¢å¼•选择第 *i* ä¸ªé¡¶ç‚¹ã€æ³•线ã€åˆ‡çº¿ã€"
+"颜色ã€UV 等。这æ„味ç€å¦‚果你想沿ç€ä¸€æ¡è¾¹æœ‰ä¸åŒçš„æ³•线或颜色,需拷è´é¡¶ç‚¹ã€‚\n"
"对于三角形,索引数组被解释为三元组,指的是æ¯ä¸ªä¸‰è§’形的顶点。对于线,索引数组"
"是æˆå¯¹çš„ï¼Œè¡¨ç¤ºæ¯æ¡çº¿çš„起点和终点。"
@@ -9328,12 +9338,6 @@ msgstr ""
"å¹¶å¯è¢«æ¸¸æˆé€»è¾‘使用)。请注æ„,与 ARVR 控制器相比,渲染线程å¯ä»¥èŽ·å– HMD 的最新"
"跟踪数æ®ï¼Œä»Žè€Œ ARVRCamera çš„ä½ç½®å¯èƒ½ä¼šæ»žåŽäºŽå¯¹äºŽæ¸²æŸ“çš„ä½ç½®å‡ æ¯«ç§’。"
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr "$DOCS_URL/tutorials/vr/index.html"
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr "表示空间跟踪控制器的空间节点。"
@@ -10776,8 +10780,9 @@ msgstr "音频总线的基础资æºã€‚åœ¨è¯¥èµ„æºæ‰€åº”用的总线上应用音
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://godotengine.org/asset-library/asset/527"
+#, fuzzy
+msgid "Audio Mic Record Demo"
+msgstr "音频频谱演示"
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -11000,8 +11005,8 @@ msgid ""
"Compressor's delay time to stop reducing the signal after the signal level "
"falls below the threshold, in milliseconds. Value can range from 20 to 2000."
msgstr ""
-"压缩器在信å·ç”µå¹³ä½ŽäºŽé˜ˆå€¼åŽï¼Œåœæ­¢é™ä½Žä¿¡å·çš„延迟时间,以毫秒为å•ä½ã€‚数值范围为"
-"20至2000。"
+"压缩器在信å·ç”µå¹³ä½ŽäºŽé˜ˆå€¼åŽï¼Œåœæ­¢é™ä½Žä¿¡å·çš„延迟时间,以毫秒为å•ä½ã€‚å–值范围为 "
+"20 到 2000。"
#: doc/classes/AudioEffectCompressor.xml
msgid "Reduce the sound level using another audio bus for threshold detection."
@@ -11036,7 +11041,7 @@ msgstr ""
msgid ""
"Output percent of original sound. At 0, only delayed sounds are output. "
"Value can range from 0 to 1."
-msgstr "原始声音的输出百分比。0时,åªè¾“出延迟的声音。值的范围为0~1。"
+msgstr "原始声音的输出百分比。为 0 时,åªè¾“出延迟的声音。å–值范围为 0 到 1。"
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], feedback is enabled."
@@ -11048,27 +11053,28 @@ msgstr "å馈延迟时间,å•ä½ä¸ºæ¯«ç§’。"
#: doc/classes/AudioEffectDelay.xml
msgid "Sound level for [code]tap1[/code]."
-msgstr "[code]tap1[/code]的声音级别。"
+msgstr "[code]tap1[/code] 的声音级别。"
#: doc/classes/AudioEffectDelay.xml
msgid ""
"Low-pass filter for feedback, in Hz. Frequencies below this value are "
"filtered out of the source signal."
-msgstr "å馈的低通滤波器,å•ä½ä¸ºHz。低于此值的频率会被æºä¿¡å·è¿‡æ»¤æŽ‰ã€‚"
+msgstr "å馈的低通滤波器,å•ä½ä¸º Hz。低于此值的频率会被æºä¿¡å·è¿‡æ»¤æŽ‰ã€‚"
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], [code]tap1[/code] will be enabled."
-msgstr "如果[code]true[/code],将å¯ç”¨[code]tap1[/code]。"
+msgstr "如果为 [code]true[/code],将å¯ç”¨ [code]tap1[/code]。"
#: doc/classes/AudioEffectDelay.xml
msgid "[code]tap1[/code] delay time in milliseconds."
-msgstr "[code]tap1[/code] 延时,å•ä½ä¸ºæ¯«ç§’。"
+msgstr "[code]tap1[/code] 延迟时间,å•ä½ä¸ºæ¯«ç§’。"
#: doc/classes/AudioEffectDelay.xml
msgid ""
"Pan position for [code]tap1[/code]. Value can range from -1 (fully left) to "
"1 (fully right)."
-msgstr "[code]tap1[/code]的平移ä½ç½®ã€‚值的范围为-1(完全å‘左)至1(完全å‘å³ï¼‰ã€‚"
+msgstr ""
+"[code]tap1[/code] 的平移ä½ç½®ã€‚å–值范围为 -1(完全å‘左)到 1(完全å‘å³ï¼‰ã€‚"
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
@@ -11076,17 +11082,18 @@ msgstr "如果[code]true[/code],将å¯ç”¨[code]tap2[/code]。"
#: doc/classes/AudioEffectDelay.xml
msgid "[b]Tap2[/b] delay time in milliseconds."
-msgstr "[b]Tap2[/b]延迟时间,å•ä½ä¸ºæ¯«ç§’。"
+msgstr "[b]Tap2[/b] 延迟时间,å•ä½ä¸ºæ¯«ç§’。"
#: doc/classes/AudioEffectDelay.xml
msgid "Sound level for [code]tap2[/code]."
-msgstr "[code]tap2[/code]的声音级别。"
+msgstr "[code]tap2[/code] 的声音级别。"
#: doc/classes/AudioEffectDelay.xml
msgid ""
"Pan position for [code]tap2[/code]. Value can range from -1 (fully left) to "
"1 (fully right)."
-msgstr "[code]tap2[/code]的平移ä½ç½®ã€‚值的范围为-1(完全å‘左)至1(完全å‘å³ï¼‰ã€‚"
+msgstr ""
+"[code]tap2[/code] 的平移ä½ç½®ã€‚å–值范围为 -1(完全å‘左)到 1(完全å‘å³ï¼‰ã€‚"
#: doc/classes/AudioEffectDistortion.xml
msgid ""
@@ -11112,8 +11119,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
-msgstr "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
+msgstr ""
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -11489,14 +11496,14 @@ msgid ""
"Adds a pitch-shifting audio effect to an Audio bus.\n"
"Raises or lowers the pitch of original sound."
msgstr ""
-"ä¸ºéŸ³é¢‘æ€»çº¿æ·»åŠ éŸ³è°ƒå˜æ¢çš„音频效果。\n"
-"å‡é«˜æˆ–é™ä½ŽåŽŸå§‹å£°éŸ³çš„éŸ³è°ƒã€‚"
+"ä¸ºéŸ³é¢‘æ€»çº¿æ·»åŠ éŸ³é«˜å˜æ¢çš„音频效果。\n"
+"å‡é«˜æˆ–é™ä½ŽåŽŸå§‹å£°éŸ³çš„éŸ³é«˜ã€‚"
#: doc/classes/AudioEffectPitchShift.xml
msgid ""
"Allows modulation of pitch independently of tempo. All frequencies can be "
"increased/decreased with minimal effect on transients."
-msgstr "å…许独立于速度调制音调。所有频率都å¯ä»¥å¢žåŠ æˆ–å‡å°‘,而对瞬æ€çš„影哿œ€å°ã€‚"
+msgstr "å…许独立于速度调制音高。所有频率都å¯ä»¥å¢žåŠ æˆ–å‡å°‘,而对瞬æ€çš„影哿œ€å°ã€‚"
#: doc/classes/AudioEffectPitchShift.xml
msgid ""
@@ -11526,9 +11533,9 @@ msgid ""
"(infinitely low pitch, inaudible) to [code]16[/code] (16 times higher than "
"the initial pitch)."
msgstr ""
-"è¦ä½¿ç”¨çš„音阶。[code]1.0[/code]是默认的音高,播放的声音没有改å˜ã€‚[member "
-"pitch_scale]的范围从[code]0.0[/code](无é™ä½Žçš„音调,å¬ä¸è§ï¼‰åˆ°[code]16[/code]"
-"(比åˆå§‹éŸ³è°ƒé«˜16å€ï¼‰ã€‚"
+"è¦ä½¿ç”¨çš„音高缩放。[code]1.0[/code] 是默认的音高,声音会按原样播放。[member "
+"pitch_scale] 的范围从 [code]0.0[/code](无é™ä½Žçš„音高,å¬ä¸è§ï¼‰åˆ° [code]16[/"
+"code](比åˆå§‹éŸ³é«˜è¦é«˜ 16 å€ï¼‰ã€‚"
#: doc/classes/AudioEffectPitchShift.xml
#: doc/classes/AudioEffectSpectrumAnalyzer.xml
@@ -11579,12 +11586,10 @@ msgid "Represents the size of the [enum FFT_Size] enum."
msgstr "表示[enum FFT_Size]枚举的大å°ã€‚"
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
msgid "Audio effect used for recording the sound from an audio bus."
-msgstr "用于录制æ¥è‡ªéº¦å…‹é£Žçš„声音的音频效果。"
+msgstr "用于录制æ¥è‡ªéŸ³é¢‘总线的声音的音频效果。"
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
msgid ""
"Allows the user to record the sound from an audio bus. This can include all "
"audio output by Godot when used on the \"Master\" audio bus.\n"
@@ -11593,12 +11598,15 @@ msgid ""
"16-bit, or compressed). It checks whether or not the recording is active, "
"and if it is, records the sound. It then returns the recorded sample."
msgstr ""
-"å…许用户录制æ¥è‡ªéº¦å…‹é£Žçš„声音。它设置和获å–记录音频文件的格å¼ï¼ˆ8ä½ï¼Œ16使ˆ–压"
-"缩)。它检查录音是å¦å¤„于活动状æ€ï¼Œå¦‚果是,则记录声音。然åŽè¿”回记录的样本。"
+"å…许用户录制æ¥è‡ªéŸ³é¢‘总线的声音。在“Masterâ€éŸ³é¢‘æ€»çº¿ä¸Šä½¿ç”¨æ—¶ä¼šåŒ…å«æ‰€æœ‰ Godot 输"
+"出的音频。\n"
+"å¯ä»¥ç”¨äºŽå½•制麦克风(使用 [AudioStreamMicrophone])。\n"
+"它设置和获å–记录音频文件的格å¼ï¼ˆ8ä½ï¼Œ16使ˆ–压缩)。它检查录音是å¦å¤„于活动状"
+"æ€ï¼Œå¦‚果是,则记录声音。然åŽè¿”回记录的样本。"
#: doc/classes/AudioEffectRecord.xml
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
-msgstr "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
+msgstr ""
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -11647,7 +11655,7 @@ msgstr "定义虚拟房间墙å£çš„å射程度。值的范围是0到1。"
msgid ""
"Output percent of original sound. At 0, only modified sound is outputted. "
"Value can range from 0 to 1."
-msgstr "原始声音的输出百分比。0时,åªè¾“出修改åŽçš„声音。值的范围是0~1。"
+msgstr "原始声音的输出百分比。为 0 时,åªè¾“出修改åŽçš„声音。å–值范围是 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid ""
@@ -11684,7 +11692,7 @@ msgstr "æ‰©å¤§æˆ–ç¼©å°æ··å“尾音的立体声图åƒã€‚1表示完全扩大。å€
msgid ""
"Output percent of modified sound. At 0, only original sound is outputted. "
"Value can range from 0 to 1."
-msgstr "输出修改åŽå£°éŸ³çš„百分比。在0时,åªè¾“出原始声音。值的范围为0~1。"
+msgstr "修改åŽå£°éŸ³çš„输出百分比。为 0 时,åªè¾“出原始声音。å–值范围是 0 到 1。"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml
msgid "Audio effect that can be used for real-time audio visualizations."
@@ -11699,7 +11707,9 @@ msgstr ""
"è¿™ç§éŸ³é¢‘效果ä¸å½±å“声音输出,但å¯ä»¥ç”¨äºŽå®žæ—¶éŸ³é¢‘å¯è§†åŒ–。\n"
"使用程åºç”Ÿæˆå£°éŸ³è¯·å‚阅 [AudioStreamGenerator]。"
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr "音频频谱演示"
@@ -11751,13 +11761,9 @@ msgstr ""
"频)以åŠé€šè¿‡è¯­éŸ³æŽ¥å£è¿›è¡Œæ’­æ”¾ã€‚"
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://godotengine.org/asset-library/asset/525"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://godotengine.org/asset-library/asset/528"
+#, fuzzy
+msgid "Audio Device Changer Demo"
+msgstr "音频频谱演示"
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -11772,9 +11778,11 @@ msgstr ""
"[AudioEffect] 效果。"
#: doc/classes/AudioServer.xml
+#, fuzzy
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr "当å‰éŸ³é¢‘输入设备的å称(å‚阅[method capture_get_device_list])。"
#: doc/classes/AudioServer.xml
@@ -11782,8 +11790,13 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr "返回系统上检测到的所有音频输入设备的å称。"
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
-msgstr "设置用于音频采集的音频输入设备。"
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Generates an [AudioBusLayout] using the available buses and effects."
@@ -11853,7 +11866,7 @@ msgstr "返回系统中检测到的所有音频设备的å称。"
#: doc/classes/AudioServer.xml
msgid "Returns the sample rate at the output of the [AudioServer]."
-msgstr "返回[AudioServer]输出的采样率。"
+msgstr "返回 [AudioServer] 输出的采样率。"
#: doc/classes/AudioServer.xml
msgid "Returns the audio driver's output latency."
@@ -11960,8 +11973,13 @@ msgstr "å¯ç”¨éŸ³é¢‘总线的数é‡ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
-msgstr "用于音频输出的当å‰è®¾å¤‡çš„å称(请å‚阅[method get_device_list])。"
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
+msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
@@ -12004,15 +12022,16 @@ msgstr ""
"[AudioStreamSample])和 OGG(通过[AudioStreamOGGVorbis])文件格å¼ã€‚"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
-msgstr "$DOCS_URL/tutorials/audio/audio_streams.html"
+#, fuzzy
+msgid "Audio streams"
+msgstr "音频频谱演示"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://godotengine.org/asset-library/asset/526"
+#, fuzzy
+msgid "Audio Generator Demo"
+msgstr "音频频谱演示"
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -12059,22 +12078,23 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
-"使用的采样率(å•ä½ï¼šHz)。更高的值对CPUè¦æ±‚æ›´é«˜ï¼Œä½†ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ã€‚\n"
-"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有[code]11025[/code]ã€[code]16000[/code]ã€[code]22050[/"
-"code]ã€[code]32000[/code]ã€[code]44100[/code]å’Œ[code]48000[/code]。\n"
-"æ ¹æ®[url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon采样定ç†[/url],当超过40000"
-"赫兹时,人类的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别(因为大多数人åªèƒ½å¬åˆ°~20000赫兹,往往更"
-"少)。如果你è¦ç”Ÿæˆè¾ƒä½ŽéŸ³è°ƒçš„声音,例如语音,则å¯ä»¥ä½¿ç”¨è¾ƒä½Žçš„采样率,例如 "
-"[code]32000[/code] 或 [code]22050[/code],而ä¸ä¼šé™ä½Žè´¨é‡ã€‚"
+"使用的采样率(å•ä½ï¼šHz)。更高的值对 CPU è¦æ±‚æ›´é«˜ï¼Œä½†ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ã€‚\n"
+"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有 [code]11025[/code]ã€[code]16000[/code]ã€"
+"[code]22050[/code]ã€[code]32000[/code]ã€[code]44100[/code]ã€[code]48000[/"
+"code]。\n"
+"æ ¹æ®[url=https://zh.wikipedia.org/wiki/%E9%87%87%E6%A0%B7%E5%AE%9A%E7%90%86]"
+"奈奎斯特–香农采样定ç†[/url],当超过 40000 赫兹时,人类的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别"
+"(因为大多数人åªèƒ½å¬åˆ° ~20000 赫兹,往往更少)。如果你è¦ç”Ÿæˆè¯­éŸ³ç­‰éŸ³é«˜è¾ƒä½Žçš„"
+"声音,则å¯ä»¥ä½¿ç”¨ [code]32000[/code] 或 [code]22050[/code] 等较低的采样率,ä¸"
+"会é™ä½Žè´¨é‡ã€‚"
#: doc/classes/AudioStreamGeneratorPlayback.xml
msgid "Plays back audio generated using [AudioStreamGenerator]."
@@ -12301,9 +12321,14 @@ msgid ""
"seconds."
msgstr "从给定的ä½ç½®[code]from_position[/code]播放音频,以秒为å•ä½ã€‚"
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
-msgstr "这个声音的播放区域。"
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
msgid "Dampens audio over distance with this as an exponent."
@@ -12355,6 +12380,15 @@ msgstr "返回与该[AudioStreamPlayer3D]相关è”çš„[AudioStreamPlayback]对象
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -12526,7 +12560,7 @@ msgstr "当å‰çš„[AudioStream]。"
#: doc/classes/AudioStreamRandomPitch.xml
msgid "The intensity of random pitch variation."
-msgstr "éšæœºéŸ³è°ƒå˜åŒ–的强度。"
+msgstr "éšæœºéŸ³é«˜å˜åŒ–的强度。"
#: doc/classes/AudioStreamSample.xml
msgid "Stores audio data loaded from WAV files."
@@ -12579,7 +12613,8 @@ msgid ""
"sample). This information will be imported automatically from the WAV file "
"if present."
msgstr ""
-"循环起始点(相对于样本开始的样本数)。如果存在此信æ¯ï¼Œå°†è‡ªåŠ¨ä»Ž WAV 文件导入。"
+"循环起始点(相对于样本开始的样本数)。如果 WAV 文件中存在此信æ¯ï¼Œåˆ™å°†è‡ªåЍ坼"
+"入。"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12587,15 +12622,16 @@ msgid ""
"sample). This information will be imported automatically from the WAV file "
"if present."
msgstr ""
-"循环结æŸç‚¹(相对于样本开始的样本数)。如果存在此信æ¯ï¼Œå°†è‡ªåŠ¨ä»Ž WAV 文件导入。"
+"循环结æŸç‚¹ï¼ˆç›¸å¯¹äºŽæ ·æœ¬å¼€å§‹çš„æ ·æœ¬æ•°ï¼‰ã€‚如果 WAV 文件中存在此信æ¯ï¼Œåˆ™å°†è‡ªåЍ坼"
+"入。"
#: doc/classes/AudioStreamSample.xml
msgid ""
"The loop mode. This information will be imported automatically from the WAV "
"file if present. See [enum LoopMode] constants for values."
msgstr ""
-"循环模å¼ã€‚该信æ¯å°†è‡ªåŠ¨ä»ŽWAV文件中导入(如果存在)。有关值,请å‚阅[enum "
-"LoopMode]常é‡ã€‚"
+"循环模å¼ã€‚如果 WAV 文件中存在此信æ¯ï¼Œåˆ™å°†è‡ªåŠ¨å¯¼å…¥ã€‚å–值请å‚阅 [enum "
+"LoopMode] 常é‡ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12604,34 +12640,35 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
"æ··åˆè¿™ä¸ªéŸ³é¢‘çš„é‡‡æ ·çŽ‡ã€‚æ›´é«˜çš„æ•°å€¼éœ€è¦æ›´å¤šçš„å­˜å‚¨ç©ºé—´ï¼Œä½†ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ã€‚\n"
-"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有[code]11025[/code]ã€[code]16000[/code]ã€[code]22050[/"
-"code]ã€[code]32000[/code]ã€[code]44100[/code],以åŠ[code]48000[/code]。\n"
-"æ ¹æ®[url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon采样定ç†[/url],当超过40000"
-"赫兹时,对于人的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别(因为大多数人åªèƒ½å¬åˆ°~20000赫兹,往往更"
-"少)。如果你使用低音调的声音,如语音,较低的采样率,如[code]32000[/code]或"
-"[code]22050[/code]å¯èƒ½æ˜¯å¯ç”¨çš„,没有质é‡ä¸Šçš„æŸå¤±ã€‚"
+"在游æˆä¸­ï¼Œå¸¸ç”¨çš„采样率有 [code]11025[/code]ã€[code]16000[/code]ã€"
+"[code]22050[/code]ã€[code]32000[/code]ã€[code]44100[/code]ã€[code]48000[/"
+"code]。\n"
+"æ ¹æ®[url=https://zh.wikipedia.org/wiki/%E9%87%87%E6%A0%B7%E5%AE%9A%E7%90%86]"
+"奈奎斯特–香农采样定ç†[/url],当超过 40000 赫兹时,人类的å¬è§‰æ²¡æœ‰è´¨é‡ä¸Šçš„差别"
+"(因为大多数人åªèƒ½å¬åˆ° ~20000 赫兹,往往更少)。如果你è¦ä½¿ç”¨è¯­éŸ³ç­‰éŸ³é«˜è¾ƒä½Žçš„"
+"声音,则å¯ä»¥ä½¿ç”¨ [code]32000[/code] 或 [code]22050[/code] 等较低的采样率,ä¸"
+"会é™ä½Žè´¨é‡ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid "If [code]true[/code], audio is stereo."
-msgstr "如果[code]true[/code],音频为立体声。"
+msgstr "如果为 [code]true[/code],则音频为立体声。"
#: doc/classes/AudioStreamSample.xml
msgid "8-bit audio codec."
-msgstr "8ä½éŸ³é¢‘ç¼–è§£ç å™¨ã€‚"
+msgstr "8 ä½éŸ³é¢‘ç¼–è§£ç å™¨ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid "16-bit audio codec."
-msgstr "16ä½éŸ³é¢‘ç¼–è§£ç å™¨ã€‚"
+msgstr "16 ä½éŸ³é¢‘ç¼–è§£ç å™¨ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid "Audio is compressed using IMA ADPCM."
@@ -12646,8 +12683,7 @@ msgid ""
"Audio loops the data between [member loop_begin] and [member loop_end], "
"playing forward only."
msgstr ""
-"音频循环播放 [member loop_begin] å’Œ [member loop_end] 之间的数æ®ï¼Œåªå‘剿’­"
-"放。"
+"音频在 [member loop_begin] å’Œ [member loop_end] 之间循环数æ®ï¼Œä»…å‘剿’­æ”¾ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12669,8 +12705,8 @@ msgid ""
"accessed in your shader scripts through the "
"[code]texture(SCREEN_TEXTURE, ...)[/code] function."
msgstr ""
-"å°†å±å¹•çš„æŸä¸ªåŒºåŸŸï¼ˆæˆ–整个å±å¹•)å¤åˆ¶åˆ°ç¼“冲区,以便å¯ä»¥é€šè¿‡"
-"[code]texture(SCREEN_TEXTURE,...)[/code]函数在ç€è‰²å™¨è„šæœ¬ä¸­å¯¹å…¶è¿›è¡Œè®¿é—®ã€‚"
+"å°†å±å¹•çš„æŸä¸ªåŒºåŸŸï¼ˆæˆ–整个å±å¹•)å¤åˆ¶åˆ°ç¼“冲区,以便通过 "
+"[code]texture(SCREEN_TEXTURE, ...)[/code] 函数在ç€è‰²å™¨è„šæœ¬ä¸­å¯¹å…¶è¿›è¡Œè®¿é—®ã€‚"
#: doc/classes/BackBufferCopy.xml
msgid ""
@@ -12688,10 +12724,10 @@ msgstr ""
"用于对当å‰å±å¹•显示进行åŽå°ç¼“冲的节点。 BackBufferCopy 节点中定义的区域与其覆"
"ç›–å±å¹•çš„å†…å®¹ä¸€èµ·ç¼“å†²ï¼Œæˆ–è€…æ ¹æ®æ‹·è´æ¨¡å¼è®¾ç½®çš„æ•´ä¸ªå±å¹•进行缓冲。在ç€è‰²å™¨è„šæœ¬ä¸­"
"使用 [code]texture(SCREEN_TEXTURE, ...)[/code] 函数æ¥è®¿é—®ç¼“冲区。\n"
-"[b]注æ„:[/b] 由于该节点继承自 [Node2D]ï¼Œè€Œéž [Control],锚点和边è·å°†ä¸ä¼šåº”用"
-"于从 [Control] 派生的å­èŠ‚ç‚¹ã€‚è¿™åœ¨è°ƒæ•´çª—å£å¤§å°æ—¶å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ã€‚ä¸ºé¿å…è¿™ç§æƒ…"
-"况,请将 [Control] 派生节点作为 [i]åŒçº§[/i] 添加到 BackBufferCopy 节点,而ä¸"
-"是将它们添加为å­èŠ‚ç‚¹ã€‚"
+"[b]注æ„:[/b]由于该节点继承自 [Node2D] è€Œéž [Control],锚点和边è·å°†ä¸ä¼šåº”用于"
+"从 [Control] 派生的å­èŠ‚ç‚¹ã€‚è¿™åœ¨è°ƒæ•´çª—å£å¤§å°æ—¶å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ã€‚ä¸ºé¿å…è¿™ç§æƒ…况,"
+"请将 [Control] 派生节点添加为 BackBufferCopy 节点的[i]åŒçº§[/i],ä¸è¦å°†å®ƒä»¬æ·»"
+"加为其å­èŠ‚ç‚¹ã€‚"
#: doc/classes/BackBufferCopy.xml
msgid "Buffer mode. See [enum CopyMode] constants."
@@ -12718,7 +12754,7 @@ msgstr "BackBufferCopy 缓冲一个矩形区域。"
#: doc/classes/BackBufferCopy.xml
msgid "BackBufferCopy buffers the entire screen."
-msgstr "BackBufferCopyå¯ä»¥ç¼“冲整个å±å¹•。"
+msgstr "BackBufferCopy 缓冲整个å±å¹•。"
#: doc/classes/BakedLightmap.xml
msgid "Prerendered indirect light map for a scene."
@@ -12747,10 +12783,6 @@ msgstr ""
"看到效果。"
#: doc/classes/BakedLightmap.xml
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12822,8 +12854,9 @@ msgstr ""
"象。"
#: doc/classes/BakedLightmap.xml
+#, fuzzy
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr "å置值,用于å‡å°‘æ•èŽ·çš„å…«å‰æ ‘中的光传播é‡ã€‚"
#: doc/classes/BakedLightmap.xml
@@ -12835,7 +12868,7 @@ msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-"如果烘焙åŽçš„网格没有UV2的尺寸æç¤ºï¼Œè¿™ä¸ªå€¼å°†è¢«ç”¨æ¥ç²—略计算出åˆé€‚的光照贴图尺"
+"如果烘焙åŽçš„网格没有 UV2 的尺寸æç¤ºï¼Œè¿™ä¸ªå€¼å°†è¢«ç”¨æ¥ç²—略计算出åˆé€‚的光照贴图尺"
"寸。"
#: doc/classes/BakedLightmap.xml
@@ -12901,12 +12934,13 @@ msgid "The calculated light data."
msgstr "计算出的光照数æ®ã€‚"
#: doc/classes/BakedLightmap.xml
+#, fuzzy
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
-"å†³å®šåœ¨ä¸æ­£ç¡®çš„光照烘烤中æ¯ä¸€ä¸ªçº¹ç†å…ƒç´ çš„采样é‡ã€‚å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­é…ç½®æ¯ä¸ªè´¨é‡"
+"å†³å®šåœ¨ä¸æ­£ç¡®çš„光照烘焙中æ¯ä¸€ä¸ªçº¹ç†å…ƒç´ çš„采样é‡ã€‚å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­é…ç½®æ¯ä¸ªè´¨é‡"
"级别的采样é‡ã€‚"
#: doc/classes/BakedLightmap.xml
@@ -12937,13 +12971,13 @@ msgid ""
"lightmap banding even when using the GLES2 backend or if [member "
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-"如果 [code]true[/code],则以高动æ€èŒƒå›´æ ¼å¼ (EXR) 存储光照贴图纹ç†ã€‚如果 "
+"如果为 [code]true[/code],则以高动æ€èŒƒå›´æ ¼å¼ï¼ˆEXR)存储光照贴图纹ç†ã€‚如果为 "
"[code]false[/code],则将光照贴图纹ç†å­˜å‚¨åœ¨ä½ŽåЍæ€èŒƒå›´çš„ PNG 图åƒä¸­ã€‚è¿™å¯ä»¥è®¾ç½®"
"为 [code]false[/code] 以å‡å°‘ç£ç›˜å ç”¨ï¼Œä½†è¶…过 1.0 的光照值将被é™åˆ¶ï¼Œä½ å¯èƒ½ä¼šçœ‹"
"到因精度é™ä½Žè€Œå¯¼è‡´çš„æ¡çº¹ã€‚\n"
-"[b]注æ„:[/b] å°† [member use_hdr] 设置为 [code]true[/code] å³ä½¿ä½¿ç”¨ GLES2 åŽ"
-"端或 [member ProjectSettings.rendering/quality/depth/hdr] 为 [code]false,也"
-"会é™ä½Žå…‰ç…§è´´å›¾æ¡çº¹[/code]。"
+"[b]注æ„:[/b]å°† [member use_hdr] 设置为 [code]true[/code] å¯ä»¥é™ä½Žå…‰ç…§è´´å›¾çš„"
+"æ¡çº¹ï¼Œå³ä½¿ä½¿ç”¨çš„æ˜¯ GLES2 åŽç«¯æˆ– [member ProjectSettings.rendering/quality/"
+"depth/hdr] 为 [code]false[/code]。"
#: doc/classes/BakedLightmap.xml
msgid "The lowest bake quality mode. Fastest to calculate."
@@ -12959,7 +12993,7 @@ msgstr "æ›´é«˜çš„çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
#: doc/classes/BakedLightmap.xml
msgid "The highest bake quality mode. Takes the longest to calculate."
-msgstr "æœ€é«˜çš„çƒ˜çƒ¤è´¨é‡æ¨¡å¼ã€‚éœ€è¦æœ€é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
+msgstr "æœ€é«˜çš„çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚éœ€è¦æœ€é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
#: doc/classes/BakedLightmap.xml
msgid "Baking was successful."
@@ -12987,11 +13021,11 @@ msgstr "生æˆçš„光照贴图尺寸过大。"
#: doc/classes/BakedLightmap.xml
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
-msgstr "有些网格包å«[code][0,1][/code]范围以外的UV2值。"
+msgstr "æœ‰äº›ç½‘æ ¼åŒ…å« [code][0,1][/code] 范围以外的 UV2 值。"
#: doc/classes/BakedLightmap.xml
msgid "Returns if user cancels baking."
-msgstr "å¦‚æžœç”¨æˆ·å–æ¶ˆäº†çƒ˜çƒ¤ï¼Œåˆ™è¿”回。"
+msgstr "返回用户是å¦å–消了烘焙。"
#: doc/classes/BakedLightmap.xml
msgid ""
@@ -13267,17 +13301,18 @@ msgstr ""
"更多信æ¯è¯·é˜…è¯»æ–‡æ¡£ä¸­çš„ã€ŠçŸ©é˜µå’Œå˜æ¢ã€‹ä¸€æ–‡ã€‚"
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
-msgstr "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
+msgstr ""
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
-msgstr "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+#, fuzzy
+msgid "Using 3D transforms"
+msgstr "使用 3D å˜æ¢æ—¶ä½¿ç”¨æ­¤é€‰é¡¹ã€‚"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://godotengine.org/asset-library/asset/584"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -13288,13 +13323,13 @@ msgstr "https://godotengine.org/asset-library/asset/584"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://godotengine.org/asset-library/asset/676"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://godotengine.org/asset-library/asset/583"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -13512,6 +13547,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr "创建一个指定尺寸的ä½å›¾ï¼Œç”¨[code]false[/code]填充。"
@@ -13553,6 +13596,11 @@ msgstr ""
"grow_mask] å½±å“。"
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "使用颜色 [code]color[/code] 填充图åƒã€‚"
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr "å°†ä½å›¾ä¸­æŒ‡å®šä½ç½®çš„元素设置为指定值。"
@@ -13778,7 +13826,7 @@ msgstr ""
"\n"
"func shoot():\n"
" if can_shoot:\n"
-" pass # Perform shooting actions here.\n"
+" pass # 在此执行射击。\n"
"[/codeblock]\n"
"下é¢çš„代ç åªæœ‰åœ¨ä¸¤ä¸ªæ¡ä»¶éƒ½æ»¡è¶³çš„æƒ…况下æ‰ä¼šäº§ç”Ÿå­å¼¹ï¼šåŠ¨ä½œâ€œshootâ€è¢«æŒ‰ä¸‹ï¼Œå¹¶ä¸”如"
"果[code]can_shoot[/code]是[code]true[/code]。\n"
@@ -13842,7 +13890,7 @@ msgstr ""
#: doc/classes/BoxContainer.xml
msgid "Base class for box containers."
-msgstr "ç›’å­å®¹å™¨çš„基类。"
+msgstr "ç›’å¼å®¹å™¨çš„基类。"
#: doc/classes/BoxContainer.xml
msgid ""
@@ -13891,15 +13939,15 @@ msgstr "3D ç›’å­å½¢çŠ¶ï¼Œå¯ä»¥æ˜¯ [PhysicsBody] 或 [Area] çš„å­é¡¹ã€‚"
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://godotengine.org/asset-library/asset/675"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://godotengine.org/asset-library/asset/126"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -13959,8 +14007,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://godotengine.org/asset-library/asset/677"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -13999,6 +14047,13 @@ msgstr ""
"[code]hseparation[/code] ä»¥åŠæ‰€ä½¿ç”¨çš„ [StyleBox] çš„ [code]content_margin_*[/"
"code] 属性。"
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr "按钮的文字,将显示在按钮的区域内。"
@@ -14499,13 +14554,13 @@ msgstr ""
"get_camera_screen_center] æ¥èŽ·å–å®žé™…åæ ‡ã€‚"
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://godotengine.org/asset-library/asset/112"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://godotengine.org/asset-library/asset/110"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -14768,9 +14823,9 @@ msgid ""
"example, use [code]Vector2(0.5, 0.5)[/code] for a 2× zoom-in, and "
"[code]Vector2(4, 4)[/code] for a 4× zoom-out."
msgstr ""
-"相机相对于视窗的缩放比例。大于[code]Vector2(1,1)[/code]的值会缩å°å†…容,而"
-"较å°çš„值会起到放大镜的作用。例如,将[code]Vector2(0.5,0.5)[/code]放大2å€ï¼Œ"
-"ç„¶åŽå°†[code]Vector2(4,4)[/code]用于4å€ç¼©å°ã€‚"
+"相机相对于视窗的缩放比例。大于 [code]Vector2(1, 1)[/code] 的值会缩å°å†…容,而"
+"较å°çš„值会起到放大镜的作用。例如,将 [code]Vector2(0.5, 0.5)[/code] 放大 2 "
+"å€ï¼Œç„¶åŽå°† [code]Vector2(4, 4)[/code] 用于 4 å€ç¼©å°ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14955,7 +15010,7 @@ msgid ""
"Which image within the [CameraFeed] we want access to, important if the "
"camera image is split in a Y and CbCr component."
msgstr ""
-"我们è¦è®¿é—® [CameraFeed] 中的哪个图åƒï¼Œå¦‚果相机图åƒè¢«åˆ†å‰²æˆ Y å’Œ CbCr 组件,这"
+"我们è¦è®¿é—® [CameraFeed] 中的哪个图åƒï¼Œå¦‚果相机图åƒè¢«åˆ†å‰²æˆ Y å’Œ CbCr 分é‡ï¼Œè¿™"
"一点很é‡è¦ã€‚"
#: doc/classes/CanvasItem.xml
@@ -15008,12 +15063,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
+msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
-msgstr "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15271,8 +15326,10 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr "è¿”å›žæ­¤é¡¹ç›®ç”»å¸ƒçš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
-msgstr "返回鼠标的全局ä½ç½®ã€‚"
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the global transform matrix of this item."
@@ -15284,8 +15341,10 @@ msgid ""
msgstr "è¿”å›žæ­¤é¡¹ç›®ç›¸å¯¹äºŽç”»å¸ƒçš„å…¨å±€å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
-msgstr "返回鼠标相对于此项的ä½ç½®çš„ä½ç½®ã€‚"
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
+msgstr ""
#: doc/classes/CanvasItem.xml
msgid "Returns the transform matrix of this item."
@@ -15337,9 +15396,9 @@ msgid ""
"also visible. If any antecedent is hidden, this node will not be visible in "
"the scene tree."
msgstr ""
-"如果该节点ä½äºŽ[SceneTree]中,并且其[member visible]属性为[code]true[/code],"
-"å¹¶ä¸”å…¶æ‰€æœ‰å‰æå‡å¯è§ï¼Œåˆ™è¿”回[code]true[/code]。如果任何先决æ¡ä»¶è¢«éšè—,则该节"
-"点在场景树中将ä¸å¯è§ã€‚"
+"如果该节点ä½äºŽ [SceneTree] 中,并且其 [member visible] 属性为 [code]true[/"
+"code],并且其所有上层节点也å‡å¯è§ï¼Œåˆ™è¿”回 [code]true[/code]。如果任何上层节点"
+"被éšè—,则该节点在场景树中将ä¸å¯è§ã€‚"
#: doc/classes/CanvasItem.xml
msgid "Assigns [code]screen_point[/code] as this node's new local transform."
@@ -15625,12 +15684,13 @@ msgid ""
msgstr ""
"画布绘图层。[CanvasLayer] 的直接或间接å­çº§çš„ [CanvasItem] 节点将在该层中绘"
"制。层是一个决定绘制顺åºçš„æ•°å­—索引。默认 2D 场景的渲染索引为 0,因此索引为 "
-"-1 的 [CanvasLayer] 会在其下方绘制,索引为 1 的则会在其上方绘制。这对于 "
-"HUD(在 1+ 层或更高层中)或背景(在 -1 层或更低层中)éžå¸¸æœ‰ç”¨ã€‚"
+"-1 的 [CanvasLayer] 会在其下方绘制,索引为 1 的则会在其上方绘制。这对于 HUD"
+"(在 1+ 层或更高层中)或背景(在 -1 层或更低层中)éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
-msgstr "$DOCS_URL/tutorials/2d/canvas_layers.html"
+#, fuzzy
+msgid "Canvas layers"
+msgstr "画布绘图层。"
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -15683,6 +15743,19 @@ msgstr "图层的缩放。"
msgid "The layer's transform."
msgstr "å›¾å±‚çš„å˜æ¢ã€‚"
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+#, fuzzy
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr "当VisibilityNotifier退出[Camera]的视图时触å‘。"
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr "给整个画布上色。"
@@ -15768,17 +15841,6 @@ msgid ""
msgstr ""
"通过在此对象上设置å„ç§å±žæ€§ï¼Œå¯ä»¥æŽ§åˆ¶å•个字符在[RichTextEffect]中的显示方å¼ã€‚"
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -16429,6 +16491,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr "返回对象的 [RID]。"
@@ -16523,9 +16586,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"CollisionObject3D 所在的物ç†å±‚。碰撞对象å¯ä»¥å­˜åœ¨äºŽ 32 个ä¸åŒå±‚中的一个或多"
@@ -16539,9 +16602,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"CollisionObject3D 扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ 32 个ä¸åŒå±‚中的一个或多个。"
@@ -16558,12 +16621,16 @@ msgstr ""
"如果[code]true[/code],[CollisionObject] 将在鼠标拖过其形状时继续接收输入事"
"件。"
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
+#, fuzzy
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
-"如果[code]true[/code],[CollisionObject] 的形状将对 [RayCast] åšå‡ºå应。"
+"如果[code]true[/code]ï¼Œè¿™ä¸ªå¯¹è±¡æ˜¯å¯æ‹¾å–çš„ã€‚ä¸€ä¸ªå¯æ‹¾å–的对象å¯ä»¥æ£€æµ‹é¼ æ ‡æŒ‡é’ˆçš„"
+"进入/离开,如果鼠标在里é¢ï¼Œå°±æŠ¥å‘Šè¾“å…¥äº‹ä»¶ã€‚è¦æ±‚至少有一个 "
+"[code]collision_layer[/code] ä½è¢«è®¾ç½®ã€‚"
#: doc/classes/CollisionObject.xml
msgid ""
@@ -16673,9 +16740,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"这个 CollisionObject2D 所在的物ç†å±‚。碰撞对象å¯ä»¥å­˜åœ¨äºŽ 32 个ä¸åŒå±‚中的一个或"
@@ -16689,9 +16756,9 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"这个 CollisionObject2D 所扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ 32 个ä¸åŒå±‚中的一个或"
@@ -16702,17 +16769,6 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-"如果[code]true[/code]ï¼Œè¿™ä¸ªå¯¹è±¡æ˜¯å¯æ‹¾å–çš„ã€‚ä¸€ä¸ªå¯æ‹¾å–的对象å¯ä»¥æ£€æµ‹é¼ æ ‡æŒ‡é’ˆçš„"
-"进入/离开,如果鼠标在里é¢ï¼Œå°±æŠ¥å‘Šè¾“å…¥äº‹ä»¶ã€‚è¦æ±‚至少有一个 "
-"[code]collision_layer[/code] ä½è¢«è®¾ç½®ã€‚"
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -16858,12 +16914,12 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
-msgstr "$DOCS_URL/tutorials/physics/physics_introduction.html"
+#, fuzzy
+msgid "Physics introduction"
+msgstr "三次æ’值."
#: doc/classes/CollisionShape.xml
msgid ""
@@ -16906,8 +16962,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://godotengine.org/asset-library/asset/113"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -16968,16 +17024,16 @@ msgstr ""
"color_constants.png]Color 常é‡é€ŸæŸ¥è¡¨[/url]"
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://godotengine.org/asset-library/asset/517"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://godotengine.org/asset-library/asset/146"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://godotengine.org/asset-library/asset/133"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -17140,10 +17196,10 @@ msgid ""
"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
"[/codeblock]"
msgstr ""
-"返回å色[code](1-r,1-g,1-b,a)[/code]。\n"
+"返回å色 [code](1 - r, 1 - g, 1 - b, a)[/code]。\n"
"[codeblock]\n"
"var color = Color(0.3, 0.4, 0.9)\n"
-"var inverted_color = color.inverted() # Equivalent to Color(0.7, 0.6, 0.1)\n"
+"var inverted_color = color.inverted() # 等价于 Color(0.7, 0.6, 0.1)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17152,8 +17208,8 @@ msgid ""
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过在æ¯ä¸ªç»„件上è¿è¡Œ[method @GDScript.is_equal_approx],如果这个颜色和"
-"[code]color[/code]近似相等,返回[code]true[/code]。"
+"如果这个颜色和 [code]color[/code] 近似相等,则返回[code]true[/code],方法是对"
+"æ¯ä¸ªåˆ†é‡è¿è¡Œ [method @GDScript.is_equal_approx]。"
#: doc/classes/Color.xml
msgid ""
@@ -17998,16 +18054,16 @@ msgid ""
"sliders.\n"
"[b]Note:[/b] Cannot be enabled if raw mode is on."
msgstr ""
-"如果[code]true[/code],则å…许使用“色相/饱和度/å€¼â€æ»‘å—编辑颜色。\n"
+"如果为 [code]true[/code],则å…许使用“色相/饱和度/å€¼â€æ»‘å—编辑颜色。\n"
"[b]注æ„:[/b]如果å¯ç”¨äº†åŽŸå§‹æ¨¡å¼ï¼Œåˆ™æ— æ³•å¯ç”¨ã€‚"
#: doc/classes/ColorPicker.xml
msgid "If [code]true[/code], the \"add preset\" button is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨ \"添加预置 \"按钮。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨â€œæ·»åŠ é¢„è®¾â€æŒ‰é’®ã€‚"
#: doc/classes/ColorPicker.xml
msgid "If [code]true[/code], saved color presets are visible."
-msgstr "如果[code]true[/code],则ä¿å­˜çš„颜色预设å¯è§ã€‚"
+msgstr "如果为 [code]true[/code],则ä¿å­˜çš„颜色预设å¯è§ã€‚"
#: doc/classes/ColorPicker.xml
msgid ""
@@ -18016,9 +18072,9 @@ msgid ""
"tinting without darkening or rendering sprites in HDR).\n"
"[b]Note:[/b] Cannot be enabled if HSV mode is on."
msgstr ""
-"如果[code]true[/code],则å…许颜色R,G,B分é‡å€¼è¶…过1.0,该值å¯ç”¨äºŽéœ€è¦å®ƒçš„æŸäº›"
-"特殊æ“作(例如ç€è‰²è€Œä¸ä¼šä½¿HDRå˜æš—æˆ–渲染精çµï¼‰ã€‚\n"
-"[b]注æ„:[/b]如果å¯ç”¨äº†HSV模å¼ï¼Œåˆ™æ— æ³•å¯ç”¨ã€‚"
+"如果为 [code]true[/code],则å…许颜色 Rã€Gã€B 分é‡å€¼è¶…过 1.0,这些值å¯ç”¨äºŽéœ€è¦"
+"它的æŸäº›ç‰¹æ®Šæ“作(例如ç€è‰²è€Œä¸ä¼šä½¿ HDR å˜æš—æˆ–渲染精çµï¼‰ã€‚\n"
+"[b]注æ„:[/b]如果å¯ç”¨äº† HSV 模å¼ï¼Œåˆ™æ— æ³•å¯ç”¨ã€‚"
#: doc/classes/ColorPicker.xml
msgid "Emitted when the color is changed."
@@ -18735,16 +18791,17 @@ msgstr ""
"[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/code] 方法。"
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
-msgstr "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
+msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "$DOCS_URL/tutorials/ui/control_node_gallery.html"
+#, fuzzy
+msgid "Control node gallery"
+msgstr "Control 键。"
#: doc/classes/Control.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
+msgstr ""
#: doc/classes/Control.xml
msgid ""
@@ -18861,8 +18918,8 @@ msgstr ""
"场景树中预先存在的节点,å¯ä»¥å¤åˆ¶å®ƒå¹¶ä¼ é€’å¤åˆ¶çš„实例)。当返回 [code]null[/"
"code] æˆ–éžæŽ§ä»¶èŠ‚ç‚¹æ—¶ï¼Œå°†ä½¿ç”¨é»˜è®¤å·¥å…·æç¤ºã€‚\n"
"返回的节点将作为å­èŠ‚ç‚¹æ·»åŠ åˆ° [PopupPanel]ï¼Œå› æ­¤ä½ åº”è¯¥åªæä¾›è¯¥é¢æ¿çš„内容。该 "
-"[PopupPanel] å¯ä»¥ä½¿ç”¨ [method Theme.set_stylebox] 为类型 [code]\"TooltipPanel"
-"\"[/code] 设置主题,å‚阅 [member hint_tooltip] 示例。\n"
+"[PopupPanel] å¯ä»¥ä½¿ç”¨ [method Theme.set_stylebox] 为类型 "
+"[code]\"TooltipPanel\"[/code] 设置主题,å‚阅 [member hint_tooltip] 示例。\n"
"[b]注æ„:[/b]工具æç¤ºç¼©å°åˆ°æœ€å°å°ºå¯¸ã€‚如果你想确ä¿å®ƒå®Œå…¨å¯è§ï¼Œéœ€å°†å…¶ [member "
"rect_min_size] 设置为éžé›¶å€¼ã€‚\n"
"自定义构建节点的使用示例:\n"
@@ -18890,7 +18947,6 @@ msgstr ""
"[method Node._unhandled_input]或[method Node._unhandled_key_input]的节点。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme [Color] with the specified [code]name[/"
"code]. Local overrides always take precedence when fetching theme items for "
@@ -18902,35 +18958,34 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
"使用指定的 [code]name[/code] 为主题 [Color] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
-"时,本地覆盖项始终优先。无法删除覆盖项,但å¯ä»¥ä½¿ç”¨ç›¸åº”的默认值覆盖它。\n"
-"å‚阅[method get_color]。\n"
-"[b]覆盖标签颜色并其åŽé‡ç½®çš„示例:[/b]\n"
+"时,本地覆盖项始终优先。\n"
+"å¦è¯·å‚阅 [method get_color]ã€[method remove_color_override]。\n"
+"[b]覆盖标签颜色并其åŽé‡ç½®çš„示例:[/b]\n"
"[codeblock]\n"
"# ç»™å®šå­æ ‡ç­¾èŠ‚ç‚¹\"MyLabel\",用自定义值覆盖其字体颜色。\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# é‡ç½®å­æ ‡ç­¾çš„字体颜色。\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme constant with the specified [code]name[/"
"code]. Local overrides always take precedence when fetching theme items for "
"the control.\n"
"See also [method get_constant], [method remove_constant_override]."
msgstr ""
-"为指定 [code]name[/code] 的主题ç€è‰²å™¨åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°"
-"覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。"
+"为指定 [code]name[/code] 的主题常é‡åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°è¦†"
+"盖项始终优先。\n"
+"å¦è¯·å‚阅 [method get_constant]ã€[method remove_constant_override]。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme [Font] with the specified [code]name[/"
"code]. Local overrides always take precedence when fetching theme items for "
@@ -18941,11 +18996,12 @@ msgid ""
"See also [method get_font]."
msgstr ""
"使用指定的 [code]name[/code] 为主题 [Font] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
-"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"时,本地覆盖项始终优先。\n"
+"[b]注æ„:[/b]为覆盖项设 [code]null[/code] 值å¯å°†å…¶åˆ é™¤ã€‚该行为已废弃,将在 "
+"4.0 ä¸­ç§»é™¤ï¼Œè¯·æ¢æˆ [method remove_font_override]。\n"
"å‚阅[method get_font]。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme icon with the specified [code]name[/"
"code]. Local overrides always take precedence when fetching theme items for "
@@ -18956,11 +19012,12 @@ msgid ""
"See also [method get_icon]."
msgstr ""
"为指定 [code]name[/code] çš„ä¸»é¢˜å›¾æ ‡åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œæœ¬åœ°è¦†"
-"盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"盖项始终优先。\n"
+"[b]注æ„:[/b]为覆盖项设 [code]null[/code] 值å¯å°†å…¶åˆ é™¤ã€‚该行为已废弃,将在 "
+"4.0 ä¸­ç§»é™¤ï¼Œè¯·æ¢æˆ [method remove_icon_override]。\n"
"å‚阅[method get_icon]。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme shader with the specified [code]name[/"
"code]. Local overrides always take precedence when fetching theme items for "
@@ -18969,12 +19026,12 @@ msgid ""
"value. This behavior is deprecated and will be removed in 4.0, use [method "
"remove_shader_override] instead."
msgstr ""
-"使用指定的 [code]name[/code] 为主题 [Font] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
-"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
-"å‚阅[method get_font]。"
+"使用指定的 [code]name[/code] 为主题ç€è‰²å™¨åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹æ—¶ï¼Œ"
+"本地覆盖项始终优先。\n"
+"[b]注æ„:[/b]为覆盖项设 [code]null[/code] 值å¯å°†å…¶åˆ é™¤ã€‚该行为已废弃,将在 "
+"4.0 ä¸­ç§»é™¤ï¼Œè¯·æ¢æˆ [method remove_shader_override]。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Creates a local override for a theme [StyleBox] with the specified "
"[code]name[/code]. Local overrides always take precedence when fetching "
@@ -18998,7 +19055,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"为主题 [StyleBox] 创建å为 [code]name[/code] çš„æœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
-"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"时,本地覆盖项始终优先。\n"
+"[b]注æ„:[/b]为覆盖项设 [code]null[/code] 值å¯å°†å…¶åˆ é™¤ã€‚该行为已废弃,将在 "
+"4.0 ä¸­ç§»é™¤ï¼Œè¯·æ¢æˆ [method remove_stylebox_override]。\n"
"å‚阅 [method get_stylebox]。\n"
"[b]通过å¤åˆ¶æ¥ä¿®æ”¹ StyleBox 中的属性的示例:[/b]\n"
"[codeblock]\n"
@@ -19489,37 +19548,31 @@ msgid ""
msgstr "放弃焦点。其他控件将无法接收键盘输入。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Removes a theme override for a [Color] with the given [code]name[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除å为 [code]name[/code] 的主题 [Color] 覆盖项。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Removes a theme override for a constant with the given [code]name[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除å为 [code]name[/code] 的主题常é‡è¦†ç›–项。"
#: doc/classes/Control.xml
-#, fuzzy
msgid "Removes a theme override for a [Font] with the given [code]name[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除å为 [code]name[/code] 的主题 [Font] 覆盖项。"
#: doc/classes/Control.xml
-#, fuzzy
msgid "Removes a theme override for an icon with the given [code]name[/code]."
-msgstr "移除按键[code]name[/code]的动画。"
+msgstr "移除å为 [code]name[/code] 的主题图标覆盖项。"
#: doc/classes/Control.xml
-#, fuzzy
msgid "Removes a theme override for a shader with the given [code]name[/code]."
-msgstr "返回带有给定[code]id[/code]的项的索引。"
+msgstr "移除å为 [code]name[/code] 的主题ç€è‰²å™¨è¦†ç›–项。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Removes a theme override for a [StyleBox] with the given [code]name[/code]."
-msgstr "返回带有给定[code]id[/code]的项的索引。"
+msgstr "移除å为 [code]name[/code] 的主题 [StyleBox] 覆盖项。"
#: doc/classes/Control.xml
msgid ""
@@ -20200,7 +20253,6 @@ msgstr ""
"mouse_entered]。"
#: doc/classes/Control.xml
-#, fuzzy
msgid ""
"Emitted when the mouse leaves the control's [code]Rect[/code] area, provided "
"its [member mouse_filter] lets the event reach it.\n"
@@ -20216,10 +20268,17 @@ msgid ""
" # Not hovering over area.\n"
"[/codeblock]"
msgstr ""
-"当鼠标离开控件的[code]Rect[/code]区域时触å‘,åªè¦å…¶[member mouse_filter]å…许"
-"事件到达。\n"
-"[b]注æ„:[/b] 如果鼠标进入一个å­[Control]节点,å³ä½¿é¼ æ ‡å…‰æ ‡ä»ç„¶åœ¨çˆ¶"
-"[code]Rect[/code]区域内,[signal mouse_exited]也将触å‘。"
+"当鼠标离开控件的 [code]Rect[/code] 区域时触å‘,åªè¦å…¶ [member mouse_filter] "
+"å…许事件到达。\n"
+"[b]注æ„:[/b]å¦‚æžœé¼ æ ‡è¿›å…¥ä¸€ä¸ªå­ [Control] 节点,å³ä½¿é¼ æ ‡å…‰æ ‡ä»ç„¶åœ¨çˆ¶ "
+"[code]Rect[/code] 区域内,[signal mouse_exited] 也将触å‘。\n"
+"如果你想检查鼠标是å¦çœŸæ­£ç¦»å¼€äº†è¯¥åŒºåŸŸï¼Œæ— è§†ä¸Šå±‚节点,å¯ä»¥ä½¿ç”¨è¿™æ ·çš„代ç ï¼š\n"
+"[codeblock]\n"
+"func _on_mouse_exited():\n"
+" if not Rect2(Vector2(), rect_size)."
+"has_point(get_local_mouse_position()):\n"
+" # 没有悬åœåœ¨æ­¤åŒºåŸŸã€‚\n"
+"[/codeblock]"
#: doc/classes/Control.xml
msgid "Emitted when the control changes size."
@@ -21057,11 +21116,11 @@ msgstr "将粒å­çš„Y轴与其速度方å‘对é½ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/ParticlesMaterial.xml
msgid "If [code]true[/code], particles will not move on the z axis."
-msgstr "如果[code]true[/code],则粒å­å°†ä¸ä¼šåœ¨z轴上移动。"
+msgstr "如果为 [code]true[/code],则粒å­å°†ä¸ä¼šåœ¨ z 轴上移动。"
#: doc/classes/CPUParticles.xml doc/classes/ParticlesMaterial.xml
msgid "If [code]true[/code], particles rotate around Y axis by [member angle]."
-msgstr "如果[code]true[/code],粒å­ç»•Y轴旋转[member angle]。"
+msgstr "如果为 [code]true[/code],则粒å­å°†ç»• Y 轴旋转 [member angle]。"
#: doc/classes/CPUParticles.xml
msgid ""
@@ -21445,10 +21504,6 @@ msgstr ""
"å‚阅[Particles2D],它通过硬件加速æä¾›ç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在旧设备上è¿è¡Œã€‚\n"
"[b]注æ„:[/b] 其与[Particles2D]ä¸åŒï¼Œå¯è§æ€§çŸ©å½¢æ˜¯å³æ—¶ç”Ÿæˆçš„,ä¸éœ€è¦ç”¨æˆ·é…置。"
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -21503,11 +21558,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"用于[member texture]属性的法线贴图。\n"
-"[b]注æ„:[/b] Godot希望法线贴图使用X +,Y-å’ŒZ +åæ ‡ã€‚请å‚阅[url=http://wiki."
-"polycount.com/wiki/"
-"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url],以比"
-"较æµè¡Œå¼•æ“ŽæœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"用于 [member texture] 属性的法线贴图。\n"
+"[b]注æ„:[/b]Godot 希望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚请å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该页[/url],了解æµè¡Œ"
+"å¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/CPUParticles2D.xml
msgid ""
@@ -21672,8 +21727,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -21803,8 +21858,23 @@ msgid "A CSG Box shape."
msgstr "CSG ç›’å­å½¢çŠ¶ã€‚"
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
-msgstr "该节点å…许您使用 CSG 系统创建一个盒å­ã€‚"
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
+msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
msgid "Depth of the box measured from the center of the box."
@@ -21827,6 +21897,7 @@ msgid "A CSG node that allows you to combine other CSG modifiers."
msgstr "å…许您组åˆå…¶ä»– CSG 修改器的 CSG 节点。"
#: modules/csg/doc_classes/CSGCombiner.xml
+#, fuzzy
msgid ""
"For complex arrangements of shapes, it is sometimes needed to add structure "
"to your CSG nodes. The CSGCombiner node allows you to create this structure. "
@@ -21835,7 +21906,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
"å¯¹äºŽå¤æ‚的形状排列,有时需è¦å‘CSG节点添加结构体。CSGCombiner节点å…许你创建这"
"ç§ç»“构体。该节点å°è£…了其å­èŠ‚ç‚¹çš„CSGæ“ä½œçš„ç»“æžœã€‚é€šè¿‡è¿™ç§æ–¹å¼ï¼Œå¯ä»¥å¯¹ä½œä¸ºä¸€ä¸ª"
@@ -21850,8 +21926,13 @@ msgstr "CSG 圆柱形状。"
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
-msgstr "该节点å…许您创建用于CSG系统的圆柱(或圆锥体)。"
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
@@ -21894,10 +21975,14 @@ msgstr "使用网格资æºçš„CSG网格形状。"
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"æ­¤CSG节点å…许您将任何网格资æºç”¨ä½œCSG形状,åªè¦å®ƒæ˜¯å°é—­çš„,ä¸è‡ªç›¸äº¤ï¼Œä¸åŒ…å«å†…"
-"部é¢å¹¶ä¸”没有连接到两个以上é¢çš„è¾¹å³å¯ã€‚"
#: modules/csg/doc_classes/CSGMesh.xml
msgid "The [Material] used in drawing the CSG shape."
@@ -21924,8 +22009,13 @@ msgstr "拉伸2D多边形形状以创建3D网格。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
-msgstr "挤出一组 2D 点以快速创建å„ç§ 3D 网格。"
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22026,8 +22116,14 @@ msgstr ""
"å•ä½ï¼Œå°†è¿›è¡Œå¹³é“ºã€‚当设置为0时,纹ç†å标将与几何图形完全匹é…,没有平铺。"
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
-msgstr "定义挤出的二维多边形的点数组。"
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
+msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid "If [code]true[/code], applies smooth shading to the extrusions."
@@ -22110,10 +22206,13 @@ msgstr "CSG基元的基类。"
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
-"å„ç§CSG原语的父类。它包å«å®ƒä»¬ä¹‹é—´é€šç”¨çš„代ç å’ŒåŠŸèƒ½ã€‚ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ã€‚而是使用从其"
-"继承的å„ç§ç±»ä¹‹ä¸€ã€‚"
#: modules/csg/doc_classes/CSGPrimitive.xml
msgid "Invert the faces of the mesh."
@@ -22126,8 +22225,13 @@ msgstr "CSG基类。"
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
-msgstr "这是CSG基类,å¯ä¸ºGodot中的å„个CSG节点æä¾›CSGæ“作支æŒã€‚"
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
#: doc/classes/SoftBody.xml
@@ -22247,8 +22351,14 @@ msgid "A CSG Sphere shape."
msgstr "CSGçƒå½¢å½¢çŠ¶ã€‚"
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
-msgstr "该节点å…许您创建一个供CSG系统使用的çƒä½“。"
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
msgid "The material used to render the sphere."
@@ -22280,8 +22390,14 @@ msgid "A CSG Torus shape."
msgstr "CSG圆环形状。"
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
-msgstr "该节点å…许您创建用于CSG系统的环é¢ã€‚"
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
msgid "The inner radius of the torus."
@@ -22329,10 +22445,6 @@ msgstr ""
"å¦è¯·å‚阅[GodotSharp]。"
#: modules/mono/doc_classes/CSharpScript.xml
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr "返回脚本的新实例。"
@@ -22522,6 +22634,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -22854,8 +22974,8 @@ msgid ""
"bounds, the function sends an error to the console, and returns [code](0, 0)"
"[/code]."
msgstr ""
-"返回顶点的ä½ç½®[code]idx[/code]ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯"
-"ä¿¡æ¯ï¼Œå¹¶è¿”回[code](0,0)[/code]。"
+"返回顶点 [code]idx[/code] çš„ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™"
+"误信æ¯ï¼Œå¹¶è¿”回 [code](0, 0)[/code]。"
#: doc/classes/Curve2D.xml
msgid ""
@@ -22869,12 +22989,12 @@ msgid ""
"function sends an error to the console, and returns [code](0, 0)[/code]."
msgstr ""
"返回顶点 [code]idx[/code] 和顶点 [code]idx + 1[/code] 之间的ä½ç½®ï¼Œå…¶ä¸­ "
-"[code]t[/code] 控制该点是第一个顶点 ([code]t = 0.0[/code])ã€æœ€åŽä¸€ä¸ªé¡¶ç‚¹ "
-"([code]t = 1.0[/code]),还是介于两者之间。范围外的[code]t[/code]的值"
-"([code]0.0 >= t <=1[/code])会产生奇怪但å¯é¢„测的结果。\n"
-"如果[code]idx[/code]超出边界,则截断到第一个或最åŽä¸€ä¸ªé¡¶ç‚¹ï¼Œè€Œ[code]t[/code]"
-"åˆ™è¢«å¿½ç•¥ã€‚å¦‚æžœæ›²çº¿æ²¡æœ‰ç‚¹ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ï¼Œå¹¶è¿”回 [code](0,0)[/"
-"code]。"
+"[code]t[/code] 控制该点是第一个顶点([code]t = 0.0[/code]ï¼‰ã€æœ€åŽä¸€ä¸ªé¡¶ç‚¹"
+"([code]t = 1.0[/code]),还是介于两者之间。范围([code]0.0 >= t <=1[/code])"
+"外的 [code]t[/code] 的值会产生奇怪但å¯é¢„测的结果。\n"
+"如果 [code]idx[/code] 超出边界,则截断到第一个或最åŽä¸€ä¸ªé¡¶ç‚¹ï¼Œè€Œ [code]t[/"
+"code] åˆ™è¢«å¿½ç•¥ã€‚å¦‚æžœæ›²çº¿æ²¡æœ‰ç‚¹ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ï¼Œå¹¶è¿”回 [code](0, "
+"0)[/code]。"
#: doc/classes/Curve2D.xml
msgid ""
@@ -23044,8 +23164,8 @@ msgid ""
"bounds, the function sends an error to the console, and returns [code](0, 0, "
"0)[/code]."
msgstr ""
-"返回顶点的ä½ç½® [code]idx[/code]ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯"
-"ä¿¡æ¯ï¼Œå¹¶è¿”回 [code](0,0,0)[/code]。"
+"返回顶点 [code]idx[/code] çš„ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºè¾¹ç•Œï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™"
+"误信æ¯ï¼Œå¹¶è¿”回 [code](0, 0, 0)[/code]。"
#: doc/classes/Curve3D.xml
msgid ""
@@ -23149,7 +23269,7 @@ msgstr ""
#: doc/classes/CurveTexture.xml
msgid "A texture that shows a curve."
-msgstr "ä¸€ç§æ˜¾ç¤ºæ›²çº¿çš„纹ç†ã€‚"
+msgstr "显示曲线的纹ç†ã€‚"
#: doc/classes/CurveTexture.xml
msgid ""
@@ -23477,8 +23597,8 @@ msgstr ""
"一个数值。"
#: doc/classes/Dictionary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
-msgstr "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
+msgstr ""
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -23548,9 +23668,10 @@ msgid ""
msgstr "如果字典具有给定数组中的所有键,则返回 [code]true[/code] 。"
#: doc/classes/Dictionary.xml
+#, fuzzy
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -23559,14 +23680,17 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
"返回一个代表字典内容的哈希整数值。这å¯ä»¥ç”¨æ¥æ¯”较字典的值。\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
-"# The line below prints `true`, whereas it would have printed `false` if "
-"both variables were compared directly.\n"
+"# 下é¢è¿™ä¸€è¡Œä¼šè¾“出 `true`,而如果直接比较这两个å˜é‡å°±ä¼šè¾“出 `false`。\n"
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]注æ„:[/b]具有相åŒé”®/值但顺åºä¸åŒçš„字典将有ä¸åŒçš„哈希值。"
@@ -23599,11 +23723,6 @@ msgstr ""
"å¯ä»¥ç”¨ä½œç¦»åœºæ™¯å¾ˆè¿œã€å…·æœ‰å¼ºçƒˆå¼ºåº¦çš„ç¯å…‰ï¼Œæ¨¡æ‹Ÿå¤ªé˜³å…‰æˆ–月光。DirectionalLight å˜"
"æ¢çš„ä¸–ç•Œç©ºé—´åæ ‡ï¼ˆåŽŸç‚¹ï¼‰ä¼šè¢«å¿½ç•¥ã€‚åªä¼šç”¨åŸºæ¥ç¡®å®šå…‰çº¿çš„æ–¹å‘。"
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -23769,10 +23888,6 @@ msgstr ""
" print(\"å°è¯•访问路径时出错。\")\n"
"[/codeblock]"
-#: doc/classes/Directory.xml doc/classes/File.xml
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr "$DOCS_URL/tutorials/scripting/filesystem.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -24266,7 +24381,7 @@ msgid ""
msgstr ""
"字体轮廓的颜色。\n"
"[b]注æ„:[/b]建议将此值ä¿ç•™ä¸ºé»˜è®¤å€¼ï¼Œä»¥ä¾¿æ‚¨å¯ä»¥åœ¨å„个控件中对其进行调整。例"
-"如,如果在此处将轮廓设为黑色,则无法使用Labelçš„å­—ä½“è½®å»“è°ƒåˆ¶ä¸»é¢˜é¡¹æ¥æ›´æ”¹å…¶é¢œ"
+"如,如果在此处将轮廓设为黑色,则无法使用 Label çš„å­—ä½“è½®å»“è°ƒåˆ¶ä¸»é¢˜é¡¹æ¥æ›´æ”¹å…¶é¢œ"
"色。"
#: doc/classes/DynamicFont.xml
@@ -24432,14 +24547,15 @@ msgstr ""
msgid ""
"Adds an iOS bundle file from the given [code]path[/code] to the exported "
"project."
-msgstr "从给定的 [code]path[/code] 添加一个iOSæ†ç»‘文件到导出的项目。"
+msgstr "从给定的 [code]path[/code] 添加一个 iOS æ†ç»‘文件到导出的项目。"
#: doc/classes/EditorExportPlugin.xml
msgid ""
"Adds a C++ code to the iOS export. The final code is created from the code "
"appended by each active export plugin."
msgstr ""
-"å°†C++ä»£ç æ·»åŠ åˆ°iOSå¯¼å‡ºä¸­ã€‚æœ€ç»ˆçš„ä»£ç æ˜¯ç”±æ¯ä¸ªæ¿€æ´»çš„导出æ’件附加的代ç åˆ›å»ºçš„。"
+"å°† C++ ä»£ç æ·»åŠ åˆ° iOS å¯¼å‡ºä¸­ã€‚æœ€ç»ˆçš„ä»£ç æ˜¯ç”±æ¯ä¸ªæ¿€æ´»çš„导出æ’件附加的代ç åˆ›å»º"
+"的。"
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -24470,7 +24586,7 @@ msgstr "为 iOS 导出添加链接器标志。"
#: doc/classes/EditorExportPlugin.xml
msgid "Adds content for iOS Property List files."
-msgstr "为iOS属性列表文件添加内容。"
+msgstr "为 iOS 属性列表文件添加内容。"
#: doc/classes/EditorExportPlugin.xml
msgid "Adds a static lib from the given [code]path[/code] to the iOS project."
@@ -24505,7 +24621,7 @@ msgstr ""
msgid ""
"To be called inside [method _export_file]. Skips the current file, so it's "
"not included in the export."
-msgstr "在[method _export_file]ä¸­è°ƒç”¨ã€‚è·³è¿‡å½“å‰æ–‡ä»¶ï¼Œå› æ­¤å®ƒä¸åŒ…括在导出中。"
+msgstr "在 [method _export_file] ä¸­è°ƒç”¨ã€‚è·³è¿‡å½“å‰æ–‡ä»¶ï¼Œå› æ­¤å®ƒä¸åŒ…括在导出中。"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24532,7 +24648,7 @@ msgstr ""
#: doc/classes/EditorFeatureProfile.xml
msgid "Returns the specified [code]feature[/code]'s human-readable name."
-msgstr "返回指定的[code]feature[/code]çš„å¯è¯»å称。"
+msgstr "返回指定的 [code]feature[/code] çš„å¯è¯»å称。"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24540,8 +24656,8 @@ msgid ""
"is disabled. When disabled, the class won't appear in the Create New Node "
"dialog."
msgstr ""
-"如果[code]class_name[/code]指定的类被ç¦ç”¨ï¼Œè¿”回[code]true[/code]。当类被ç¦ç”¨"
-"时,该类将ä¸ä¼šå‡ºçŽ°åœ¨åˆ›å»ºæ–°èŠ‚ç‚¹çš„å¯¹è¯æ¡†ä¸­ã€‚"
+"如果 [code]class_name[/code] 指定的类被ç¦ç”¨ï¼Œè¿”回 [code]true[/code]。当类被ç¦"
+"用时,该类将ä¸ä¼šå‡ºçŽ°åœ¨â€œåˆ›å»ºæ–° Nodeâ€å¯¹è¯æ¡†ä¸­ã€‚"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24550,9 +24666,9 @@ msgid ""
"appear in the Create New Node dialog but the inspector will be read-only "
"when selecting a node that extends the class."
msgstr ""
-"如果[code]class_name[/code]指定的类的编辑被ç¦ç”¨ï¼Œè¿”回[code]true[/code]。ç¦ç”¨"
-"时,类ä»ç„¶ä¼šå‡ºçŽ°åœ¨ \"创建新节点 \"å¯¹è¯æ¡†ä¸­ï¼Œä½†åœ¨é€‰æ‹©ç»§æ‰¿çš„节点时,检查器将是"
-"åªè¯»çš„。"
+"如果 [code]class_name[/code] 指定的类的编辑被ç¦ç”¨ï¼Œè¿”回 [code]true[/code]。ç¦"
+"用时,类ä»ç„¶ä¼šå‡ºçŽ°åœ¨â€œåˆ›å»ºæ–° Nodeâ€å¯¹è¯æ¡†ä¸­ï¼Œä½†åœ¨é€‰æ‹©ç»§æ‰¿çš„节点时,检查器将是åª"
+"读的。"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24598,7 +24714,7 @@ msgid ""
"Create New Node dialog."
msgstr ""
"如果 [code]disable[/code] 是 [code]true[/code],则ç¦ç”¨ [code]class_name[/"
-"code] 指定的类。被ç¦ç”¨æ—¶ï¼Œè¯¥ç±»ä¸ä¼šå‡ºçŽ°åœ¨ \"创建新节点 \"å¯¹è¯æ¡†ä¸­ã€‚"
+"code] 指定的类。被ç¦ç”¨æ—¶ï¼Œè¯¥ç±»ä¸ä¼šå‡ºçŽ°åœ¨â€œåˆ›å»ºæ–° Nodeâ€å¯¹è¯æ¡†ä¸­ã€‚"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24608,8 +24724,8 @@ msgid ""
"when selecting a node that extends the class."
msgstr ""
"如果 [code]disable[/code] 为 [code]true[/code],则ç¦ç”¨ [code]class_name[/"
-"code] 指定的类的编辑。ç¦ç”¨æ—¶ï¼Œç±»ä»ç„¶ä¼šå‡ºçŽ°åœ¨ \"创建新节点 \"å¯¹è¯æ¡†ä¸­ï¼Œä½†åœ¨é€‰"
-"择继承的节点时,检查器将åªè¯»ã€‚"
+"code] 指定的类的编辑。ç¦ç”¨æ—¶ï¼Œç±»ä»ç„¶ä¼šå‡ºçŽ°åœ¨â€œåˆ›å»ºæ–° Nodeâ€å¯¹è¯æ¡†ä¸­ï¼Œä½†åœ¨é€‰æ‹©ç»§"
+"承的节点时,检查器将åªè¯»ã€‚"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24636,8 +24752,8 @@ msgid ""
"The 3D editor. If this feature is disabled, the 3D editor won't display but "
"3D nodes will still display in the Create New Node dialog."
msgstr ""
-"3D编辑器。如果ç¦ç”¨æ­¤åŠŸèƒ½ï¼Œ3Dç¼–è¾‘å™¨å°†ä¸æ˜¾ç¤ºï¼Œä½†3D节点ä»å°†æ˜¾ç¤ºåœ¨ \"创建新节点 "
-"\"å¯¹è¯æ¡†ä¸­ã€‚"
+"3D 编辑器。如果ç¦ç”¨æ­¤åŠŸèƒ½ï¼Œ3D ç¼–è¾‘å™¨å°†ä¸æ˜¾ç¤ºï¼Œä½† 3D 节点ä»å°†æ˜¾ç¤ºåœ¨â€œåˆ›å»ºæ–° "
+"Nodeâ€å¯¹è¯æ¡†ä¸­ã€‚"
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24973,9 +25089,9 @@ msgid ""
"returns a string such as [code]\"Resource\"[/code] or [code]\"GDScript\"[/"
"code], [i]not[/i] a file extension such as [code]\".gd\"[/code]."
msgstr ""
-"返回索引[code]idx[/code]处文件的资æºç±»åž‹ã€‚这将返回字符串,如[code]\"Resource"
-"\"[/code]或[code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展å,如[code]\".gd"
-"\"[/code]。"
+"返回索引[code]idx[/code]处文件的资æºç±»åž‹ã€‚这将返回字符串,如"
+"[code]\"Resource\"[/code]或[code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展å,"
+"如[code]\".gd\"[/code]。"
#: doc/classes/EditorFileSystemDirectory.xml
msgid "Returns the name of this directory."
@@ -25117,10 +25233,6 @@ msgstr ""
"è¦ä½¿ç”¨ä½ çš„ [EditorImportPlugin],请先通过 [method EditorPlugin."
"add_import_plugin] 注册。"
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -25159,8 +25271,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -25173,8 +25285,8 @@ msgstr ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -25212,8 +25324,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
"获å–与此加载程åºå…³è”çš„Godot资æºç±»åž‹ï¼Œä¾‹å¦‚ [code]\"Mesh\"[/code] 或 "
"[code]\"Animation\"[/code]。"
@@ -25361,8 +25473,8 @@ msgstr ""
"add_inspector_plugin] 方法注册。"
#: doc/classes/EditorInspectorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
-msgstr "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
+msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -25679,10 +25791,6 @@ msgstr ""
"件和导出æ’件。å¦è¯·å‚阅[EditorScript]å‘编辑器添加函数。"
#: doc/classes/EditorPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr "$DOCS_URL/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -25848,9 +25956,9 @@ msgid ""
"[code]submenu[/code] should be an object of class [PopupMenu]. This submenu "
"should be cleaned up using [code]remove_tool_menu_item(name)[/code]."
msgstr ""
-"在[b]项目>工具>[/b] [code]name[/code]下添加自定义å­èœå•。 [code]submenu[/"
-"code]应该是[PopupMenu]类的对象。此å­èœå•应使用"
-"[code]remove_tool_menu_item(name)[/code]进行清ç†ã€‚"
+"在[b]项目 > 工具[/b]下添加å为 [code]name[/code] 的自定义å­èœå•。 "
+"[code]submenu[/code] 应该是 [PopupMenu] 类的对象。此å­èœå•应使用 "
+"[code]remove_tool_menu_item(name)[/code] 进行清ç†ã€‚"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26367,8 +26475,8 @@ msgid ""
"This control allows property editing for one or multiple properties into "
"[EditorInspector]. It is added via [EditorInspectorPlugin]."
msgstr ""
-"该控件å¯ä»¥å°†ä¸€ä¸ªæˆ–多个属性编辑到[EditorInspector]中。通过"
-"[EditorInspectorPlugin]添加。"
+"该控件å¯ä»¥å°†ä¸€ä¸ªæˆ–多个属性编辑到 [EditorInspector] 中。通过 "
+"[EditorInspectorPlugin] 添加。"
#: doc/classes/EditorProperty.xml
msgid ""
@@ -26400,8 +26508,8 @@ msgid ""
"[method EditorInspectorPlugin.parse_property]), then this will return the "
"property."
msgstr ""
-"获å–已编辑的属性。如果你的编辑器是针对å•个属性的(通过[method "
-"EditorInspectorPlugin.parse_property]添加),那么这将返回属性。"
+"获å–已编辑的属性。如果你的编辑器是针对å•个属性的(通过 [method "
+"EditorInspectorPlugin.parse_property] 添加),那么这将返回属性。"
#: doc/classes/EditorProperty.xml
msgid "Must be implemented to provide a custom tooltip to the property editor."
@@ -26423,12 +26531,12 @@ msgstr "当这个虚函数被调用时,你必须更新你的编辑器。"
msgid ""
"Used by the inspector, set to [code]true[/code] when the property is "
"checkable."
-msgstr "åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œå½“属性å¯ç‚¹å‡»æ—¶ï¼Œè®¾ç½®ä¸º[code]true[/code]。"
+msgstr "检查器会使用,当属性å¯å‹¾é€‰æ—¶ï¼Œè¯·è®¾ç½®ä¸º [code]true[/code]。"
#: doc/classes/EditorProperty.xml
msgid ""
"Used by the inspector, set to [code]true[/code] when the property is checked."
-msgstr "åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œå½“属性为å¯é€‰ä¸­æ—¶ï¼Œè®¾ç½®å±žæ€§ä¸º[code]true[/code]。"
+msgstr "检查器会使用,当属性已勾选时,请设置为 [code]true[/code]。"
#: doc/classes/EditorProperty.xml
msgid ""
@@ -26436,14 +26544,14 @@ msgid ""
"with the editor theme's warning color. This is used for editable children's "
"properties."
msgstr ""
-"由检查器使用,当属性用编辑器主题的警告颜色ç€è‰²æ—¶ï¼Œè®¾ç½®ä¸º[code]true[/code]。这"
-"用于å¯ç¼–辑的å­èŠ‚ç‚¹çš„å±žæ€§ã€‚"
+"检查器会使用,当属性用编辑器主题的警告颜色ç€è‰²æ—¶ï¼Œè¯·è®¾ç½®ä¸º[code]true[/code]。"
+"这用于å¯ç¼–辑的å­èŠ‚ç‚¹çš„å±žæ€§ã€‚"
#: doc/classes/EditorProperty.xml
msgid ""
"Used by the inspector, set to [code]true[/code] when the property can add "
"keys for animation."
-msgstr "åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œè®¾ç½®ä¸º[code]true[/code]时,该属性å¯ä»¥ä¸ºåŠ¨ç”»æ·»åŠ é”®ã€‚"
+msgstr "检查器会使用,当属性å¯ä»¥ä¸ºæ·»åŠ ä¸ºåŠ¨ç”»é”®æ—¶ï¼Œè¯·è®¾ç½®ä¸º [code]true[/code]。"
#: doc/classes/EditorProperty.xml
msgid "Set this property to change the label (if you want to show one)."
@@ -26453,19 +26561,19 @@ msgstr "è®¾ç½®æ­¤å±žæ€§å¯æ”¹å˜æ ‡ç­¾ï¼ˆå¦‚果你想显示标签)。"
msgid ""
"Used by the inspector, set to [code]true[/code] when the property is read-"
"only."
-msgstr "åœ¨æ£€æŸ¥é¢æ¿ä½¿ç”¨ï¼Œå½“属性为åªè¯»æ—¶ï¼Œè®¾ç½®ä¸º[code]true[/code]。"
+msgstr "检查器会使用,当属性为åªè¯»æ—¶ï¼Œè¯·è®¾ç½®ä¸º [code]true[/code]。"
#: doc/classes/EditorProperty.xml
msgid ""
"Emit it if you want multiple properties modified at the same time. Do not "
"use if added via [method EditorInspectorPlugin.parse_property]."
msgstr ""
-"å¦‚æžœä½ æƒ³åŒæ—¶ä¿®æ”¹å¤šä¸ªå±žæ€§ï¼Œè¯·è§¦å‘它。如果通过[method EditorInspectorPlugin."
-"parse_property]添加,则ä¸è¦ä½¿ç”¨ã€‚"
+"å¦‚æžœä½ æƒ³åŒæ—¶ä¿®æ”¹å¤šä¸ªå±žæ€§ï¼Œè¯·è§¦å‘它。如果通过 [method EditorInspectorPlugin."
+"parse_property] 添加,则ä¸è¦ä½¿ç”¨ã€‚"
#: doc/classes/EditorProperty.xml
msgid "Used by sub-inspectors. Emit it if what was selected was an Object ID."
-msgstr "ç”±å­æ£€æŸ¥å‘˜ä½¿ç”¨ã€‚如果选择的是对象ID,则触å‘。"
+msgstr "å­æ£€æŸ¥å™¨ä¼šä½¿ç”¨ã€‚如果选择的是对象 ID,则触å‘。"
#: doc/classes/EditorProperty.xml
msgid ""
@@ -26870,11 +26978,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/EditorScenePostImport.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -27421,10 +27524,6 @@ msgstr ""
"add_spatial_gizmo_plugin] 注册。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -27581,14 +27680,14 @@ msgstr ""
"[EditorInspectorPlugin] ä¸€èµ·ä½¿ç”¨ï¼Œä»¥é‡æ–°åˆ›å»ºç›¸åŒçš„行为。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid ""
"Version Control System (VCS) interface, which reads and writes to the local "
"VCS in use."
-msgstr "版本控制系统(VCS)接å£ï¼Œå¯å¯¹æ­£åœ¨ä½¿ç”¨çš„æœ¬åœ°VCS进行读写。"
+msgstr ""
+"版本控制系统(Version Control System,VCS)接å£ï¼Œå¯å¯¹æ­£åœ¨ä½¿ç”¨çš„æœ¬åœ° VCS 进行"
+"读写。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid ""
"Defines the API that the editor uses to extract information from the "
"underlying VCS. The implementation of this API is included in VCS plugins, "
@@ -27599,27 +27698,25 @@ msgid ""
"plug-n-play experience. A custom VCS plugin is supposed to inherit from "
"[EditorVCSInterface] and override these virtual functions."
msgstr ""
-"由编辑器用æ¥åœ¨ç¼–辑器中显示VCSæå–的信æ¯ã€‚这个API的实现包å«åœ¨VCS附加组件中,这"
-"些附加组件本质上是GDNativeæ’ä»¶ï¼Œéœ€è¦æ”¾åˆ°é¡¹ç›®æ–‡ä»¶å¤¹ä¸­ã€‚这些VCS附加组件是脚本,"
-"它们(按需)附加到[code]EditorVCSInterface[/code]的对象实例中。下é¢åˆ—出的所有"
-"åŠŸèƒ½ï¼Œå®ƒä»¬ä¸æ˜¯è‡ªå·±æ‰§è¡Œä»»åŠ¡ï¼Œè€Œæ˜¯è°ƒç”¨VCS附加组件中内部定义的功能,以æä¾›çŽ°å†™çŽ°"
-"用的体验。"
+"定义编辑器使用的 API,负责从底层 VCS æå–ä¿¡æ¯ã€‚这个 API 的实现包å«åœ¨ VCS æ’ä»¶"
+"中,æ’件是继承了 [EditorVCSInterface] 的脚本,会(按需)附加到 "
+"[EditorVCSInterface] å•例上。以下列出的所有虚函数都ä¸ä¼šäº²è‡ªæ‰§è¡Œæ“作,而是会去"
+"调用 VCS æ’件中内部覆盖的函数,带æ¥å³æ’å³ç”¨çš„体验。自定义 VCS æ’件应当继承 "
+"[EditorVCSInterface] 并覆盖这些虚函数。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Checks out a [code]branch_name[/code] in the VCS."
-msgstr "从列表中删除自动加载[code]name[/code]。"
+msgstr "检出 VCS 中的 [code]branch_name[/code] 分支。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Commits the currently staged changes and applies the commit [code]msg[/code] "
"to the resulting commit."
-msgstr ""
+msgstr "æäº¤å½“剿š‚存的修改,并对æäº¤åº”用æäº¤ä¿¡æ¯ [code]msg[/code]。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Creates a new branch named [code]branch_name[/code] in the VCS."
-msgstr "创建[code]class[/code]的实例。"
+msgstr "在 VCS 中新建å为 [code]branch_name[/code] 的分支。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27627,28 +27724,30 @@ msgid ""
"points it to [code]remote_url[/code]. This can be both an HTTPS remote or an "
"SSH remote."
msgstr ""
+"新建远程仓库目标,命å为 [code]remote_name[/code] å¹¶æŒ‡å‘ [code]remote_url[/"
+"code]。既å¯ä»¥æ˜¯ HTTPS 远程仓库,也å¯ä»¥æ˜¯ SSH 远程仓库。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Discards the changes made in file present at [code]file_path[/code]."
-msgstr "将场景ä¿å­˜ä¸º[code]path[/code]处的文件。"
+msgstr "丢弃对ä½äºŽ [code]file_path[/code] 的文件进行的修改。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Fetches new changes from the remote, but doesn't write changes to the "
"current working directory. Equivalent to [code]git fetch[/code]."
msgstr ""
+"ä»Žè¿œç¨‹ä»“åº“ä¸­æŠ“å–æ–°ä¿®æ”¹ï¼Œä½†ä¸å°†ä¿®æ”¹å†™å…¥å½“å‰å·¥ä½œç›®å½•。与 [code]git fetch[/"
+"code] 等效。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Gets an instance of an [Array] of [String]s containing available branch "
"names in the VCS."
-msgstr ""
+msgstr "èŽ·å– [String] 字符串的 [Array] 数组实例,包å«åœ¨ VCS 中å¯ç”¨çš„分支å称。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Gets the current branch name defined in the VCS."
-msgstr "返回在[FileSystemDock]中查看的当å‰è·¯å¾„。"
+msgstr "èŽ·å– VCS 中定义的当å‰åˆ†æ”¯å称。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27659,6 +27758,11 @@ msgid ""
"file path, returns a file diff, and if it is a commit identifier, then "
"returns a commit diff."
msgstr ""
+"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_diff_file]ã€"
+"[method create_diff_hunk]ã€[method create_diff_line]ã€[method "
+"add_line_diffs_into_diff_hunk]ã€[method add_diff_hunks_into_diff_file]),æ¯"
+"一项都包å«ä¸€ä¸ªå·®å¼‚的信æ¯ã€‚如果 [code]identifier[/code] 是文件路径,则返回文件"
+"差异,如果是æäº¤æ ‡è¯†ç¬¦ï¼Œåˆ™è¿”回æäº¤å·®å¼‚。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27666,30 +27770,37 @@ msgid ""
"each containing a line diff between a file at [code]file_path[/code] and the "
"[code]text[/code] which is passed in."
msgstr ""
+"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_diff_hunk]),"
+"æ¯ä¸€é¡¹éƒ½åŒ…å«ä½äºŽ [code]file_path[/code] 的文件与传入的 [code]text[/code] 之间"
+"çš„å•行差异。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Returns an [Array] of [Dictionary] items (see [method create_status_file]), "
"each containing the status data of every modified file in the project folder."
msgstr ""
+"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method "
+"create_status_file]),æ¯ä¸€é¡¹éƒ½åŒ…å«é¡¹ç›®æ–‡ä»¶å¤¹ä¸­æ¯ä¸ªå·²ä¿®æ”¹çš„æ–‡ä»¶çš„çŠ¶æ€æ•°æ®ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Returns an [Array] of [Dictionary] items (see [method create_commit]), each "
"containing the data for a past commit."
msgstr ""
+"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_commit]),æ¯"
+"一项都包å«ä¸€ä¸ªè¿‡åŽ»æäº¤çš„æ•°æ®ã€‚"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid ""
"Returns an [Array] of [String]s, each containing the name of a remote "
"configured in the VCS."
-msgstr "è¿”å›žåŒ…å«æ‰€æœ‰èŠ‚ç‚¹åç§°çš„[PoolStringArray]。"
+msgstr ""
+"返回 [String] 字符串的 [Array] 数组,æ¯ä¸€ä¸ªéƒ½åŒ…å« VCS 中é…置的一个远程仓库的"
+"å称。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Returns the name of the underlying VCS provider."
-msgstr "返回[code]idx[/code]处的节点å称。"
+msgstr "返回底层 VCS æä¾›æ–¹çš„å称。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27697,10 +27808,12 @@ msgid ""
"not the plugin was successfully initialized. A VCS project is initialized at "
"[code]project_path[/code]."
msgstr ""
+"从编辑器中调用时åˆå§‹åŒ–该 VCS æ’件。返回该æ’ä»¶æ˜¯å¦æˆåŠŸåˆå§‹åŒ–。会在 "
+"[code]project_path[/code] åˆå§‹åŒ– VCS 项目。"
#: doc/classes/EditorVCSInterface.xml
msgid "Pulls changes from the remote. This can give rise to merge conflicts."
-msgstr ""
+msgstr "从远程仓库拉å–修改。å¯èƒ½å¸¦æ¥åˆå¹¶å†²çªã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27708,16 +27821,16 @@ msgid ""
"is set to true, a force push will override the change history already "
"present on the remote."
msgstr ""
+"将修改推é€è‡³è¿œç¨‹ä»“库 [code]remote[/code]。å¦å¤–å¯ä»¥å°† [code]force[/code] 设为"
+"真,会进行强制推é€ï¼Œè¦†ç›–远程仓库中现有的修改历å²ã€‚"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Remove a branch from the local VCS."
-msgstr "从选择中删除一个节点。"
+msgstr "从本地 VCS 中移除一个分支。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Remove a remote from the local VCS."
-msgstr "从选择中删除一个节点。"
+msgstr "从本地 VCS 中移除一个远程仓库。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27727,35 +27840,44 @@ msgid ""
"[code]ssh_private_key_path[/code], and [code]ssh_passphrase[/code] are only "
"used during SSH authentication."
msgstr ""
+"在底层 VCS 中设置用户认è¯ä¿¡æ¯ã€‚用户å [code]username[/code] å’Œå¯†ç  "
+"[code]password[/code] åªä¼šåœ¨è¿›è¡Œ HTTPS 认è¯ä¸”没有在远程仓库 URL 中给出时使"
+"用。SSH 公钥路径 [code]ssh_public_key_path[/code]ã€SSH ç§é’¥è·¯å¾„ "
+"[code]ssh_private_key_path[/code]ã€SSH å¯†ç  [code]ssh_passphrase[/code] åªä¼š"
+"在进行 SSH è®¤è¯æ—¶ä½¿ç”¨ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Shuts down VCS plugin instance. Called when the user either closes the "
"editor or shuts down the VCS plugin through the editor UI."
msgstr ""
+"关闭 VCS æ’件实例。会在用户关闭编辑器或通过编辑器 UI 关闭该 VCS æ’件时调用。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Stages the file present at [code]file_path[/code] to the staged area."
-msgstr "å°†ç›¸æœºæº [code]feed[/code] æ·»åŠ åˆ°æ‘„åƒæœºæœåŠ¡å™¨ä¸­ã€‚"
+msgstr "å°†ä½äºŽ [code]file_path[/code] 的文件暂存到暂存区。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Unstages the file present at [code]file_path[/code] from the staged area to "
"the unstaged area."
-msgstr ""
+msgstr "å°†ä½äºŽ [code]file_path[/code] 的文件从暂存区撤销到未暂存区。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Helper function to add an array of [code]diff_hunks[/code] into a "
"[code]diff_file[/code]."
msgstr ""
+"将差异嗿•°ç»„ [code]diff_hunks[/code] 加入差异文件 [code]diff_file[/code] 的辅"
+"助函数。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Helper function to add an array of [code]line_diffs[/code] into a "
"[code]diff_hunk[/code]."
msgstr ""
+"将行差异数组 [code]diff_hunks[/code] åŠ å…¥å·®å¼‚å— [code]diff_hunk[/code] 的辅助"
+"函数。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27767,12 +27889,17 @@ msgid ""
"directly added to the commit item and displayed in the editor, and hence, it "
"shall be a well-formatted, human-readable date string."
msgstr ""
+"创建æäº¤ [Dictionary] 项目的辅助函数。[code]msg[/code] 为该æäº¤çš„æäº¤æ¶ˆæ¯ã€‚"
+"[code]author[/code] 为包å«ä½œè€…详情的人类å¯è¯»çš„字符串,例如 VCS 中é…置的邮箱和"
+"å称。[code]id[/code] 为该æäº¤çš„æ ‡è¯†ç¬¦ï¼Œä½¿ç”¨ä½ çš„ VCS 为æäº¤æ‰€æä¾›çš„æ ‡è¯†ç¬¦çš„æ ¼"
+"å¼ã€‚日期 [code]date[/code] 会被直接加入到该æäº¤é¡¹ç›®å¹¶è¢«æ˜¾ç¤ºåœ¨ç¼–辑器中,因此,"
+"应当进行正确格å¼åŒ–,是人类å¯è¯»çš„æ—¥æœŸå­—符串。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Helper function to create a [code]Dictionary[/code] for storing old and new "
"diff file paths."
-msgstr ""
+msgstr "创建用于ä¿å­˜æ–°æ—§æ–‡ä»¶è·¯å¾„差异的 [code]Dictionary[/code] 的辅助函数。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27782,70 +27909,76 @@ msgid ""
"[code]old_lines[/code] is the number of lines in the old file. "
"[code]new_lines[/code] is the number of lines in the new file."
msgstr ""
+"创建用于ä¿å­˜å·®å¼‚å—æ•°æ®çš„ [code]Dictionary[/code] 的辅助函数。"
+"[code]old_start[/code] 是旧文件中的起始行å·ã€‚[code]new_start[/code] 是新文件"
+"中的起始行å·ã€‚[code]old_lines[/code] 是旧文件中的行数。[code]new_lines[/"
+"code] 是新文件中的行数。"
#: doc/classes/EditorVCSInterface.xml
+#, fuzzy
msgid ""
"Helper function to create a [code]Dictionary[/code] for storing a line diff. "
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
+"创建用于ä¿å­˜è¡Œå·®å¼‚çš„ [code]Dictionary[/code] 的辅助函数。[code]new_line_no[/"
+"code] 是新文件中的行å·ï¼ˆè¯¥è¡Œè¢«åˆ é™¤æ—¶å¯ä¸º [code]-1[/code])。"
+"[code]old_line_no[/code] 是旧文件中的行å·ï¼ˆè¯¥è¡Œä¸ºæ–°å¢žæ—¶å¯ä¸º [code]-1[/"
+"code])。[code]content[/code] 为差异文本。[code]content[/code] 为差异文本。"
+"[code]status[/code] 为ä¿å­˜è¯¥è¡ŒåŽŸç‚¹çš„å•字符字符串。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Helper function to create a [code]Dictionary[/code] used by editor to read "
"the status of a file."
-msgstr ""
+msgstr "åˆ›å»ºç¼–è¾‘å™¨ç”¨äºŽè¯»å–æ–‡ä»¶çжæ€çš„ [code]Dictionary[/code] 的辅助函数。"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "Pops up an error message in the edior."
-msgstr "在编辑器中用于为属性分组。"
+msgstr "在编辑器中弹出错误消æ¯ã€‚"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "A new file has been added."
-msgstr "æ·»åŠ æ–°æŽ¥å£æ—¶è§¦å‘。"
+msgstr "加入了新文件。"
#: doc/classes/EditorVCSInterface.xml
msgid "An earlier added file has been modified."
-msgstr ""
+msgstr "å…ˆå‰åŠ å…¥çš„æ–‡ä»¶è¢«ä¿®æ”¹ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid "An earlier added file has been renamed."
-msgstr ""
+msgstr "å…ˆå‰åŠ å…¥çš„æ–‡ä»¶è¢«æ”¹å。"
#: doc/classes/EditorVCSInterface.xml
msgid "An earlier added file has been deleted."
-msgstr ""
+msgstr "å…ˆå‰åŠ å…¥çš„æ–‡ä»¶è¢«åˆ é™¤ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid "An earlier added file has been typechanged."
-msgstr ""
+msgstr "å…ˆå‰åŠ å…¥çš„æ–‡ä»¶è¢«ä¿®æ”¹ç±»åž‹ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid "A file is left unmerged."
-msgstr ""
+msgstr "文件未åˆå¹¶ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid "A commit is encountered from the commit area."
-msgstr ""
+msgstr "在æäº¤åŒºåŸŸé‡åˆ°äº†æäº¤ã€‚"
#: doc/classes/EditorVCSInterface.xml
-#, fuzzy
msgid "A file is encountered from the staged area."
-msgstr "状æ€ï¼šä¸ŽæœåŠ¡å™¨æ–­å¼€è¿žæŽ¥ã€‚"
+msgstr "在暂存区域é‡åˆ°äº†æ–‡ä»¶ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid "A file is encountered from the unstaged area."
-msgstr ""
+msgstr "在未暂存区域é‡åˆ°äº†æ–‡ä»¶ã€‚"
#: doc/classes/EncodedObjectAsID.xml
msgid "Holds a reference to an [Object]'s instance ID."
-msgstr "ä¿å­˜å¯¹[Object]实例ID的引用。"
+msgstr "ä¿å­˜å¯¹ [Object] 实例 ID 的引用。"
#: doc/classes/EncodedObjectAsID.xml
msgid ""
@@ -27872,7 +28005,7 @@ msgstr ""
#: doc/classes/Engine.xml
msgid "Access to engine properties."
-msgstr "进入引擎属性。"
+msgstr "访问引擎属性。"
#: doc/classes/Engine.xml
msgid ""
@@ -27953,21 +28086,20 @@ msgid ""
"[/codeblock]"
msgstr ""
"返回自引擎åˆå§‹åŒ–以æ¥çš„æ€»å¸§æ•°ï¼Œåœ¨æ¯ä¸ª[b]空闲帧[/b]都会进行,无论渲染循环是å¦è¢«"
-"å¯ç”¨ã€‚å‚阅[method get_frames_drawn]å’Œ[method get_physics_frames]。\n"
-"[method get_idle_frames]å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é "
+"å¯ç”¨ã€‚å‚阅 [method get_frames_drawn] å’Œ [method get_physics_frames]。\n"
+"[method get_idle_frames] å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é  "
"[Timer]。\n"
"[codeblock]\n"
"func _process(_delta):\n"
" if Engine.get_idle_frames() % 2 == 0:\n"
-" pass # Run expensive logic only once every 2 idle (render) frames "
-"here.\n"
+" pass # å°†æ˜‚è´µçš„é€»è¾‘æ”¾åœ¨è¿™é‡Œï¼Œæ¯ 2 个空闲(渲染)帧è¿è¡Œä¸€æ¬¡ã€‚\n"
"[/codeblock]"
#: doc/classes/Engine.xml
msgid ""
"Returns Dictionary of licenses used by Godot and included third party "
"components."
-msgstr "返回Godot使用的Dictionary 字典列表,其中包括第三方组件。"
+msgstr "返回 Godot 所使用的许å¯è¯çš„ Dictionary 字典列表,其中包括第三方组件。"
#: doc/classes/Engine.xml
msgid "Returns Godot license text."
@@ -27990,14 +28122,14 @@ msgid ""
" pass # Run expensive logic only once every 2 physics frames here.\n"
"[/codeblock]"
msgstr ""
-"返回自引擎åˆå§‹åŒ–以æ¥é€šè¿‡çš„æ€»å¸§æ•°ï¼Œè¯¥å¸§æ•°åœ¨æ¯ä¸ª[b]物ç†å¸§[/b]上进行。å‚阅"
+"返回自引擎åˆå§‹åŒ–以æ¥é€šè¿‡çš„æ€»å¸§æ•°ï¼Œè¯¥å¸§æ•°åœ¨æ¯ä¸ª[b]物ç†å¸§[/b]上进行。å‚阅 "
"[method get_idle_frames]。\n"
-"[method get_physics_frames]å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é "
+"[method get_physics_frames] å¯ä»¥ç”¨æ¥å‡å°‘è¿è¡Œé«˜æ¶ˆè€—逻辑的次数,而ä¸éœ€è¦ä¾é  "
"[Timer]。\n"
"[codeblock]\n"
"func _physics_process(_delta):\n"
" if Engine.get_physics_frames() % 2 == 0:\n"
-" pass # Run expensive logic only once every 2 physics frames here.\n"
+" pass # å°†æ˜‚è´µçš„é€»è¾‘æ”¾åœ¨è¿™é‡Œï¼Œæ¯ 2 个物ç†å¸§è¿è¡Œä¸€æ¬¡ã€‚\n"
"[/codeblock]"
#: doc/classes/Engine.xml
@@ -28047,27 +28179,28 @@ msgid ""
"[/codeblock]"
msgstr ""
"在字典中返回当å‰çš„引擎版本信æ¯ã€‚\n"
-"[code]major[/code] - 将主è¦ç‰ˆæœ¬å·ä½œä¸ºä¸€ä¸ªintæ¥ä¿å­˜ã€‚\n"
-"[code]minor[/code] - å°†å°ç‰ˆæœ¬å·ä½œä¸ºä¸€ä¸ªintä¿å­˜ã€‚\n"
-"[code]patch[/code] - 将补ä¸ç‰ˆæœ¬å·ä½œä¸ºä¸€ä¸ªintæ¥ä¿å­˜ã€‚\n"
-"[code]hex[/code] - ä¿å­˜ä»¥å六进制intç¼–ç çš„完整版本å·ï¼Œæ¯ä¸ªæ•°å­—一个字节(2ä½)"
-"(è§ä¸‹ä¾‹)\n"
-"[code]status[/code] - 以字符串形å¼ä¿å­˜çŠ¶æ€ (例如 \"beta\", \"rc1\", "
-"\"rc2\", ... \"stable\")\n"
-"[code]build[/code] - å°†buildåç§°(例如 \"custom_build\")作为一个字符串ä¿å­˜ã€‚\n"
+"[code]major[/code] - 将主版本å·ä½œä¸ºä¸€ä¸ª int æ¥ä¿å­˜ã€‚\n"
+"[code]minor[/code] - å°†å°ç‰ˆæœ¬å·ä½œä¸ºä¸€ä¸ª int æ¥ä¿å­˜ã€‚\n"
+"[code]patch[/code] - 将补ä¸ç‰ˆæœ¬å·ä½œä¸ºä¸€ä¸ª int æ¥ä¿å­˜ã€‚\n"
+"[code]hex[/code] - ä¿å­˜ä»¥å六进制 int ç¼–ç çš„完整版本å·ï¼Œæ¯ä¸ªï¼ˆ2 ä½ï¼‰æ•°å ä¸€ä¸ª"
+"字节(è§ä¸‹ä¾‹ï¼‰\n"
+"[code]status[/code] - 以字符串形å¼ä¿å­˜çжæ€ï¼ˆä¾‹å¦‚ "
+"\"beta\"ã€\"rc1\"ã€\"rc2\"ã€â€¦â€¦\"stable\")\n"
+"[code]build[/code] - å°† build å称(例如 \"custom_build\")作为一个字符串ä¿"
+"存。\n"
"[code]hash[/code] - 以字符串形å¼ä¿å­˜å®Œæ•´çš„ Git æäº¤å“ˆå¸Œå€¼ã€‚\n"
-"[code]year[/code] - 将版本å‘布的年份作为一个int值æ¥ä¿å­˜ã€‚\n"
+"[code]year[/code] - 将版本å‘布的年份作为一个 int 值æ¥ä¿å­˜ã€‚\n"
"[code]string[/code] - [code]major[/code] + [code]minor[/code] + [code]patch[/"
"code] + [code]status[/code] + [code]build[/code]在一个字符串中。\n"
-"[code]å六进制[/code]值的编ç å¦‚下,从左到å³ï¼šä¸€ä¸ªå­—节代表主è¦ç‰ˆæœ¬ï¼Œä¸€ä¸ªå­—节代"
-"表次è¦ç‰ˆæœ¬ï¼Œä¸€ä¸ªå­—节代表补ä¸ç‰ˆæœ¬ã€‚例如,\"3.1.12 \"就是[code]0x03010C[/"
-"code]。[b]注æ„:[/b]内部还是一个int,打å°å‡ºæ¥ä¼šç»™ä½ å®ƒçš„å进制表示法,æ„义䏿˜¯"
-"特别大。使用å六进制的字数,方便从代ç ä¸­è¿›è¡Œç‰ˆæœ¬æ¯”较。\n"
+"[code]hex[/code] å六进制值的编ç å¦‚下,从左到å³ï¼šä¸€ä¸ªå­—节代表主è¦ç‰ˆæœ¬ï¼Œä¸€ä¸ªå­—"
+"节代表次è¦ç‰ˆæœ¬ï¼Œä¸€ä¸ªå­—节代表补ä¸ç‰ˆæœ¬ã€‚例如,\"3.1.12\" 就是 [code]0x03010C[/"
+"code]。[b]注æ„:[/b]内部还是一个 int,打å°å‡ºæ¥ä¼šç»™ä½ å®ƒçš„å进制表示法,æ„义ä¸"
+"是特别大。使用å六进制的字数,方便从代ç ä¸­è¿›è¡Œç‰ˆæœ¬æ¯”较。\n"
"[codeblock]\n"
"if Engine.get_version_info().hex >= 0x030200:\n"
-" # Do things specific to version 3.2 or later\n"
+" # 针对 3.2 åŠä»¥åŽç‰ˆæœ¬è¿›è¡Œæ“作\n"
"else:\n"
-" # Do things specific to versions before 3.2\n"
+" # 针对 3.2 之å‰ç‰ˆæœ¬è¿›è¡Œæ“作\n"
"[/codeblock]"
#: doc/classes/Engine.xml
@@ -28147,9 +28280,9 @@ msgstr ""
"common/physics_fps]。\n"
"[b]注æ„:[/b]æ¯ä¸ªæ¸²æŸ“帧最多åªèƒ½æ¨¡æ‹Ÿ 8 次物ç†è¿­ä»£ã€‚如果为了追赶渲染,需è¦åœ¨æ¯"
"个渲染帧中模拟多于 8 次物ç†è¿­ä»£ï¼Œæ¸¸æˆçœ‹ä¸ŠåŽ»ä¼šæ˜¯é™é€Ÿçš„(å³ä¾¿åœ¨ç‰©ç†è®¡ç®—中始终使"
-"用 [code]delta[/code])。因此,建议ä¸è¦å°† [member physics/common/"
-"physics_fps] 设为大于 240 的值。å¦åˆ™ï¼Œæ¸²æŸ“帧率低于 30 FPS 时游æˆå°±ä¼šä½Žé€Ÿè¿"
-"行。"
+"用 [code]delta[/code])。因此,建议ä¸è¦å°† [member Engine."
+"iterations_per_second] 设为大于 240 的值。å¦åˆ™ï¼Œæ¸²æŸ“帧率低于 30 FPS 时游æˆå°±"
+"会低速è¿è¡Œã€‚"
#: doc/classes/Engine.xml
msgid ""
@@ -28168,8 +28301,8 @@ msgstr ""
"游æˆï¼Œå› ä¸ºæ—¶é’Ÿçš„åŒæ­¥æ€§å¾ˆé‡è¦ã€‚较高的值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿä¹‹é—´çš„åå·®"
"较大,但å¯ä»¥å¹³æ»‘帧速率的抖动。默认值0.5对大多数人æ¥è¯´åº”该是良好的;超过2的值"
"å¯èƒ½å¯¼è‡´æ¸¸æˆå¯¹æŽ‰å¸§çš„ååº”æœ‰æ˜Žæ˜¾çš„å»¶è¿Ÿï¼Œå› æ­¤ä¸æŽ¨è使用。\n"
-"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值这ç§è§£å†³æ–¹æ¡ˆæ—¶ï¼Œåº”通过将"
-"[member physics_jitter_fix]设置为[code]0[/code]æ¥ç¦ç”¨ç‰©ç†æŠ–动修å¤ã€‚"
+"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值这ç§è§£å†³æ–¹æ¡ˆæ—¶ï¼Œåº”通过将 "
+"[member physics_jitter_fix] 设置为 [code]0[/code] æ¥ç¦ç”¨ç‰©ç†æŠ–动修å¤ã€‚"
#: doc/classes/Engine.xml
msgid ""
@@ -28218,6 +28351,7 @@ msgid ""
msgstr "用于定义多个渲染选项的环境节点(如 [WorldEnvironment])的资æºã€‚"
#: doc/classes/Environment.xml
+#, fuzzy
msgid ""
"Resource for environment nodes (like [WorldEnvironment]) that define "
"multiple environment operations (such as background [Sky] or [Color], "
@@ -28227,11 +28361,18 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
"环境节点(如 [WorldEnvironment])的资æºï¼Œè¿™äº›èŠ‚ç‚¹å®šä¹‰äº†å¤šä¸ªçŽ¯å¢ƒæ“作(如背景 "
"[Sky] 或 [Color]ã€çŽ¯å¢ƒå…‰ã€é›¾ã€æ™¯æ·±â€¦â€¦ï¼‰ã€‚è¿™äº›å‚æ•°ä¼šå½±å“场景的最终渲染。这些æ“"
@@ -28246,17 +28387,18 @@ msgstr ""
"usage] 调整。"
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+#, fuzzy
+msgid "Environment and post-processing"
msgstr "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
#: doc/classes/Environment.xml
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
-msgstr "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
+msgstr ""
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://godotengine.org/asset-library/asset/123"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -28330,13 +28472,16 @@ msgid ""
msgstr "环境光的能é‡ã€‚值越高,光照越强。"
#: doc/classes/Environment.xml
+#, fuzzy
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
"定义天空给场景带æ¥çš„光照é‡ã€‚值为 0 表示天空的å‘光对场景照明没有影å“,因此所有"
"的环境照明都由环境光æä¾›ã€‚相å,值为 1 表示所有影å“场景的光线都由天空æä¾›ï¼Œå› "
@@ -29155,6 +29300,10 @@ msgstr ""
"flush] æ¥è§£å†³è¿™ä¸ªé—®é¢˜ã€‚"
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -29622,10 +29771,10 @@ msgid ""
"the file. Therefore, you must set [member endian_swap] [i]after[/i] opening "
"the file, not before."
msgstr ""
-"为 [code]true[/code] 时文件以大端[url=https://zh.wikipedia.org/wiki/%E5%AD"
-"%97%E8%8A%82%E5%BA%8F]字节åº[/url]读å–。为 [code]false[/code] 时文件以å°ç«¯å­—"
-"节åºè¯»å–。如果ä¸ç¡®å®šï¼Œè¯·å°†å…¶ä¿ç•™ä¸º [code]false[/code],因为大多数文件都是以å°"
-"端字节åºç¼–写的。\n"
+"为 [code]true[/code] 时文件以大端[url=https://zh.wikipedia.org/wiki/"
+"%E5%AD%97%E8%8A%82%E5%BA%8F]字节åº[/url]读å–。为 [code]false[/code] 时文件以"
+"å°ç«¯å­—节åºè¯»å–。如果ä¸ç¡®å®šï¼Œè¯·å°†å…¶ä¿ç•™ä¸º [code]false[/code],因为大多数文件都"
+"是以å°ç«¯å­—节åºç¼–写的。\n"
"[b]注æ„:[/b][member endian_swap] åªæ˜¯æ–‡ä»¶æ ¼å¼ï¼Œä¸Ž CPU 类型无关。 CPU 字节åº"
"ä¸ä¼šå½±å“写入文件的默认字节åºã€‚\n"
"[b]注æ„:[/b]æ¯å½“您打开文件时,它总是é‡ç½®ä¸º [code]false[/code]。因此,必须在"
@@ -29706,6 +29855,12 @@ msgid ""
"Example filters: [code]\"*.png ; PNG Images\"[/code], [code]\"project."
"godot ; Godot Project\"[/code]."
msgstr ""
+"将过滤器 [code]filter[/code] 加入过滤器列表,用于é™åˆ¶å¯é€‰æ‹©çš„æ–‡ä»¶ã€‚\n"
+"[code]filter[/code] 应该是 [code]\"文件å.扩展å ; æè¿°\"[/code] 的形å¼ï¼Œæ–‡ä»¶"
+"å和扩展å都å¯ä»¥æ˜¯ [code]*[/code],匹é…ä»»æ„字符串。ä¸å…许过滤器以 [code].[/"
+"code] 开头(å³ç©ºæ–‡ä»¶å)。\n"
+"示例过滤器:[code]\"*.png ; PNG 图片\"[/code], [code]\"project.godot ; Godot "
+"项目\"[/code]。"
#: doc/classes/FileDialog.xml
msgid "Clear all the added filters in the dialog."
@@ -29768,7 +29923,6 @@ msgid "The currently selected file path of the file dialog."
msgstr "当å‰é€‰æ‹©çš„æ–‡ä»¶å¯¹è¯æ¡†çš„æ–‡ä»¶è·¯å¾„。"
#: doc/classes/FileDialog.xml
-#, fuzzy
msgid ""
"The available file type filters. For example, this shows only [code].png[/"
"code] and [code].gd[/code] files: [code]set_filters(PoolStringArray([\"*."
@@ -29778,7 +29932,9 @@ msgid ""
msgstr ""
"å¯ç”¨çš„æ–‡ä»¶ç±»åž‹è¿‡æ»¤å™¨ã€‚例如,这仅显示 [code].png[/code] å’Œ [code].gd[/code] æ–‡"
"件: [code]set_filters(PoolStringArray([\"*.png ; PNG Images\", \"*.gd ; "
-"GDScript Files\" ]))[/code]。"
+"GDScript Files\" ]))[/code]。å•个过滤器中也å¯ä»¥æŒ‡å®šå¤šä¸ªæ–‡ä»¶ç±»åž‹ã€‚选中 "
+"[code]\"*.png, *.jpg, *.jpeg ; Supported Images\"[/code] åŽä¼š PNG å’Œ JPEG æ–‡"
+"件都会显示。"
#: doc/classes/FileDialog.xml
msgid ""
@@ -29920,16 +30076,18 @@ msgstr ""
"code]。"
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+#, fuzzy
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
-"https://zh.wikipedia.org/zh-cn/%E9%9B%99%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E"
-"%E6%95%B8"
+"https://zh.wikipedia.org/zh-cn/"
+"%E9%9B%99%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8"
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+#, fuzzy
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
-"https://zh.wikipedia.org/zh-cn/%E5%96%AE%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E"
-"%E6%95%B8"
+"https://zh.wikipedia.org/zh-cn/"
+"%E5%96%AE%E7%B2%BE%E5%BA%A6%E6%B5%AE%E9%BB%9E%E6%95%B8"
#: doc/classes/float.xml
msgid ""
@@ -29963,6 +30121,24 @@ msgstr ""
"è§£æžç»“果,因此调用 [code]float(\"1a3\")[/code] 将返回1,而调用 "
"[code]float(\"1e3a2\")[/code] 将返回 1000.0。"
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Base class for flow containers."
+msgstr "ç›’å¼å®¹å™¨çš„基类。"
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "返回当å‰çš„æ»šåЍä½ç½®ã€‚"
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr "国际化的字体和文本绘制支æŒã€‚"
@@ -30142,14 +30318,6 @@ msgstr ""
"个平å°å’Œæž¶æž„进行编译。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -30240,10 +30408,6 @@ msgstr ""
"[method Object.set_script] 会扩展该对象。"
#: modules/gdscript/doc_classes/GDScript.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr "返回脚本æºä»£ç çš„字节(byte)ç ã€‚"
@@ -30337,7 +30501,7 @@ msgstr ""
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], rotation across the X axis is limited."
-msgstr "如果[code]true[/code],跨越X轴的旋转å—到é™åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 X 轴的旋转将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -30382,7 +30546,7 @@ msgstr "Y轴上的旋转阻尼é‡ã€‚值越低,旋转的阻尼就越大。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], rotation across the Y axis is limited."
-msgstr "如果[code]true[/code],跨越Y轴的旋转å—到é™åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 Y 轴的旋转将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -30427,7 +30591,7 @@ msgstr "跨越Z轴的旋转阻尼é‡ã€‚值越低,阻尼就越多。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], rotation across the Z axis is limited."
-msgstr "如果[code]true[/code],跨越Z轴的旋转å—到é™åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 Z 轴的旋转将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -30466,7 +30630,7 @@ msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œå¹¶ç»•Z轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the X axis is enabled."
-msgstr "如果为[code]true[/code],X轴的旋转电机被å¯ç”¨ã€‚"
+msgstr "如果为 [code]true[/code],则å¯ç”¨ X 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the X axis."
@@ -30478,7 +30642,7 @@ msgstr "X轴上电机的目标速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the Y axis is enabled."
-msgstr "如果[code]true[/code],å¯ç”¨Y轴上的旋转电机。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨ Y 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the Y axis."
@@ -30490,7 +30654,7 @@ msgstr "电机在Y轴的目标速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the Z axis is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨Z轴的旋转电机。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨ Z 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the Z axis."
@@ -30506,7 +30670,7 @@ msgstr "å‘生在Xè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the X axis is limited."
-msgstr "如果[code]true[/code],整个X轴的线性è¿åЍå—到é™åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 X 轴的线性è¿åЍ将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The minimum difference between the pivot points' X axis."
@@ -30534,7 +30698,7 @@ msgstr "å‘生在Yè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the Y axis is limited."
-msgstr "如果[code]true[/code],é™åˆ¶è·¨è¶ŠY轴的线性è¿åŠ¨ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 Y 轴的线性è¿åЍ将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The minimum difference between the pivot points' Y axis."
@@ -30562,7 +30726,7 @@ msgstr "å‘生在Zè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the Z axis is limited."
-msgstr "如果[code]true[/code],跨Z轴的线性è¿åЍå—到é™åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则跨越 Z 轴的线性è¿åЍ将å—到é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The minimum difference between the pivot points' Z axis."
@@ -30589,7 +30753,7 @@ msgid ""
"If [code]true[/code], then there is a linear motor on the X axis. It will "
"attempt to reach the target velocity while staying within the force limits."
msgstr ""
-"如果[code]true[/code],那么Xè½´ä¸Šæœ‰ä¸€ä¸ªçº¿æ€§é©¬è¾¾ã€‚å®ƒå°†è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶ä¿"
+"如果为 [code]true[/code],则 X è½´ä¸Šå­˜åœ¨çº¿æ€§é©¬è¾¾ã€‚å®ƒå°†è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶ä¿"
"æŒåœ¨åŠ›çš„é™åº¦å†…。"
#: doc/classes/Generic6DOFJoint.xml
@@ -30607,7 +30771,7 @@ msgid ""
"If [code]true[/code], then there is a linear motor on the Y axis. It will "
"attempt to reach the target velocity while staying within the force limits."
msgstr ""
-"如果[code]true[/code],那么Y轴上有一个线性马达。它将å°è¯•è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶ä¿"
+"如果为 [code]true[/code],则 Y è½´ä¸Šå­˜åœ¨çº¿æ€§é©¬è¾¾ã€‚å®ƒå°†è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶ä¿"
"æŒåœ¨åŠ›çš„é™åº¦å†…。"
#: doc/classes/Generic6DOFJoint.xml
@@ -30625,8 +30789,8 @@ msgid ""
"If [code]true[/code], then there is a linear motor on the Z axis. It will "
"attempt to reach the target velocity while staying within the force limits."
msgstr ""
-"如果[code]true[/code],那么在Zè½´ä¸Šæœ‰ä¸€ä¸ªçº¿æ€§é©¬è¾¾ã€‚å®ƒå°†è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶"
-"ä¿æŒåœ¨åŠ›çš„é™åº¦å†…。"
+"如果为 [code]true[/code],则 Z è½´ä¸Šå­˜åœ¨çº¿æ€§é©¬è¾¾ã€‚å®ƒå°†è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦ï¼ŒåŒæ—¶ä¿"
+"æŒåœ¨åŠ›çš„é™åº¦å†…。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -30732,11 +30896,11 @@ msgstr "如果å¯ç”¨ï¼Œåœ¨ç»™å®šçš„é™åº¦å†…å¯ä»¥è¿›è¡Œæ—‹è½¬è¿åŠ¨ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If enabled, there is a rotational motor across these axes."
-msgstr "如果å¯ç”¨ï¼Œå°±æœ‰ä¸€ä¸ªè·¨è¿™äº›è½´çš„æ—‹è½¬é©¬è¾¾ã€‚"
+msgstr "如果å¯ç”¨ï¼Œåˆ™å­˜åœ¨è·¨è¿™äº›è½´çš„æ—‹è½¬é©¬è¾¾ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If enabled, there is a linear motor across these axes."
-msgstr "如果å¯ç”¨ï¼Œæœ‰ä¸€ä¸ªçº¿æ€§é©¬è¾¾æ¨ªè·¨è¿™äº›è½´ã€‚"
+msgstr "如果å¯ç”¨ï¼Œåˆ™å­˜åœ¨è·¨è¿™äº›è½´çš„线性马达。"
#: doc/classes/Generic6DOFJoint.xml doc/classes/HingeJoint.xml
msgid "Represents the size of the [enum Flag] enum."
@@ -31511,8 +31675,8 @@ msgstr ""
"å‘å…‰ã€‚åªæœ‰å‘射型的[SpatialMaterial]å¯ä»¥åœ¨[GIProbe]中å‘射光线。"
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
-msgstr "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
+msgstr ""
#: doc/classes/GIProbe.xml
msgid ""
@@ -31868,12 +32032,10 @@ msgid "The number of color samples that will be obtained from the [Gradient]."
msgstr "将从[Gradient]中获得的颜色样本的数é‡ã€‚"
#: doc/classes/GradientTexture2D.xml
-#, fuzzy
msgid "Gradient-filled 2D texture."
-msgstr "æ¸å˜å¡«å……纹ç†ã€‚"
+msgstr "使用æ¸å˜å¡«å……çš„ 2D 纹ç†ã€‚"
#: doc/classes/GradientTexture2D.xml
-#, fuzzy
msgid ""
"The texture uses a [Gradient] to fill the texture data in 2D space. The "
"gradient is filled according to the specified [member fill] and [member "
@@ -31882,9 +32044,10 @@ msgid ""
"interpolation of samples obtained from the gradient at fixed steps (see "
"[member width] and [member height])."
msgstr ""
-"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸­èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³"
-"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的步长从æ¸å˜ä¸­èŽ·å¾—çš„æ ·"
-"本的æ’值,è§[member width]。"
+"该纹ç†ä½¿ç”¨ [Gradient] æ¸å˜æ¥å¡«å…… 2D ç©ºé—´çº¹ç†æ•°æ®ã€‚æ¸å˜ä¼šæ ¹æ® [member fill] "
+"å’Œ [member repeat] 类型,使用从æ¸å˜ä¸­èŽ·å–çš„é¢œè‰²è¿›è¡Œå¡«å……ã€‚è¯¥çº¹ç†æœªå¿…精确表示该"
+"æ¸å˜ï¼Œå¯ä»¥æ˜¯ä»Žè¯¥æ¸å˜ä¸ŠæŒ‰ç…§å›ºå®šæ­¥é•¿è¿›è¡Œé‡‡æ ·åŽå†è¿›è¡Œæ’值(请å‚阅 [member "
+"width] 和 [member height])。"
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -31892,27 +32055,27 @@ msgid ""
"by interpolating colors starting from [member fill_from] to [member fill_to] "
"offsets."
msgstr ""
+"æ¸å˜å¡«å……类型,是 [enum Fill] 中的æŸä¸ªå€¼ã€‚该纹ç†ä½¿ç”¨çš„æ˜¯ä½äºŽ [member "
+"fill_from] 到 [member fill_to] åç§»é‡çš„颜色,对它们进行æ’值填充。"
#: doc/classes/GradientTexture2D.xml
msgid ""
"The initial offset used to fill the texture specified in UV coordinates."
-msgstr ""
+msgstr "用于填充纹ç†çš„åˆå§‹åç§»é‡ï¼Œä½¿ç”¨ UV åæ ‡ã€‚"
#: doc/classes/GradientTexture2D.xml
msgid "The final offset used to fill the texture specified in UV coordinates."
-msgstr ""
+msgstr "用于填充纹ç†çš„结æŸåç§»é‡ï¼Œä½¿ç”¨ UV åæ ‡ã€‚"
#: doc/classes/GradientTexture2D.xml
-#, fuzzy
msgid "The [Gradient] used to fill the texture."
-msgstr "将用于填充纹ç†çš„[Gradient]。"
+msgstr "用于填充纹ç†çš„ [Gradient]。"
#: doc/classes/GradientTexture2D.xml
-#, fuzzy
msgid ""
"The number of vertical color samples that will be obtained from the "
"[Gradient], which also represents the texture's height."
-msgstr "将从[Gradient]中获得的颜色样本的数é‡ã€‚"
+msgstr "从 [Gradient] 上获å–的垂直颜色采样数,也表示纹ç†çš„高度。"
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -31920,6 +32083,8 @@ msgid ""
"filled starting from [member fill_from] to [member fill_to] offsets by "
"default, but the gradient fill can be repeated to cover the entire texture."
msgstr ""
+"æ¸å˜é‡å¤ç±»åž‹ï¼Œæ˜¯ [enum Repeat] 中的æŸä¸ªå€¼ã€‚该纹ç†é»˜è®¤ä»Žåç§»é‡ [member "
+"fill_from] 到 [member fill_to] 填充,但æ¸å˜å¡«å……å¯ä»¥é‡å¤ï¼Œä»Žè€Œè¦†ç›–整个纹ç†ã€‚"
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -31929,39 +32094,47 @@ msgid ""
"code], the generated texture will use low dynamic range; overbright colors "
"will be clamped ([constant Image.FORMAT_RGBA8] format)."
msgstr ""
+"如果为 [code]true[/code],则生æˆçš„纹ç†ä¼šæ”¯æŒé«˜åЍæ€èŒƒå›´ï¼ˆ[constant Image."
+"FORMAT_RGBAF] æ ¼å¼ï¼‰ã€‚å¯ä»¥åœ¨ [member Environment.glow_enabled] 为 "
+"[code]true[/code] 时实现å‘光效果。如果为 [code]false[/code],则生æˆçš„纹ç†ä¼šä½¿"
+"用低动æ€èŒƒå›´ï¼›è¿‡äº®çš„颜色会被钳制([constant Image.FORMAT_RGBA8] æ ¼å¼ï¼‰ã€‚"
#: doc/classes/GradientTexture2D.xml
-#, fuzzy
msgid ""
"The number of horizontal color samples that will be obtained from the "
"[Gradient], which also represents the texture's width."
-msgstr "将从[Gradient]中获得的颜色样本的数é‡ã€‚"
+msgstr "从 [Gradient] 上获å–的水平颜色采样数,也表示纹ç†çš„宽度。"
#: doc/classes/GradientTexture2D.xml
msgid "The colors are linearly interpolated in a straight line."
-msgstr ""
+msgstr "颜色按照直线进行线性æ’值。"
#: doc/classes/GradientTexture2D.xml
msgid "The colors are linearly interpolated in a circular pattern."
-msgstr ""
+msgstr "颜色按照圆形模å¼è¿›è¡Œçº¿æ€§æ’值。"
#: doc/classes/GradientTexture2D.xml
msgid ""
"The gradient fill is restricted to the range defined by [member fill_from] "
"to [member fill_to] offsets."
msgstr ""
+"æ¸å˜å¡«å……é™åˆ¶åœ¨ç”± [member fill_from] 到 [member fill_to] çš„åç§»é‡èŒƒå›´å†…。"
#: doc/classes/GradientTexture2D.xml
msgid ""
"The texture is filled starting from [member fill_from] to [member fill_to] "
"offsets, repeating the same pattern in both directions."
msgstr ""
+"纹ç†çš„填充从åç§»é‡ [member fill_from] 开始到 [member fill_to],两个方å‘都按照"
+"相åŒçš„æ¨¡å¼é‡å¤ã€‚"
#: doc/classes/GradientTexture2D.xml
msgid ""
"The texture is filled starting from [member fill_from] to [member fill_to] "
"offsets, mirroring the pattern in both directions."
msgstr ""
+"纹ç†çš„填充从åç§»é‡ [member fill_from] 开始到 [member fill_to],两个方å‘都按照"
+"相åŒçš„æ¨¡å¼é•œåƒé‡å¤ã€‚"
#: doc/classes/GraphEdit.xml
msgid ""
@@ -32666,11 +32839,13 @@ msgstr ""
"在[GridContainer]中的列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列其Controlæ´¾"
"生的å­ä»£ï¼Œä»¥é€‚应新的布局。"
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr "å­èŠ‚ç‚¹çš„æ°´å¹³åˆ†éš”é‡ã€‚"
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr "å­èŠ‚ç‚¹çš„åž‚ç›´åˆ†éš”é‡ã€‚"
@@ -32708,8 +32883,8 @@ msgstr ""
"GridMap 就都ä¸ä¼šè¢«ç›¸å…³çš„ç¯å…‰ç…§äº®ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
-msgstr "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
+msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -32761,6 +32936,13 @@ msgid ""
msgstr "返回一个包å«ç½‘格中éžç©ºå•å…ƒæ ¼åæ ‡çš„ [Vector3] 数组。"
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "返回所有具有[code]id[/code]中指定的图å—索引的å•元格的数组。"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr "返回一个网格å•元在 GridMap æœ¬åœ°åæ ‡ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
@@ -32996,11 +33178,11 @@ msgstr "哈希算法:SHA-256。"
#: doc/classes/HBoxContainer.xml
msgid "Horizontal box container."
-msgstr "水平盒容器。"
+msgstr "水平盒å¼å®¹å™¨ã€‚"
#: doc/classes/HBoxContainer.xml
msgid "Horizontal box container. See [BoxContainer]."
-msgstr "水平盒容器。请å‚阅 [BoxContainer]。"
+msgstr "水平盒å¼å®¹å™¨ã€‚请å‚阅 [BoxContainer]。"
#: doc/classes/HBoxContainer.xml
msgid "The horizontal space between the [HBoxContainer]'s elements."
@@ -33034,6 +33216,16 @@ msgid ""
"map_data]."
msgstr "高度图数æ®çš„宽度。更改此设置将调整 [member map_data] 的大å°ã€‚"
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal flow container."
+msgstr "水平盒å¼å®¹å™¨ã€‚"
+
+#: doc/classes/HFlowContainer.xml
+#, fuzzy
+msgid "Horizontal version of [FlowContainer]."
+msgstr "水平拆分容器。"
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr "两个 3D PhysicsBody 之间的铰链。"
@@ -33454,15 +33646,6 @@ msgstr ""
"是有效的,就å¯ä»¥æŽ¥å—。如果这是个问题,你å¯èƒ½æƒ³ä½¿ç”¨è‡ªåŠ¨ç®¡ç†çš„æœ‰æ•ˆæœŸçŸ­çš„è¯ä¹¦ã€‚"
#: doc/classes/HTTPClient.xml
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr "$DOCS_URL/tutorials/networking/http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr "关闭当å‰è¿žæŽ¥ï¼Œå…许é‡ç”¨æ­¤[HTTPClient]。"
@@ -34534,10 +34717,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/HTTPRequest.xml
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr "$DOCS_URL/tutorials/networking/http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr "å–æ¶ˆå½“å‰è¯·æ±‚。"
@@ -34718,8 +34897,8 @@ msgstr ""
"能无法导入。"
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
-msgstr "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
+msgstr ""
#: doc/classes/Image.xml
msgid ""
@@ -34998,9 +35177,9 @@ msgid ""
"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
msgstr ""
-"从BMP文件的二进制内容中加载图åƒã€‚\n"
-"[b]注æ„:[/b] Godotçš„BMP模å—䏿”¯æŒ16ä½åƒç´ çš„图åƒã€‚åªæ”¯æŒ1ä½ã€4ä½ã€8ä½ã€24ä½å’Œ"
-"32ä½åƒç´ çš„图åƒã€‚"
+"从 BMP 文件的二进制内容中加载图åƒã€‚\n"
+"[b]注æ„:[/b]Godot çš„ BMP 模å—䏿”¯æŒ 16 ä½åƒç´ çš„图åƒã€‚åªæ”¯æŒ 1 ä½ã€4 ä½ã€8 "
+"ä½ã€24 ä½å’Œ 32 ä½åƒç´ çš„图åƒã€‚"
#: doc/classes/Image.xml
msgid "Loads an image from the binary contents of a JPEG file."
@@ -35153,7 +35332,7 @@ msgstr "è§£é”æ•°æ®å¹¶é˜²æ­¢æ›´æ”¹ã€‚"
msgid ""
"Holds all the image's color data in a given format. See [enum Format] "
"constants."
-msgstr "以给定的格å¼ä¿å­˜å›¾åƒçš„æ‰€æœ‰é¢œè‰²æ•°æ®ã€‚å‚阅[enum Format]常é‡ã€‚"
+msgstr "以给定的格å¼ä¿å­˜å›¾åƒçš„æ‰€æœ‰é¢œè‰²æ•°æ®ã€‚å‚阅 [enum Format] 常é‡ã€‚"
#: doc/classes/Image.xml
msgid "The maximal width allowed for [Image] resources."
@@ -35221,8 +35400,8 @@ msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
msgstr ""
-"OpenGLçº¹ç†æ ¼å¼ [code]GL_RGB5_A1[/code],其中 RGB æ¯ä¸ªåˆ†é‡çš„æ·±åº¦ä¸º 5 ä½ï¼ŒAlpha"
-"为 1 ä½ã€‚"
+"OpenGL çº¹ç†æ ¼å¼ [code]GL_RGB5_A1[/code],其中 RGB æ¯ä¸ªåˆ†é‡çš„æ·±åº¦ä¸º 5 ä½ï¼Œ"
+"Alpha 为 1 ä½ã€‚"
#: doc/classes/Image.xml
msgid ""
@@ -35259,7 +35438,7 @@ msgid ""
"OpenGL texture format [code]GL_R32F[/code] where there's one component, a 16-"
"bit \"half-precision\" floating-point value."
msgstr ""
-"OpenGLçº¹ç†æ ¼å¼[code]GL_R32F[/code],其中有一个分é‡ï¼Œå³16ä½ \"åŠç²¾åº¦ \"浮点"
+"OpenGL çº¹ç†æ ¼å¼ [code]GL_R32F[/code],其中有一个分é‡ï¼Œå³ 16 ä½â€œåŠç²¾åº¦â€æµ®ç‚¹"
"值。"
#: doc/classes/Image.xml
@@ -35267,32 +35446,32 @@ msgid ""
"OpenGL texture format [code]GL_RG32F[/code] where there are two components, "
"each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-"OpenGLçº¹ç†æ ¼å¼[code]GL_RG32F[/code],其中有两个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯16ä½ \"åŠç²¾"
-"度 \"浮点值。"
+"OpenGL çº¹ç†æ ¼å¼ [code]GL_RG32F[/code],其中有两个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯ 16 ä½â€œåŠ"
+"ç²¾åº¦â€æµ®ç‚¹å€¼ã€‚"
#: doc/classes/Image.xml
msgid ""
"OpenGL texture format [code]GL_RGB32F[/code] where there are three "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB32F[/code],其中有三个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯16ä½ \"åŠç²¾"
-"度 \"浮点值。"
+"OpenGL çº¹ç†æ ¼å¼ [code]GL_RGB32F[/code],其中有三个部分,æ¯ä¸ªéƒ¨åˆ†éƒ½æ˜¯ 16 ä½â€œåŠ"
+"ç²¾åº¦â€æµ®ç‚¹å€¼ã€‚"
#: doc/classes/Image.xml
msgid ""
"OpenGL texture format [code]GL_RGBA32F[/code] where there are four "
"components, each a 16-bit \"half-precision\" floating-point value."
msgstr ""
-"OpenGLçº¹ç†æ ¼å¼[code]GL_RGBA32F[/code],其中有四个部分,æ¯ä¸ªéƒ½æ˜¯16ä½\"åŠç²¾åº¦ "
-"\"浮点值。"
+"OpenGL çº¹ç†æ ¼å¼ [code]GL_RGBA32F[/code],其中有四个部分,æ¯ä¸ªéƒ½æ˜¯ 16 ä½â€œåŠç²¾"
+"åº¦â€æµ®ç‚¹å€¼ã€‚"
#: doc/classes/Image.xml
msgid ""
"A special OpenGL texture format where the three color components have 9 bits "
"of precision and all three share a single 5-bit exponent."
msgstr ""
-"一ç§ç‰¹æ®Šçš„OpenGLçº¹ç†æ ¼å¼ï¼Œå…¶ä¸­ä¸‰ä¸ªé¢œè‰²æˆåˆ†çš„精度为9ä½ï¼Œæ‰€æœ‰ä¸‰ä¸ªæˆåˆ†å…±äº«ä¸€ä¸ª5"
-"比特ä½çš„æŒ‡æ•°ã€‚"
+"一ç§ç‰¹æ®Šçš„ OpenGL çº¹ç†æ ¼å¼ï¼Œå…¶ä¸­ä¸‰ä¸ªé¢œè‰²æˆåˆ†çš„精度为 9 ä½ï¼Œæ‰€æœ‰ä¸‰ä¸ªæˆåˆ†å…±äº«ä¸€"
+"个 5 比特ä½çš„æŒ‡æ•°ã€‚"
#: doc/classes/Image.xml
msgid ""
@@ -35433,9 +35612,10 @@ msgid ""
"url], also referred to as \"ETC1\", and is part of the OpenGL ES graphics "
"standard. This format cannot store an alpha channel."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#ETC1]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 1[/url],åˆç§°â€œETC1â€ï¼Œ"
-"是 OpenGL ES å›¾å½¢æ ‡å‡†çš„ä¸€éƒ¨åˆ†ã€‚è¿™ç§æ ¼å¼æ— æ³•存储 Alpha 通é“。"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#ETC1]爱立信纹"
+"ç†åŽ‹ç¼©æ ¼å¼ 1[/url],åˆç§°â€œETC1â€ï¼Œæ˜¯ OpenGL ES å›¾å½¢æ ‡å‡†çš„ä¸€éƒ¨åˆ†ã€‚è¿™ç§æ ¼å¼æ— æ³•å­˜"
+"储 Alpha 通é“。"
#: doc/classes/Image.xml
msgid ""
@@ -35444,9 +35624,10 @@ msgid ""
"format 2[/url] ([code]R11_EAC[/code] variant), which provides one channel of "
"unsigned data."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]R11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°æ®é€šé“。"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]R11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°æ®"
+"通é“。"
#: doc/classes/Image.xml
msgid ""
@@ -35455,9 +35636,10 @@ msgid ""
"format 2[/url] ([code]SIGNED_R11_EAC[/code] variant), which provides one "
"channel of signed data."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]SIGNED_R11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæœ‰ç¬¦å·æ•°æ®é€šé“。"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]SIGNED_R11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæœ‰"
+"ç¬¦å·æ•°æ®é€šé“。"
#: doc/classes/Image.xml
msgid ""
@@ -35466,9 +35648,10 @@ msgid ""
"format 2[/url] ([code]RG11_EAC[/code] variant), which provides two channels "
"of unsigned data."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]RG11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°æ®é€šé“。"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]RG11_EAC[/code] å˜ä½“),它æä¾›ä¸€ä¸ªæ— ç¬¦å·æ•°"
+"æ®é€šé“。"
#: doc/classes/Image.xml
msgid ""
@@ -35477,9 +35660,10 @@ msgid ""
"format 2[/url] ([code]SIGNED_RG11_EAC[/code] variant), which provides two "
"channels of signed data."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]SIGNED_RG11_EAC[/code] å˜ä½“),它æä¾›ä¸¤ä¸ªæœ‰ç¬¦å·æ•°æ®é€šé“。"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]SIGNED_RG11_EAC[/code] å˜ä½“),它æä¾›ä¸¤ä¸ªæœ‰"
+"ç¬¦å·æ•°æ®é€šé“。"
#: doc/classes/Image.xml
msgid ""
@@ -35490,9 +35674,10 @@ msgid ""
"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
"conversion is performed."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]RGB8[/code] å˜ä½“),它是 ETC1 çš„åŽç»­ç‰ˆæœ¬ï¼Œå¯åŽ‹ç¼© RGB888 æ•°æ®ã€‚\n"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]RGB8[/code] å˜ä½“),它是 ETC1 çš„åŽç»­ç‰ˆæœ¬ï¼Œ"
+"å¯åŽ‹ç¼© RGB888 æ•°æ®ã€‚\n"
"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行 sRGB 到线性色彩空间的转æ¢ã€‚"
#: doc/classes/Image.xml
@@ -35504,9 +35689,10 @@ msgid ""
"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
"conversion is performed."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]RGBA8[/code] å˜ä½“),它å¯ä»¥åŽ‹ç¼© RGBA8888 æ•°æ®ï¼Œå®Œå…¨æ”¯æŒ Alpha。\n"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]RGBA8[/code] å˜ä½“),它å¯ä»¥åŽ‹ç¼© RGBA8888 æ•°"
+"æ®ï¼Œå®Œå…¨æ”¯æŒ Alpha。\n"
"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行 sRGB 到线性色彩空间的转æ¢ã€‚"
#: doc/classes/Image.xml
@@ -35519,10 +35705,10 @@ msgid ""
"[b]Note:[/b] When creating an [ImageTexture], an sRGB to linear color space "
"conversion is performed."
msgstr ""
-"[url=https://zh.wikipedia.org/zh-cn/%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA"
-"%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]"
-"([code]RGB8_PUNCHTHROUGH_ALPHA1[/code] å˜ä½“),它å¯ä»¥åŽ‹ç¼© RGBA æ•°æ®ï¼Œä½¿ "
-"Alpha å®Œå…¨é€æ˜Žæˆ–完全ä¸é€æ˜Žã€‚\n"
+"[url=https://zh.wikipedia.org/zh-cn/"
+"%E7%88%B1%E7%AB%8B%E4%BF%A1%E7%BA%B9%E7%90%86%E5%8E%8B%E7%BC%A9#[3]ETC2%E5%92%8CEAC]"
+"爱立信纹ç†åŽ‹ç¼©æ ¼å¼ 2[/url]([code]RGB8_PUNCHTHROUGH_ALPHA1[/code] å˜ä½“),它"
+"å¯ä»¥åŽ‹ç¼© RGBA æ•°æ®ï¼Œä½¿ Alpha å®Œå…¨é€æ˜Žæˆ–完全ä¸é€æ˜Žã€‚\n"
"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行 sRGB 到线性色彩空间的转æ¢ã€‚"
#: doc/classes/Image.xml
@@ -35634,6 +35820,11 @@ msgid ""
"compressed into two channels)."
msgstr "原始纹ç†ï¼ˆåœ¨åŽ‹ç¼©å‰ï¼‰æ˜¯æ³•线纹ç†ï¼ˆä¾‹å¦‚,å¯ä»¥åŽ‹ç¼©ä¸ºä¸¤ä¸ªé€šé“)。"
+#: doc/classes/Image.xml
+#, fuzzy
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr "原始纹ç†ï¼ˆåœ¨åŽ‹ç¼©å‰ï¼‰ä½¿ç”¨ sRGB 空间。"
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr "基于 [Image] 图片的 [Texture] 纹ç†ã€‚"
@@ -35888,8 +36079,8 @@ msgstr ""
"件。"
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
-msgstr "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
+msgstr ""
#: doc/classes/Input.xml
msgid ""
@@ -35963,11 +36154,11 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"返回介于0和1之间的值,代表给定动作的原始强度,忽略动作的死区。在大多数情况"
-"下,你应该使用[method get_action_strength]æ¥ä»£æ›¿ã€‚\n"
-"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
-"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
-"å‘。"
+"返回介于 0 和 1 之间的值,代表给定动作的原始强度,忽略动作的死区。在大多数情"
+"况下,你应该使用 [method get_action_strength] æ¥ä»£æ›¿ã€‚\n"
+"如果 [code]exact[/code] 是 [code]false[/code],它将忽略 [InputEventKey] 和 "
+"[InputEventMouseButton] äº‹ä»¶çš„è¾“å…¥ä¿®é¥°ç¬¦ï¼Œä»¥åŠ [InputEventJoypadMotion] 事件"
+"的方å‘。"
#: doc/classes/Input.xml
msgid ""
@@ -36189,8 +36380,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"如果你正在按下动作事件,返回 [code]true[/code]。请注æ„,如果一个动作有多个分"
@@ -36231,8 +36422,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"如果你正在按当å‰é”®ç›˜å¸ƒå±€ä¸­çš„这个键,则返回 [code]true[/code]。å¯ä»¥ä¼  [enum "
@@ -36361,10 +36552,10 @@ msgid ""
"[b]Note:[/b] This method generates an [InputEventMouseMotion] to update "
"cursor immediately."
msgstr ""
-"è®¾ç½®è§†çª—ä¸­ä½¿ç”¨çš„é»˜è®¤å…‰æ ‡å½¢çŠ¶ï¼Œè€Œä¸æ˜¯[constant CURSOR_ARROW]。\n"
-"[b]注æ„:[/b]å¦‚æžœè¦æ›´æ”¹[Control]节点的默认光标形状,请改用 [member Control."
+"è®¾ç½®è§†çª—ä¸­ä½¿ç”¨çš„é»˜è®¤å…‰æ ‡å½¢çŠ¶ï¼Œè€Œä¸æ˜¯ [constant CURSOR_ARROW]。\n"
+"[b]注æ„:[/b]å¦‚æžœè¦æ›´æ”¹ [Control] 节点的默认光标形状,请改用 [member Control."
"mouse_default_cursor_shape]。\n"
-"[b]注æ„:[/b]这个方法生æˆä¸€ä¸ª[InputEventMouseMotion]ä»¥ç«‹å³æ›´æ–°æ¸¸æ ‡ã€‚"
+"[b]注æ„:[/b]这个方法会生æˆä¸€ä¸ª [InputEventMouseMotion] ä»¥ç«‹å³æ›´æ–°å…‰æ ‡ã€‚"
#: doc/classes/Input.xml
msgid ""
@@ -36374,9 +36565,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
-"设置加速度传感器的é‡åŠ›å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上"
-"的编辑器中。\n"
-"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值覆盖。"
+"设置加速度传感器的é‡åŠ›å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在 PC "
+"上的编辑器中。\n"
+"[b]注æ„:[/b]这个值在 Android å’Œ iOS 上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值覆盖。"
#: doc/classes/Input.xml
msgid ""
@@ -36386,9 +36577,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
-"设置陀螺仪传感器的旋转速率值。å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在"
-"PC上的编辑器中。\n"
-"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
+"设置陀螺仪传感器的旋转速率值。å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在 "
+"PC 上的编辑器中。\n"
+"[b]注æ„:[/b]在 Android å’Œ iOS 上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml
msgid ""
@@ -36398,9 +36589,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
-"设置ç£åŠ›ä¼ æ„Ÿå™¨çš„ç£åœºå€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上的"
-"编辑器中。\n"
-"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
+"设置ç£åŠ›ä¼ æ„Ÿå™¨çš„ç£åœºå€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在 PC 上"
+"的编辑器中。\n"
+"[b]注æ„:[/b]在 Android å’Œ iOS 上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml
msgid "Sets the mouse mode. See the constants for more information."
@@ -36461,8 +36652,13 @@ msgstr ""
"æŒç»­æ—¶é—´ã€‚"
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
-msgstr "å°†é¼ æ ‡åæ ‡è®¾ç½®ä¸ºæŒ‡å®šçš„å‘é‡ã€‚"
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
+msgstr ""
#: doc/classes/Input.xml
msgid "Emitted when a joypad device has been connected or disconnected."
@@ -36614,13 +36810,9 @@ msgstr "通用输入事件。"
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr "å„ç§è¾“入事件的基类。请å‚阅 [method Node._input]。"
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
-msgstr "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
+msgstr ""
#: doc/classes/InputEvent.xml
msgid ""
@@ -36676,8 +36868,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"如果给定的动作被按下,则返回 [code]true[/code]ï¼Œå¹¶ä¸”ä¸æ˜¯ [InputEventKey] 事件"
@@ -36725,8 +36917,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
"如果这个输入事件被按下,则返回 [code]true[/code]。与 [InputEventMouseMotion] "
@@ -36791,8 +36983,9 @@ msgstr ""
"èœå•中的[b]键使˜ å°„[/b]选项å¡ä¸­åˆ›å»ºã€‚请å‚阅 [method Node._input]。"
#: doc/classes/InputEventAction.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
-msgstr "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+#, fuzzy
+msgid "InputEvent: Actions"
+msgstr "动作的输入事件类型。"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -37010,24 +37203,19 @@ msgstr ""
"行 MIDI 输入。"
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
-"https://zh.wikipedia.org/zh-cn/General_MIDI#%E9%9F%B3%E8%89%B2%E8%BD%89%E6%8F"
-"%9B%E4%BA%8B%E4%BB%B6%EF%BC%88Program_change_events%EF%BC%89"
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+#, fuzzy
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
-"https://zh.wikipedia.org/zh-cn/%E9%8B%BC%E7%90%B4%E9%8D%B5%E9%A0%BB%E7%8E%87#"
-"%E5%88%97%E8%A1%A8"
+"https://zh.wikipedia.org/zh-cn/"
+"%E9%8B%BC%E7%90%B4%E9%8D%B5%E9%A0%BB%E7%8E%87#%E5%88%97%E8%A1%A8"
#: doc/classes/InputEventMIDI.xml
msgid ""
@@ -37069,7 +37257,6 @@ msgstr ""
"都å‡ä¸€ã€‚标准钢ç´çš„ä¹å™¨å·ä¸º 0。"
#: doc/classes/InputEventMIDI.xml
-#, fuzzy
msgid ""
"Returns a value indicating the type of message for this MIDI signal. This is "
"a member of the [enum @GlobalScope.MidiMessageList] enum.\n"
@@ -37083,7 +37270,8 @@ msgid ""
"For more information, see the MIDI message status byte list chart linked "
"above."
msgstr ""
-"返回表示这个 MIDI ä¿¡å·ç±»åž‹çš„值,是 MidiMessageList 枚举的æˆå‘˜ã€‚\n"
+"返回表示这个 MIDI ä¿¡å·ç±»åž‹çš„值,是 [enum @GlobalScope.MidiMessageList] 枚举的"
+"æˆå‘˜ã€‚\n"
"对于在 0x80 å’Œ 0xEF 之间的 MIDI 消æ¯ï¼Œè¿™ä¸ªå€¼è¿”回的是左åŠéƒ¨åˆ†çš„æ¯”特ä½ï¼Œå¦ä¸€åŠ"
"是通é“(例:0x94 ä¼šå˜æˆ 0x9)。对于在 0xF0 到 0xFF 之间的 MIDI 消æ¯ï¼Œè¿™ä¸ªå€¼æ˜¯"
"原样返回的。\n"
@@ -37098,7 +37286,7 @@ msgid ""
"On a piano, middle C is 60, and A440 is 69, see the \"MIDI note\" column of "
"the piano key frequency chart on Wikipedia for more information."
msgstr ""
-"这个 MIDI ä¿¡å·çš„音调索引å·ã€‚这个值的范围为 0 到 127。在钢ç´ä¸Šï¼Œä¸­å¤® C 是 60,"
+"这个 MIDI ä¿¡å·çš„音高索引å·ã€‚这个值的范围为 0 到 127。在钢ç´ä¸Šï¼Œä¸­å¤® C 是 60,"
"而 A440 是 69,更多信æ¯è¯·å‚阅维基百科钢ç´ç´é”®é¢‘率表的“MIDI 音符â€åˆ—。"
#: doc/classes/InputEventMIDI.xml
@@ -37132,23 +37320,22 @@ msgstr "é¼ æ ‡æŒ‰é’®æŽ©ç æ ‡è¯†ç¬¦ï¼Œæ˜¯[enum ButtonList] 按钮掩ç ä¹‹ä¸€æˆ–
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
-"ç›¸å¯¹äºŽå½“å‰ [Viewport] 的全局鼠标ä½ç½®ã€‚如果在 [method Control._gui_input] 中使"
-"ç”¨ï¼Œå¹¶ä¸”å½“å‰ [Control] ä¸åœ¨é¼ æ ‡ä¹‹ä¸‹ï¼Œç§»åЍä¸ä¼šæ›´æ–°è¿™ä¸ªå€¼ã€‚"
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
-"ç›¸å¯¹äºŽå½“å‰ [Viewport] 的局部鼠标ä½ç½®ã€‚如果在 [method Control._gui_input] 中使"
-"用,该ä½ç½®æ˜¯ç›¸å¯¹äºŽé¼ æ ‡ä¹‹ä¸‹çš„å½“å‰ [Control] çš„ã€‚å¦‚æžœå½“å‰ [Control] ä¸åœ¨é¼ æ ‡ä¹‹"
-"下,移动ä¸ä¼šæ›´æ–°è¿™ä¸ªå€¼ã€‚"
#: doc/classes/InputEventMouseButton.xml
msgid "Input event type for mouse button events."
@@ -37158,10 +37345,6 @@ msgstr "鼠标按钮事件的输入事件类型。"
msgid "Contains mouse click information. See [method Node._input]."
msgstr "包å«é¼ æ ‡ç‚¹å‡»ä¿¡æ¯ã€‚è§[method Node._input]。"
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -37203,9 +37386,9 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
msgstr ""
"包å«é¼ æ ‡å’Œç¬”çš„è¿åŠ¨ä¿¡æ¯ã€‚支æŒç›¸å¯¹ã€ç»å¯¹ä½ç½®å’Œé€Ÿåº¦ã€‚å‚阅[method Node."
"_input]。\n"
@@ -37217,6 +37400,11 @@ msgstr ""
"移动鼠标时出现å¯è§çš„线æ¡ç©ºéš™ã€‚"
#: doc/classes/InputEventMouseMotion.xml
+#, fuzzy
+msgid "Mouse and input coordinates"
+msgstr "X åæ ‡ä¸Šçš„åŠå移。"
+
+#: doc/classes/InputEventMouseMotion.xml
msgid ""
"Represents the pressure the user puts on the pen. Ranges from [code]0.0[/"
"code] to [code]1.0[/code]."
@@ -37356,10 +37544,6 @@ msgstr ""
"改。请å‚阅 [method Node._input]。"
#: doc/classes/InputMap.xml
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr "给一个动作添加一个[InputEvent]。这个[InputEvent]将触å‘这个动作。"
@@ -37919,7 +38103,7 @@ msgstr "索引所对应的项目被选中时,返回 [code]true[/code]。"
#: doc/classes/ItemList.xml
msgid "Moves item from index [code]from_idx[/code] to [code]to_idx[/code]."
-msgstr "将项目从索引[code]from_idx[/code]移到[code]to_idx[/code]。"
+msgstr "将项目从索引 [code]from_idx[/code] 移到 [code]to_idx[/code]。"
#: doc/classes/ItemList.xml
msgid "Removes the item specified by [code]idx[/code] index from the list."
@@ -38247,14 +38431,6 @@ msgstr ""
#: doc/classes/JavaScript.xml
msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-
-#: doc/classes/JavaScript.xml
-msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
@@ -38320,6 +38496,29 @@ msgstr ""
"JavaScript[code]window[/code]的一个有效属性。回调必须接å—一个[Array]傿•°ï¼Œå®ƒ"
"将包å«JavaScript [code]arguments[/code]。å‚阅[JavaScriptObject]的用法。"
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr "原生 JavaScript 对象的å°è£…类。"
@@ -38420,8 +38619,8 @@ msgstr ""
"url]。"
#: doc/classes/JNISingleton.xml
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
-msgstr "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
+msgstr ""
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -38438,8 +38637,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://godotengine.org/asset-library/asset/524"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -38516,13 +38715,18 @@ msgid ""
msgstr "è§£æžä¸€ä¸ªJSONç¼–ç çš„字符串并返回一个包å«ç»“果的[JSONParseResult]。"
#: doc/classes/JSON.xml
+#, fuzzy
msgid ""
"Converts a [Variant] var to JSON text and returns the result. Useful for "
"serializing data to store or send over the network.\n"
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -38532,18 +38736,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -38631,26 +38851,26 @@ msgid ""
" push_error(\"Unexpected results.\")\n"
"[/codeblock]"
msgstr ""
-"包å«è§£æžè¿‡JSONçš„å˜é‡[Variant]。使用[method @GDScript.typeof]或[code]is[/code]"
-"å…³é”®å­—æ¥æ£€æŸ¥å®ƒæ˜¯å¦æ˜¯ä½ æœŸæœ›çš„。例如,如果JSONæºä»¥èŠ±æ‹¬å·å¼€å§‹ï¼ˆ[code]{}[/"
-"code]),将返回一个字典[Dictionary]。如果JSONæºä»¥æ–¹æ‹¬å·å¼€å§‹ï¼ˆ[code][][/"
-"code]),将返回一个数组[Array]。\n"
-"[b]注æ„:[/b] JSONè§„èŒƒæ²¡æœ‰å®šä¹‰æ•´æ•°æˆ–æµ®ç‚¹æ•°ç±»åž‹ï¼Œè€Œåªæœ‰ä¸€ä¸ªæ•°å­—[i]number[/i]ç±»"
-"型。因此,解æžJSON文本将把所有的数字值转æ¢ä¸ºæµ®ç‚¹[float]类型。\n"
-"[b]注æ„:[/b]JSON对象ä¸åƒGodot字典那样ä¿ç•™é”®çš„顺åºï¼Œå› æ­¤ï¼Œå¦‚果一个字典是由"
-"JSON构建的,你ä¸åº”该ä¾èµ–键是按一定顺åºçš„。与此相å,JSON数组ä¿ç•™å…¶å…ƒç´ çš„顺"
-"åºã€‚\n"
+"包å«è§£æžè¿‡ JSON çš„å˜é‡ [Variant]。使用 [method @GDScript.typeof] 或 "
+"[code]is[/code] å…³é”®å­—æ¥æ£€æŸ¥å®ƒæ˜¯å¦æ˜¯ä½ æœŸæœ›çš„。例如,如果 JSON æºä»¥èŠ±æ‹¬å·å¼€å§‹"
+"([code]{}[/code]),将返回一个字典 [Dictionary]。如果 JSON æºä»¥æ–¹æ‹¬å·å¼€å§‹"
+"([code][][/code]),将返回一个数组 [Array]。\n"
+"[b]注æ„:[/b]JSON è§„èŒƒæ²¡æœ‰å®šä¹‰æ•´æ•°æˆ–æµ®ç‚¹æ•°ç±»åž‹ï¼Œåªæœ‰ä¸€ä¸ª[i]æ•°å­—[/i]类型。因"
+"æ­¤ï¼Œè§£æž JSON 文本将把所有的数字值转æ¢ä¸º [float] 类型。\n"
+"[b]注æ„:[/b]JSON 对象ä¸åƒ Godot 字典那样ä¿ç•™é”®çš„顺åºï¼Œå› æ­¤ï¼Œå¦‚果一个字典是"
+"ç”± JSON 构建的,你ä¸åº”该ä¾èµ–键是按一定顺åºçš„。与此相å,JSON 数组ä¿ç•™å…¶å…ƒç´ çš„"
+"顺åºã€‚\n"
"[codeblock]\n"
"var p = JSON.parse('[\"hello\", \"world\", \"!\"]' )\n"
"if typeof(p.result) == TYPE_ARRAY:\n"
" print(p.result[0]) # æ‰“å° \"hello\"\n"
"else:\n"
-" push_error(\"Unexpected results.\")#æ„外的结果。\n"
+" push_error(\"å‡ºä¹Žæ„æ–™çš„结果。\")\n"
"[/codeblock]"
#: doc/classes/JSONRPC.xml
msgid "A helper to handle dictionaries which look like JSONRPC documents."
-msgstr "用于处ç†çœ‹èµ·æ¥åƒJSONRPC文档的字典的助手。"
+msgstr "用于处ç†çœ‹èµ·æ¥åƒ JSONRPC 文档的字典的辅助类。"
#: doc/classes/JSONRPC.xml
msgid ""
@@ -38778,8 +38998,8 @@ msgstr ""
"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
-msgstr "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
+msgstr ""
#: doc/classes/KinematicBody.xml
msgid ""
@@ -39117,8 +39337,9 @@ msgstr ""
"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody2D.xml
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
-msgstr "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+#, fuzzy
+msgid "Using KinematicBody2D"
+msgstr "2D è¿åŠ¨ä½“èŠ‚ç‚¹ã€‚"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -39419,7 +39640,7 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Returns the amount of lines of text the Label has."
-msgstr "返回Label标签的文本行数。"
+msgstr "返回该 Label 的文本行数。"
#: doc/classes/Label.xml
msgid "Returns the font size in pixels."
@@ -39435,7 +39656,7 @@ msgstr "è¿”å›žæ–‡æœ¬ä¸­å¯æ‰“å°çš„字符总数,ä¸åŒ…括空格和æ¢è¡Œç¬¦ã€‚
msgid ""
"Returns the number of lines shown. Useful if the [Label]'s height cannot "
"currently display all lines."
-msgstr "返回显示的行数。如果[Label]çš„é«˜åº¦ç›®å‰æ— æ³•显示所有的行数,将会有用。"
+msgstr "返回显示的行数。如果 [Label] çš„é«˜åº¦ç›®å‰æ— æ³•显示所有的行数,将会有用。"
#: doc/classes/Label.xml
msgid ""
@@ -39477,8 +39698,8 @@ msgid ""
"code] to 0.5, only up to half of the text's characters will display on "
"screen. Useful to animate the text in a dialog box."
msgstr ""
-"é™åˆ¶å¯è§å­—符的数é‡ã€‚如果你把[code]%_visible[/code]设置为0.5,å±å¹•上最多åªèƒ½æ˜¾"
-"示文本的一åŠå­—ç¬¦ã€‚è¿™åœ¨å¯¹è¯æ¡†ä¸­å¯¹æ–‡æœ¬è¿›è¡ŒåŠ¨ç”»å¤„ç†å¾ˆæœ‰ç”¨ã€‚"
+"é™åˆ¶å¯è§å­—符的数é‡ã€‚如果你把 [code]percent_visible[/code] 设置为 0.5,则å±å¹•"
+"上最多åªèƒ½æ˜¾ç¤ºè¯¥æ–‡æœ¬ä¸­ä¸€åŠæ•°é‡çš„å­—ç¬¦ã€‚è¿™åœ¨å¯¹è¯æ¡†ä¸­å¯¹æ–‡æœ¬è¿›è¡ŒåŠ¨ç”»å¤„ç†å¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/Label.xml
msgid "The text to display on screen."
@@ -39497,7 +39718,7 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Restricts the number of characters to display. Set to -1 to disable."
-msgstr "é™åˆ¶æ˜¾ç¤ºçš„字符数。设置为-1表示ç¦ç”¨é™åˆ¶ã€‚"
+msgstr "é™åˆ¶æ˜¾ç¤ºçš„字符数。设置为 -1 表示ç¦ç”¨é™åˆ¶ã€‚"
#: doc/classes/Label.xml
msgid "Align rows to the left (default)."
@@ -39505,11 +39726,11 @@ msgstr "将行左对é½ï¼Œé»˜è®¤ã€‚"
#: doc/classes/Label.xml
msgid "Align rows centered."
-msgstr "居中对é½è¡Œã€‚"
+msgstr "将行居中对é½ã€‚"
#: doc/classes/Label.xml
msgid "Align rows to the right."
-msgstr "将行å‘å³å¯¹é½ã€‚"
+msgstr "将行å³å¯¹é½ã€‚"
#: doc/classes/Label.xml
msgid "Expand row whitespaces to fit the width."
@@ -39641,6 +39862,10 @@ msgstr ""
"Light 是ç¯å…‰èŠ‚ç‚¹çš„[i]抽象[/i]基类。它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以它ä¸åº”该被直接使用。其"
"他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚ç¯å…‰åŒ…å«ç”¨äºŽç…§æ˜Žçš„常用å˜é‡å’Œå‚数。"
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
msgid "Returns the value of the specified [enum Light.Param] parameter."
msgstr "返回指定的 [enum Light.Param] 傿•°çš„值。"
@@ -39702,9 +39927,9 @@ msgid ""
"this value will make the shadows appear blurrier. This can be used to "
"simulate area lights to an extent."
msgstr ""
-"ç¯å…‰çš„大å°ï¼Œä»¥Godotçš„å•ä½ã€‚åªåœ¨çƒ˜çƒ¤çš„光照贴图中考虑,并且åªåœ¨[member "
-"light_bake_mode]被设置为[constant BAKE_ALL]æ—¶è€ƒè™‘ã€‚å¢žåŠ è¿™ä¸ªå€¼ä¼šä½¿é˜´å½±çœ‹èµ·æ¥æ›´"
-"模糊。这å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šç”¨äºŽæ¨¡æ‹ŸåŒºåŸŸç¯å…‰ã€‚"
+"ç¯å…‰çš„大å°ï¼Œä½¿ç”¨ Godot çš„å•ä½ã€‚åªåœ¨çƒ˜ç„™çš„光照贴图中考虑,并且åªåœ¨ [member "
+"light_bake_mode] 被设置为 [constant BAKE_ALL] 时考虑。增加这个值会使阴影看起"
+"æ¥æ›´æ¨¡ç³Šã€‚è¿™å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šç”¨äºŽæ¨¡æ‹ŸåŒºåŸŸç¯å…‰ã€‚"
#: doc/classes/Light.xml
msgid ""
@@ -39870,10 +40095,6 @@ msgstr ""
"模å¼ï¼ˆå‚阅常数)以åŠå…¶ä»–å„ç§å‚数(与范围和阴影有关)æ¥å®šä¹‰ã€‚\n"
"[b]注æ„:[/b] Light2D也å¯ä»¥ä½œä¸ºä¸€ä¸ªé®ç½©ä½¿ç”¨ã€‚"
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr "Light2D光的颜色 [Color]。"
@@ -41802,13 +42023,12 @@ msgid "Returns the number of faces in this [Mesh]."
msgstr "返回这个[Mesh]ä¸­çš„é¢æ•°ã€‚"
#: doc/classes/MeshDataTool.xml
-#, fuzzy
msgid ""
"Returns specified edge associated with given face.\n"
"Edge argument must be either 0, 1, or 2 because a face only has three edges."
msgstr ""
"返回与给定é¢å…³è”的指定边。\n"
-"Edge傿•°å¿…é¡»å°äºŽç­‰äºŽ2,因为é¢åªæœ‰3æ¡è¾¹ã€‚"
+"è¾¹å‚æ•°å¿…须是 0ã€1ã€2 之一,因为é¢åªæœ‰ 3 æ¡è¾¹ã€‚"
#: doc/classes/MeshDataTool.xml
msgid "Returns the metadata associated with the given face."
@@ -41819,14 +42039,13 @@ msgid "Calculates and returns the face normal of the given face."
msgstr "计算并返回给定é¢çš„颿³•线。"
#: doc/classes/MeshDataTool.xml
-#, fuzzy
msgid ""
"Returns the specified vertex of the given face.\n"
"Vertex argument must be either 0, 1, or 2 because faces contain three "
"vertices."
msgstr ""
"返回给定é¢çš„æŒ‡å®šé¡¶ç‚¹ã€‚\n"
-"é¡¶ç‚¹å‚æ•°å¿…é¡»å°äºŽç­‰äºŽ2,因为é¢åŒ…å«3个顶点。"
+"é¡¶ç‚¹å‚æ•°å¿…须是 0ã€1ã€2 之一,因为é¢åŒ…å« 3 个顶点。"
#: doc/classes/MeshDataTool.xml
msgid ""
@@ -42072,15 +42291,10 @@ msgstr ""
"\"创建Mesh2D\"。"
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr "$DOCS_URL/tutorials/2d/2d_meshes.html"
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr "[Mesh]将由[MeshInstance2D]绘制。"
#: doc/classes/MeshInstance2D.xml doc/classes/MultiMeshInstance2D.xml
-#, fuzzy
msgid ""
"The normal map that will be used if using the default [CanvasItemMaterial].\n"
"[b]Note:[/b] Godot expects the normal map to use X+, Y+, and Z+ coordinates. "
@@ -42088,10 +42302,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"如果使用默认的[CanvasItemMaterial],法线贴图将被使用。\n"
-"[b]注æ„:[/b] Godot期望法线映射使用X+, Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™"
-"一页[/url],以获得æµè¡Œå¼•擎期望的标准法å‘图忠‡çš„æ¯”较。"
+"如果使用默认的 [CanvasItemMaterial],法线贴图将被使用。\n"
+"[b]注æ„:[/b]Godot 希望法线贴图使用 X+ã€Y+ å’Œ Z+ åæ ‡ã€‚请å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该页[/url],了解æµè¡Œ"
+"å¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/MeshInstance2D.xml doc/classes/MultiMeshInstance2D.xml
msgid ""
@@ -42270,11 +42485,11 @@ msgid ""
" get_viewport().arvr = true\n"
"[/codeblock]"
msgstr ""
-"这是通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰€ä½¿ç”¨çš„æ‰‹æœºå’ŒHMD的细节。它ä¸ä¾èµ–于任何现"
-"有的框架。这是我们拥有的最基本的接å£ã€‚为了达到最好的效果,你需è¦ä¸€ä¸ªæœ‰é™€èžºä»ª"
-"和加速器的手机。\n"
-"请注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œç›¸æœºä¹Ÿä¼šå‡å®šè€³æœºå¤„于1.85米的高度。你å¯ä»¥é€šè¿‡è®¾ç½®"
-"[member eye_height]æ¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚\n"
+"这是通用的移动 VR å®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰€ä½¿ç”¨çš„æ‰‹æœºå’Œ HMD 的细节。它ä¸ä¾èµ–于任"
+"何现有的框架。这是我们拥有的最基本的接å£ã€‚为了达到最好的效果,你需è¦ä¸€ä¸ªæœ‰é™€"
+"螺仪和加速器的手机。\n"
+"请注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œç›¸æœºä¹Ÿä¼šå‡å®šè€³æœºå¤„于 1.85 米的高度。你å¯ä»¥é€šè¿‡è®¾ç½® "
+"[member eye_height] æ¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚\n"
"ä½ å¯ä»¥æŒ‰ä»¥ä¸‹æ–¹å¼åˆå§‹åŒ–这个接å£ï¼š\n"
"[codeblock]\n"
"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
@@ -42349,18 +42564,6 @@ msgstr ""
"(它们在空间上被索引为整个对象)。\n"
"由于实例å¯èƒ½å…·æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚"
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr "$DOCS_URL/tutorials/performance/using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -42534,10 +42737,6 @@ msgstr ""
"这对于优化给定网格的大é‡å®žä¾‹çš„æ¸²æŸ“是éžå¸¸æœ‰ç”¨çš„(例如,森林中的树木或è‰ä¸›ï¼‰ã€‚"
#: doc/classes/MultiMeshInstance.xml
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -42855,10 +43054,6 @@ msgstr ""
"[Semaphore]。它ä¿è¯æ¯æ¬¡åªæœ‰ä¸€ä¸ªçº¿ç¨‹å¯ä»¥èŽ·å¾—é”。互斥é”å¯ä»¥ç”¨æ¥ä¿æŠ¤ä¸´ç•ŒåŒºï¼›ä½†"
"æ˜¯ï¼Œè¦æ³¨æ„é¿å…æ­»é”。"
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -42947,13 +43142,13 @@ msgid ""
"navigating on."
msgstr ""
"在 [NavigationMesh] 的集åˆä¸­æä¾›å¯¼èˆªå’Œå¯»è·¯åŠŸèƒ½ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œè¿™äº›å°†è‡ªåŠ¨ä»Žå­ "
-"[NavigationMeshInstance] 节点中收集,也å¯ä»¥é€šè¿‡ [method navmesh_add] 峿—¶æ·»"
-"加。除了基本的寻路之外,这个类还能帮助导航代ç†ä¸Žå…¶æ‰€å¯¼èˆªçš„网格对é½ã€‚"
+"[NavigationMeshInstance] 节点中收集。除了基本的寻路之外,这个类还能帮助导航代"
+"ç†ä¸Žå…¶æ‰€å¯¼èˆªçš„网格对é½ã€‚"
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://godotengine.org/asset-library/asset/124"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -42999,6 +43194,11 @@ msgstr ""
"是 [code]true[/code](默认),与æ¯ä¸ª [NavigationMesh] 相关的代ç†å±žæ€§ï¼ˆåŠå¾„ã€"
"高度等)在路径计算中被考虑,å¦åˆ™å…¶è¢«å¿½ç•¥ã€‚"
+#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "The cell height to use for fields."
+msgstr "用于字段Yè½´å•元的尺寸。"
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr "用于字段的XZå¹³é¢å•元尺寸。"
@@ -43032,8 +43232,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://godotengine.org/asset-library/asset/117"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -43388,9 +43588,10 @@ msgstr ""
"å¯ã€‚"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+#, fuzzy
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -43530,14 +43731,14 @@ msgid ""
msgstr ""
"如果 [code]value[/code] 为 [code]true[/code],则在 [member geometry/"
"collision_mask] 中设置指定的 [code]bit[/code]。\n"
-"如果 [code]value[/code] 为 [code]false[/code],则清除 [member geometry/"
-"collision_mask] 中指定的 [code]bit[/code]。"
+"如果 [code]value[/code] 为 [code]false[/code],则在 [member geometry/"
+"collision_mask] 中清除指定的 [code]bit[/code]。"
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
"Sets the vertices that can be then indexed to create polygons with the "
"[method add_polygon] method."
-msgstr "设置顶点,然åŽä½¿ç”¨[method add_polygon]方法创建多边形。"
+msgstr "设置顶点,然åŽä½¿ç”¨ [method add_polygon] 方法创建多边形。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43547,7 +43748,7 @@ msgid ""
"multiple of [member cell/height]."
msgstr ""
"地æ¿åˆ°å¤©èбæ¿çš„æœ€å°é«˜åº¦ï¼Œä»ç„¶å…许被认为是å¯è¡Œèµ°çš„地æ¿ã€‚\n"
-"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/height]çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43556,7 +43757,7 @@ msgid ""
"multiple of [member cell/height]."
msgstr ""
"被认为ä»å¯ç©¿è¶Šçš„æœ€å°å¢™å£é«˜åº¦ã€‚\n"
-"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„[member cell/height]çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "The maximum slope that is considered walkable, in degrees."
@@ -43570,7 +43771,7 @@ msgid ""
"multiple of [member cell/size]."
msgstr ""
"侵蚀/缩å°è¿œç¦»éšœç¢ç‰©çš„高度场的å¯è¡Œèµ°åŒºåŸŸè·ç¦»ã€‚\n"
-"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/size] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "The Y axis cell size to use for fields."
@@ -43607,19 +43808,19 @@ msgid ""
"If [code]true[/code], marks walkable spans as not walkable if the clearance "
"above the span is less than [member agent/height]."
msgstr ""
-"如果 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent/height],则将å¯"
-"行走范围标记为ä¸å¯è¡Œèµ°ã€‚"
+"如果为 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent/height],则将"
+"å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
-msgstr "如果[code]true[/code],标记边缘间的跨度为ä¸å¯è¡Œèµ°ã€‚"
+msgstr "如果为 [code]true[/code],则标记边缘间的跨度为ä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
"is within [member agent/max_climb] of a walkable neighbor."
msgstr ""
-"如果 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member agent/"
+"如果为 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member agent/"
"max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml
@@ -43629,20 +43830,21 @@ msgid ""
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
"用于扫æé™æ€ç¢°æ’žçš„物ç†å±‚。\n"
-"仅在[member geometry/parsed_geometry_type]是[constant "
-"PARSED_GEOMETRY_STATIC_COLLIDERS]或[constant PARSED_GEOMETRY_BOTH]æ—¶æ‰ä½¿ç”¨ã€‚"
+"仅在 [member geometry/parsed_geometry_type]是[constant "
+"PARSED_GEOMETRY_STATIC_COLLIDERS] 或 [constant PARSED_GEOMETRY_BOTH] æ—¶æ‰ä½¿"
+"用。"
#: doc/classes/NavigationMesh.xml
msgid ""
"Determines which type of nodes will be parsed as geometry. See [enum "
"ParsedGeometryType] for possible values."
-msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å‚阅[enum ParsedGeometryType]。"
+msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å‚阅 [enum ParsedGeometryType]。"
#: doc/classes/NavigationMesh.xml
msgid ""
"The source of the geometry used when baking. See [enum SourceGeometryMode] "
"for possible values."
-msgstr "烘焙时使用的几何体的æºã€‚å‚阅[enum SourceGeometryMode]。"
+msgstr "烘焙时使用的几何体的æºã€‚å‚阅 [enum SourceGeometryMode]。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43652,9 +43854,9 @@ msgid ""
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
"è¦æ‰«æçš„几何体组的å称。\n"
-"åªæœ‰å½“[member geometry/source_geometry_mode]是[constant "
-"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN]或[constant "
-"SOURCE_GEOMETRY_GROUPS_EXPLICIT]æ—¶æ‰ä½¿ç”¨ã€‚"
+"åªæœ‰å½“ [member geometry/source_geometry_mode]是[constant "
+"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] 或 [constant "
+"SOURCE_GEOMETRY_GROUPS_EXPLICIT] æ—¶æ‰ä½¿ç”¨ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43688,7 +43890,7 @@ msgstr ""
msgid ""
"Partitioning algorithm for creating the navigation mesh polys. See [enum "
"SamplePartitionType] for possible values."
-msgstr "创建导航网格polyså•元的分割算法。å‚阅[enum SamplePartitionType]。"
+msgstr "创建导航网格多边形å•元的分割算法。å‚阅 [enum SamplePartitionType]。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43711,7 +43913,7 @@ msgstr "层分区。用于具有中å°åž‹ç“·ç –的平铺导航网格的ä¸é”™é€‰
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum SamplePartitionType] enum."
-msgstr "表示[enum SamplePartitionType]枚举的大å°ã€‚"
+msgstr "表示 [enum SamplePartitionType] 枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43738,7 +43940,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum ParsedGeometryType] enum."
-msgstr "表示[enum ParsedGeometryType]枚举的大å°ã€‚"
+msgstr "表示 [enum ParsedGeometryType] 枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -43758,12 +43960,12 @@ msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
"geometry/source_group_name]."
msgstr ""
-"使用一个组中的节点进行几何è¿ç®—。该组由[member geometry/source_group_name]指"
+"使用一个组中的节点进行几何è¿ç®—。该组由 [member geometry/source_group_name] 指"
"定。"
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum SourceGeometryMode] enum."
-msgstr "表示[enum SourceGeometryMode]枚举的大å°ã€‚"
+msgstr "表示 [enum SourceGeometryMode] 枚举的大å°ã€‚"
#: doc/classes/NavigationMeshGenerator.xml
msgid "This class is responsible for creating and clearing navigation meshes."
@@ -43864,7 +44066,6 @@ msgid "2D obstacle used in navigation for collision avoidance."
msgstr "在导航中用于防撞的 2D éšœç¢ç‰©ã€‚"
#: doc/classes/NavigationObstacle2D.xml
-#, fuzzy
msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
@@ -43873,7 +44074,7 @@ msgid ""
msgstr ""
"导航中用于防撞的 2D éšœç¢ç‰©ã€‚éšœç¢ç‰©éœ€è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©éšœç¢ç‰©"
"æˆä¸º [Navigation2D] 节点的å­é¡¹å®žçŽ°ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ [method set_navigation]。"
-"[NavigationObstacle] 是物ç†å®‰å…¨çš„。"
+"[NavigationObstacle2D] 是物ç†å®‰å…¨çš„。"
#: doc/classes/NavigationObstacle2D.xml
msgid ""
@@ -44054,6 +44255,11 @@ msgstr ""
"程中请求对地图进行任何修改。"
#: doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the map cell height."
+msgstr "返回地图的å•元格大å°ã€‚"
+
+#: doc/classes/NavigationServer.xml
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "返回 [method map_get_closest_point] 所返回的点的法线。"
@@ -44075,6 +44281,11 @@ msgid "Returns the map's up direction."
msgstr "返回地图的上方å‘。"
#: doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr "设置用于焊接导航网格多边形的地图å•元格大å°ã€‚"
+
+#: doc/classes/NavigationServer.xml
msgid "Sets the map up direction."
msgstr "设置地图的上方å‘。"
@@ -44125,15 +44336,6 @@ msgstr ""
"å™¨æ—¶è‡ªåŠ¨è½¬å‘æœåŠ¡å™¨ç«¯å£ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -44457,8 +44659,13 @@ msgstr ""
"ä½¿ç”¨ã€‚æ”¹å˜æ—¶æ•ä¸å¦è¡Œé€šçŸ¥ã€‚"
#: doc/classes/NetworkedMultiplayerPeer.xml
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://godotengine.org/asset-library/asset/537"
+#, fuzzy
+msgid "High-level multiplayer"
+msgstr "高级多人游æˆAPI。"
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -44834,12 +45041,12 @@ msgstr ""
"外,请å‚阅高级网络教程和相应的演示。"
#: doc/classes/Node.xml
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
-msgstr "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
+msgstr ""
#: doc/classes/Node.xml
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/godot-demo-projects/"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -44888,6 +45095,7 @@ msgstr ""
"å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è­¦å‘Šæ—¶ï¼Œè°ƒç”¨[method update_configuration_warning]。"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when there is an input event. The input event propagates up through "
"the node tree until a node consumes it.\n"
@@ -44900,7 +45108,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"当有输入事件时被调用。输入事件通过节点树å‘上传播,直到有节点将其消耗。\n"
"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨ "
@@ -44913,6 +45121,7 @@ msgstr ""
"éžâ€œå­¤å„¿â€ï¼‰ã€‚"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called during the physics processing step of the main loop. Physics "
"processing means that the frame rate is synced to the physics, i.e. the "
@@ -44924,7 +45133,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"在主循环的物ç†å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ­¥ï¼Œå³ "
"[code]delta[/code] å˜é‡åº”该是常é‡ã€‚[code]delta[/code] çš„å•使˜¯ç§’。\n"
@@ -44936,6 +45145,7 @@ msgstr ""
"是“孤儿â€ï¼‰ã€‚"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called during the processing step of the main loop. Processing happens at "
"every frame and as fast as possible, so the [code]delta[/code] time since "
@@ -44945,7 +45155,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"åœ¨ä¸»å¾ªçŽ¯çš„å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚处ç†å‘生在æ¯ä¸€å¸§ï¼Œå¹¶ä¸”å°½å¯èƒ½å¿«ï¼Œæ‰€ä»¥ä»Žä¸Šä¸€å¸§å¼€å§‹"
"çš„ [code]delta[/code] æ—¶é—´ä¸æ˜¯æ’定的。[code]delta[/code] çš„å•使˜¯ç§’。\n"
@@ -44957,6 +45167,7 @@ msgstr ""
"是“孤儿â€ï¼‰ã€‚"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when the node is \"ready\", i.e. when both the node and its children "
"have entered the scene tree. If the node has children, their [method _ready] "
@@ -44968,10 +45179,10 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
"当节点 \"就绪 \"时被调用。å­èŠ‚ç‚¹çš„[method _ready]回调会首先被触å‘,而父节点会"
"åœ¨ä¹‹åŽæ”¶åˆ°å°±ç»ªé€šçŸ¥ã€‚\n"
@@ -44984,10 +45195,11 @@ msgstr ""
"用[method request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -44997,7 +45209,7 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"当 [InputEvent] 还未被 [method _input] 或任何 GUI 消耗时调用。输入事件通过节"
"点树å‘上传播,直到一个节点消耗它。\n"
@@ -45011,10 +45223,11 @@ msgstr ""
"是“孤儿â€ï¼‰ã€‚"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -45024,7 +45237,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
"当 [InputEventKey] 没有被 [method _input] 或任何 GUI 消耗时被调用。输入事件通"
"过节点树å‘上传播,直到一个节点消耗它。\n"
@@ -46025,6 +46238,18 @@ msgstr ""
"级值[i]较低[/i]的节点将首先执行其处ç†å›žè°ƒã€‚"
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr "当节点准备好时触å‘。"
@@ -46196,8 +46421,8 @@ msgstr ""
"点。还å¯ä»¥æŽ§åˆ¶èŠ‚ç‚¹çš„æ¸²æŸ“é¡ºåºã€‚"
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
+msgstr ""
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -46408,8 +46633,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://godotengine.org/asset-library/asset/520"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -46465,11 +46690,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -46666,8 +46891,8 @@ msgstr "所有éžå†…置类型的基类。"
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -46728,14 +46953,12 @@ msgstr ""
"于 Object 本身,[Reference] 等派生类ä¸å—å½±å“。"
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
-msgstr "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
+msgstr ""
#: doc/classes/Object.xml
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
#: doc/classes/Object.xml
msgid ""
@@ -46967,9 +47190,9 @@ msgid ""
"emit_signal(\"game_over\")\n"
"[/codeblock]"
msgstr ""
-"å‘射给定的[code]ä¿¡å·[/code]。这个信å·å¿…须存在,所以它应该是这个类或其父类中的"
-"一个内置信å·ï¼Œæˆ–者是一个用户定义的信å·ã€‚这个方法支æŒå¯å˜æ•°é‡çš„傿•°ï¼Œæ‰€ä»¥å‚æ•°"
-"是以逗å·åˆ†éš”的列表形å¼ä¼ é€’。例å­ã€‚\n"
+"å‘å°„ç»™å®šçš„ä¿¡å· [code]signal[/code]。这个信å·å¿…须存在,所以它应该是这个类或其"
+"父类中的一个内置信å·ï¼Œæˆ–者是一个用户定义的信å·ã€‚这个方法支æŒå¯å˜æ•°é‡çš„傿•°ï¼Œ"
+"æ‰€ä»¥å‚æ•°æ˜¯ä»¥é€—å·åˆ†éš”的列表形å¼ä¼ é€’。例å­ï¼š\n"
"[codeblock]\n"
"emit_signal(\"hit\", weapon_type, damage)\n"
"emit_signal(\"game_over\")\n"
@@ -46988,10 +47211,10 @@ msgid ""
msgstr ""
"ç«‹å³ä»Žå†…存中删除对象。对于 [Node],您å¯èƒ½å¸Œæœ›ä½¿ç”¨ [method Node.queue_free] å°†"
"节点排队以在当å‰å¸§çš„æœ«å°¾å®‰å…¨åˆ é™¤ã€‚\n"
-"[b]é‡è¦æç¤ºï¼š[/b] 如果你有一个指å‘一个对象的å˜é‡ï¼Œä¸€æ—¦å¯¹è±¡è¢«é‡Šæ”¾ï¼Œå®ƒå°† [i]ä¸"
-"会[/i] 分é…为 [code]null[/code]。相å,它会指å‘一个[i]å…ˆå‰é‡Šæ”¾çš„实例[/i],您"
-"应该在å°è¯•调用其方法或访问其属性之å‰ä½¿ç”¨ [method @GDScript."
-"is_instance_valid] 对其进行验è¯ã€‚"
+"[b]é‡è¦ï¼š[/b]如果你有一个指å‘一个对象的å˜é‡ï¼Œä¸€æ—¦å¯¹è±¡è¢«é‡Šæ”¾ï¼Œå®ƒå°†[i]ä¸ä¼š[/i]"
+"被赋为 [code]null[/code]。相å,它会指å‘一个[i]å…ˆå‰é‡Šæ”¾çš„实例[/i],您应该在å°"
+"试调用其方法或访问其属性之å‰ä½¿ç”¨ [method @GDScript.is_instance_valid] 对其进"
+"行验è¯ã€‚"
#: doc/classes/Object.xml
msgid ""
@@ -47039,8 +47262,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -47195,9 +47418,10 @@ msgid ""
msgstr "从对象的元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ã€‚å¦è§ [method set_meta]。"
#: doc/classes/Object.xml
+#, fuzzy
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -47223,12 +47447,12 @@ msgid ""
"properties where you should use the same convention as in the C# source "
"(typically PascalCase)."
msgstr ""
-"在当å‰å¸§çš„物ç†å®Œæˆä¹‹åŽï¼Œå°†ç»™å®šå±žæ€§èµ‹ä¸€ä¸ªæ–°å€¼ã€‚这相当于通过[method "
-"call_deferred]调用[method set],å³[code]call_deferred(\"set\", property, "
+"在当å‰å¸§çš„物ç†å®Œæˆä¹‹åŽï¼Œå°†ç»™å®šå±žæ€§èµ‹ä¸€ä¸ªæ–°å€¼ã€‚这相当于通过 [method "
+"call_deferred] 调用 [method set]ï¼Œå³ [code]call_deferred(\"set\", property, "
"value)[/code]。\n"
-"[b]注æ„:[/b]在c#中,属性å必须指定为snake_case,如果它是由内置的Godot节点定义"
-"的。这并ä¸é€‚用于用户定义的属性,因为您应该使用与c#æºä»£ç (通常是PascalCase)相"
-"åŒçš„约定。"
+"[b]注æ„:[/b]在 C# 中,由 Godot 内置节点定义的属性å必须指定为 snake_case。这"
+"å¹¶ä¸é€‚用于用户定义的属性,因为您应该使用与 C# æºä»£ç ï¼ˆé€šå¸¸æ˜¯ PascalCase)相åŒ"
+"的约定。"
#: doc/classes/Object.xml
msgid ""
@@ -47439,6 +47663,53 @@ msgstr "用于[Occluder]èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。"
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr "[Occluder] å¯ä»¥ä½¿ç”¨ä»Ž [OccluderShape] 派生的任何原始形状。"
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr "与 [Occluder] 节点一起使用的çƒå½¢é®æŒ¡åŸºæœ¬å•元。"
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual hole point position."
+msgstr "设置å•个çƒä½“çš„ä½ç½®ã€‚"
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Sets an individual polygon point position."
+msgstr "设置å•个çƒä½“çš„ä½ç½®ã€‚"
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the hole geometry from code."
+msgstr "通过代ç ç»˜åˆ¶ç®€å•的几何形状。"
+
+#: doc/classes/OccluderShapePolygon.xml
+#, fuzzy
+msgid "Allows changing the polygon geometry from code."
+msgstr "通过代ç ç»˜åˆ¶ç®€å•的几何形状。"
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr "与 [Occluder] 节点一起使用的çƒå½¢é®æŒ¡åŸºæœ¬å•元。"
@@ -48079,39 +48350,50 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
"åœ¨ç»™å®šçš„è·¯å¾„ä¸Šæ‰§è¡Œæ–‡ä»¶ï¼Œå‚æ•°ä»¥å­—符串数组的形å¼ä¼ é€’。将进行平å°è·¯å¾„è§£æžã€‚被解"
"æžçš„æ–‡ä»¶å¿…é¡»å­˜åœ¨å¹¶ä¸”æ˜¯å¯æ‰§è¡Œçš„。\n"
-"傿•°æŒ‰ç…§ç»™å®šçš„顺åºä½¿ç”¨ï¼Œå¹¶ç”¨ç©ºæ ¼éš”开,所以[code]OS.execute(\"ping\", [\"-w"
-"\", \"3\", \"godotengine.org\"], false)[/code] 将在系统的外壳中解æžä¸º"
+"傿•°æŒ‰ç…§ç»™å®šçš„顺åºä½¿ç”¨ï¼Œå¹¶ç”¨ç©ºæ ¼éš”开,所以 [code]OS.execute(\"ping\", [\"-"
+"w\", \"3\", \"godotengine.org\"], false)[/code] 将在系统的 shell 中解æžä¸º "
"[code]ping -w 3 godotengine.org[/code]。\n"
-"è¿™ä¸ªæ–¹æ³•æ ¹æ®æ˜¯å¦å¯ç”¨[code]blocking[/code]模å¼ï¼Œæœ‰ç¨å¾®ä¸åŒçš„行为。\n"
-"如果[code]blocking[/code]为[code]true[/code],Godotçº¿ç¨‹å°†æš‚åœæ‰§è¡Œï¼Œç­‰å¾…进程的"
-"终止。进程的shell输出将作为一个字符串写入[code]output[/code]数组。当进程终止"
-"时,Godot线程将æ¢å¤æ‰§è¡Œã€‚\n"
-"如果[code]blocking[/code]为[code]false[/code],Godot线程将在新进程è¿è¡Œæ—¶ç»§"
-"续。在éžé˜»å¡žæ¨¡å¼ä¸‹ä¸å¯èƒ½æ£€ç´¢shell的输出,所以[code]output[/code]将是空的。\n"
+"è¿™ä¸ªæ–¹æ³•æ ¹æ®æ˜¯å¦å¯ç”¨ [code]blocking[/code] 模å¼ï¼Œæœ‰ç¨å¾®ä¸åŒçš„行为。\n"
+"如果 [code]blocking[/code] 为 [code]true[/code],Godot çº¿ç¨‹å°†æš‚åœæ‰§è¡Œï¼Œç­‰å¾…è¿›"
+"程的终止。进程的 shell 输出将作为一个字符串写入 [code]output[/code] 数组。当"
+"进程终止时,Godot 线程将æ¢å¤æ‰§è¡Œã€‚\n"
+"如果 [code]blocking[/code] 为 [code]false[/code],Godot 线程将在新进程è¿è¡Œæ—¶"
+"继续。在éžé˜»å¡žæ¨¡å¼ä¸‹ä¸å¯èƒ½æ£€ç´¢ shell 的输出,所以 [code]output[/code] 将是空"
+"的。\n"
+"在 Windows 上,如果 [code]open_console[/code] 为 [code]true[/code] 并且进程为"
+"命令行应用,则会打开新的终端窗å£ï¼Œåœ¨å…¶ä»–å¹³å°ä¸Šä¼šè¢«å¿½ç•¥ã€‚\n"
"返回值也å–决于阻塞模å¼ã€‚当阻塞时,该方法将返回一个进程的退出代ç ã€‚当éžé˜»å¡ž"
"时,该方法返回一个进程ID,你å¯ä»¥ç”¨å®ƒæ¥ç›‘视该进程(并有å¯èƒ½ç”¨[method kill]æ¥ç»ˆ"
-"止它)。如果进程分å‰ï¼ˆéžé˜»å¡žï¼‰æˆ–打开(阻塞)失败,该方法将返回[code]-1[/code]"
-"或其他退出代ç ã€‚\n"
-"阻塞模å¼å’Œæ£€ç´¢shell输出的例å­ï¼š\n"
+"止它)。如果进程分å‰ï¼ˆéžé˜»å¡žï¼‰æˆ–打开(阻塞)失败,该方法将返回 [code]-1[/"
+"code] 或其他退出代ç ã€‚\n"
+"阻塞模å¼å’Œæ£€ç´¢ shell 输出的例å­ï¼š\n"
"[codeblock]\n"
"var output = []\n"
"var exit_code = OS.execute(\"ls\", [\"-l\", \"/tmp\"], true, output)\n"
"[/codeblock]\n"
-"Example of non-blocking mode, running another instance of the project and "
-"storing its process ID:\n"
+"éžé˜»å¡žæ¨¡å¼å®žä¾‹ï¼Œè¿è¡Œè¯¥é¡¹ç›®çš„å¦ä¸€å®žä¾‹å¹¶ä¿å­˜å…¶è¿›ç¨‹ ID:\n"
"[codeblock]\n"
"var pid = OS.execute(OS.get_executable_path(), [], false)\n"
"[/codeblock]\n"
-"If you wish to access a shell built-in or perform a composite command, a "
-"platform-specific shell can be invoked. For example:\n"
+"如果你希望访问 shell 内置函数或执行å¤åˆå‘½ä»¤ï¼Œå¯ä»¥è°ƒç”¨å¹³å°ç‰¹å®šçš„ shell。例"
+"如:\n"
"[codeblock]\n"
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
-"[b]注:[/b]此方法仅在Android, iOS, Linux, macOS和Windows上实现。"
+"[b]注æ„:[/b]此方法仅在 Androidã€iOSã€Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid "Returns the scancode of the given string (e.g. \"Escape\")."
@@ -48416,9 +48698,10 @@ msgid ""
"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
"[code]\"X11\"[/code]."
msgstr ""
-"返回主机æ“作系统的å称。å¯èƒ½çš„值有: [code]\"Android\"[/code], [code]\"iOS"
-"\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], [code]\"Server\"[/"
-"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
+"返回主机æ“作系统的å称。å¯èƒ½çš„值有: [code]\"Android\"[/code], "
+"[code]\"iOS\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], "
+"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
+"[code]\"X11\"[/code]."
#: doc/classes/OS.xml
msgid ""
@@ -48477,8 +48760,8 @@ msgstr "返回窗å£å¤§å°ï¼ŒåŒ…括窗å£è¾¹æ¡†ç­‰è£…饰。"
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -48616,17 +48899,16 @@ msgid ""
"Returns the total number of available tablet drivers.\n"
"[b]Note:[/b] This method is implemented on Windows."
msgstr ""
-"返回å¯ç”¨çš„写字æ¿ï¼ˆè¯‘注:或触摸æ¿ã€æ•°ä½æ¿ï¼Œåœ¨æ­¤å¤„尚未明确)驱动程åºçš„æ€»æ•°ã€‚\n"
-"[b]注æ„:[/b]该方法是在Windows上实现的。"
+"返回å¯ç”¨çš„æ•°ä½æ¿é©±åŠ¨ç¨‹åºçš„æ€»æ•°ã€‚\n"
+"[b]注æ„:[/b]该方法在 Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
"Returns the tablet driver name for the given index.\n"
"[b]Note:[/b] This method is implemented on Windows."
msgstr ""
-"返回给定索引的写字æ¿ï¼ˆè¯‘注:或触摸æ¿ã€æ•°ä½æ¿ï¼Œåœ¨æ­¤å¤„尚未明确)驱动程åºå"
-"称。\n"
-"[b]注æ„:[/b]该方法是在Windows上实现的。"
+"è¿”å›žç»™å®šç´¢å¼•çš„æ•°ä½æ¿é©±åŠ¨ç¨‹åºå称。\n"
+"[b]注æ„:[/b]该方法在 Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -48823,6 +49105,11 @@ msgstr ""
"[b]注æ„:[/b] 这个方法在macOS上实现。"
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "如果文件当å‰è¢«æ‰“开,返回[code]true[/code]。"
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -48965,6 +49252,16 @@ msgstr ""
"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml
+#, fuzzy
+msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+"设置活动键盘布局。\n"
+"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+
+#: doc/classes/OS.xml
msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
@@ -49041,8 +49338,8 @@ msgid ""
"Initialises the singleton for the system MIDI driver.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"åˆå§‹åŒ–系统MIDI驱动的å•例。\n"
-"[b]注æ„:[/b] 该方法在Linuxã€macOSå’ŒWindows上实现。"
+"åˆå§‹åŒ–系统 MIDI 驱动的å•例。\n"
+"[b]注æ„:[/b]该方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -49276,7 +49573,7 @@ msgstr ""
#: doc/classes/OS.xml
msgid "The clipboard from the host OS. Might be unavailable on some platforms."
-msgstr "主机æ“作系统的剪贴æ¿åœ¨æŸäº›å¹³å°ä¸Šå¯èƒ½ä¸å¯ç”¨ã€‚"
+msgstr "宿主æ“作系统的剪贴æ¿ã€‚在æŸäº›å¹³å°ä¸Šå¯èƒ½ä¸å¯ç”¨ã€‚"
#: doc/classes/OS.xml
msgid "The current screen index (starting from 0)."
@@ -49311,23 +49608,24 @@ msgid ""
"If [code]true[/code], the engine tries to keep the screen on while the game "
"is running. Useful on mobile."
msgstr ""
-"如果 [code]true[/code],引擎会å°è¯•在游æˆè¿è¡Œæ—¶ä¿æŒå±å¹•å¼€å¯ã€‚在手机上有用。"
+"如果为 [code]true[/code],则引擎会å°è¯•在游æˆè¿è¡Œæ—¶ä¿æŒå±å¹•å¼€å¯ã€‚在手机上有"
+"用。"
#: doc/classes/OS.xml
msgid ""
"If [code]true[/code], the engine optimizes for low processor usage by only "
"refreshing the screen if needed. Can improve battery consumption on mobile."
msgstr ""
-"如果[code]true[/code],引擎会通过åªåœ¨éœ€è¦æ—¶åˆ·æ–°å±å¹•æ¥ä¼˜åŒ–处ç†å™¨çš„使用。å¯ä»¥æ”¹"
-"善移动设备上的电池消耗。"
+"如果为 [code]true[/code],则引擎会通过åªåœ¨éœ€è¦æ—¶åˆ·æ–°å±å¹•æ¥ä¼˜åŒ–处ç†å™¨çš„使用。"
+"å¯ä»¥æ”¹å–„移动设备上的电池消耗。"
#: doc/classes/OS.xml
msgid ""
"The amount of sleeping between frames when the low-processor usage mode is "
"enabled (in microseconds). Higher values will result in lower CPU usage."
msgstr ""
-"å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼æ—¶ï¼Œå¸§ä¹‹é—´çš„休眠é‡ï¼ˆä»¥å¾®ç§’计)。较高的值将导致较低的CPU使"
-"用率。"
+"å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼æ—¶ï¼Œå¸§ä¹‹é—´çš„休眠é‡ï¼ˆå•ä½ä¸ºå¾®ç§’)。较高的值将导致较低的 "
+"CPU 使用率。"
#: doc/classes/OS.xml
msgid ""
@@ -49358,11 +49656,11 @@ msgstr "当å‰å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml
msgid "The current tablet driver in use."
-msgstr "当剿­£åœ¨ä½¿ç”¨çš„书写æ¿ï¼ˆè¯‘æ³¨ï¼šæˆ–æ•°ä½æ¿ã€è§¦æ‘¸æ¿ï¼Œå°šæœªå®šè®ºï¼‰é©±åŠ¨ç¨‹åºã€‚"
+msgstr "当剿­£åœ¨ä½¿ç”¨çš„æ•°ä½æ¿é©±åŠ¨ç¨‹åºã€‚"
#: doc/classes/OS.xml
msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
-msgstr "如果 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ (Vsync)。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ï¼ˆVsync)。"
#: doc/classes/OS.xml
msgid ""
@@ -49386,21 +49684,21 @@ msgid ""
"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
"disables per-pixel transparency."
msgstr ""
-"如果 [code]true[/code],则移除窗框。\n"
-"[b]注æ„:[/b] å°† [code]window_borderless[/code] 设置为 [code]false[/code] å°†"
-"ç¦ç”¨é€åƒç´ é€æ˜Žåº¦ã€‚"
+"如果为 [code]true[/code],则移除窗å£è¾¹æ¡†ã€‚\n"
+"[b]注æ„:[/b]å°† [code]window_borderless[/code] 设置为 [code]false[/code] å°†ç¦"
+"用é€åƒç´ é€æ˜Žåº¦ã€‚"
#: doc/classes/OS.xml
msgid "If [code]true[/code], the window is fullscreen."
-msgstr "如果[code]true[/code],窗å£ä¸ºå…¨å±ã€‚"
+msgstr "如果为 [code]true[/code],则窗å£ä¸ºå…¨å±ã€‚"
#: doc/classes/OS.xml
msgid "If [code]true[/code], the window is maximized."
-msgstr "如果[code]true[/code],窗å£è¢«æœ€å¤§åŒ–。"
+msgstr "如果为 [code]true[/code],则窗å£è¢«æœ€å¤§åŒ–。"
#: doc/classes/OS.xml
msgid "If [code]true[/code], the window is minimized."
-msgstr "如果[code]true[/code],窗å£è¢«æœ€å°åŒ–。"
+msgstr "如果为 [code]true[/code],则窗å£è¢«æœ€å°åŒ–。"
#: doc/classes/OS.xml
msgid ""
@@ -49415,12 +49713,12 @@ msgid ""
"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
"startup instead."
msgstr ""
-"如果[code]true[/code],则窗å£èƒŒæ™¯æ˜¯é€æ˜Žçš„ï¼Œçª—å£æ¡†æž¶è¢«ç§»é™¤ã€‚\n"
+"如果为 [code]true[/code],则窗å£èƒŒæ™¯æ˜¯é€æ˜Žçš„ï¼Œçª—å£æ¡†æž¶è¢«ç§»é™¤ã€‚\n"
"使用 [code]get_tree().get_root().set_transparent_background(true)[/code] ç¦ç”¨"
"主视å£èƒŒæ™¯æ¸²æŸ“。\n"
-"[b]注æ„:[/b]如果ç¦ç”¨[member ProjectSettings.display/window/"
-"per_pixel_transparency/allowed]设置,则该属性无效。\n"
-"[b]注æ„:[/b] 此属性在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。对于 "
+"[b]注æ„:[/b]如果ç¦ç”¨ [member ProjectSettings.display/window/"
+"per_pixel_transparency/allowed] 设置,则该属性无效。\n"
+"[b]注æ„:[/b]此属性在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。对于 "
"Android,它ä¸èƒ½åœ¨è¿è¡Œæ—¶æ›´æ”¹ã€‚使用 [member ProjectSettings.display/window/"
"per_pixel_transparency/enabled] 在å¯åŠ¨æ—¶è¿›è¡Œè®¾ç½®ã€‚"
@@ -49432,7 +49730,7 @@ msgstr "窗å£ç›¸å¯¹äºŽå±å¹•çš„ä½ç½®ï¼ŒåŽŸç‚¹ä¸ºå·¦ä¸Šè§’ï¼Œ+Y è½´å‘下,+X
#: doc/classes/OS.xml
msgid "If [code]true[/code], the window is resizable by the user."
-msgstr "如果 [code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
+msgstr "如果为 [code]true[/code],则用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
#: doc/classes/OS.xml
msgid "The size of the window (without counting window manager decorations)."
@@ -50201,12 +50499,12 @@ msgstr ""
"点和容器。"
#: doc/classes/Panel.xml
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://godotengine.org/asset-library/asset/516"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://godotengine.org/asset-library/asset/523"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -50360,7 +50658,6 @@ msgid "GPU-based 3D particle emitter."
msgstr "基于GPUçš„3Dç²’å­å‘射器。"
#: doc/classes/Particles.xml
-#, fuzzy
msgid ""
"3D particle node used to create a variety of particle systems and effects. "
"[Particles] features an emitter that generates some number of particles at a "
@@ -50388,20 +50685,19 @@ msgstr ""
"使用 [code]process_material[/code] 属性添加 [ParticlesMaterial] æ¥é…置粒å­å¤–"
"观和行为。或者,您å¯ä»¥æ·»åŠ ä¸€ä¸ªå°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„ [ShaderMaterial]。\n"
"[b]注æ„:[/b][Particles] 仅在使用 GLES3 渲染器时有效。如果使用 GLES2 渲染器,"
-"请改用[CPUParticles]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹ï¼Œå•击 3D 编辑器视窗顶部的[b]ç²’å­[/b]"
-"èœå•,然åŽé€‰æ‹©[b]转æ¢ä¸º CPUParticles[/b],将 [Particles] 转æ¢ä¸º "
+"请改用 [CPUParticles]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹ï¼Œå•击 3D 编辑器视窗顶部的"
+"[b]Particles[/b]èœå•,然åŽé€‰æ‹©[b]转æ¢ä¸º CPUParticles[/b],将 [Particles] 转æ¢"
+"为 [CPUParticles]。\n"
+"[b]注æ„:[/b]在 macOS 上,渲染 [Particles] 比 [CPUParticles] è¦æ…¢ä¸Šå¾ˆå¤šï¼Œå› ä¸º"
+"å˜æ¢å馈是在 CPU ä¸Šå®žçŽ°çš„ï¼Œè€Œä¸æ˜¯ GPU。以 macOS 为目标时,请考虑使用 "
"[CPUParticles]。\n"
-"[b]注æ„:[/b]在处ç†ç²’å­èŠ‚ç‚¹åŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å…¶[member "
-"visibility_aabb],å•击 3D 编辑器视窗顶部的[b]ç²’å­[/b]èœå•,然åŽé€‰æ‹©[b]生æˆå¯"
-"è§ AABB[/b]。å¦åˆ™ï¼Œç²’å­å¯èƒ½ä¼šç”±äºŽç›¸æœºä½ç½®å’Œè§’度的改å˜çªç„¶æ¶ˆå¤±ã€‚"
+"[b]注æ„:[/b]在处ç†ç²’å­èŠ‚ç‚¹åŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å…¶ [member "
+"visibility_aabb],å•击 3D 编辑器视窗顶部的[b]Particles[/b]èœå•,然åŽé€‰æ‹©[b]生"
+"æˆå¯è§ AABB[/b]。å¦åˆ™ï¼Œç²’å­å¯èƒ½ä¼šç”±äºŽç›¸æœºä½ç½®å’Œè§’度的改å˜çªç„¶æ¶ˆå¤±ã€‚"
#: doc/classes/Particles.xml
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -50505,7 +50801,6 @@ msgid "GPU-based 2D particle emitter."
msgstr "基于GPUçš„2Dç²’å­å‘射器。"
#: doc/classes/Particles2D.xml
-#, fuzzy
msgid ""
"2D particle node used to create a variety of particle systems and effects. "
"[Particles2D] features an emitter that generates some number of particles at "
@@ -50536,13 +50831,20 @@ msgstr ""
"观和行为。或者,您å¯ä»¥æ·»åŠ å°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„ [ShaderMaterial]。\n"
"[b]注æ„:[/b][Particles2D] 仅在使用 GLES3 渲染器时有效。如果使用 GLES2 渲染"
"器,请改用 [CPUParticles2D]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹å°† [Particles2D] 转æ¢ä¸º "
-"[CPUParticles2D],å•击 2D 编辑器视å£é¡¶éƒ¨çš„[b]ç²’å­[/b]èœå•,然åŽé€‰æ‹©[b]转æ¢ä¸º "
-"CPUParticles2D[/b]。\n"
+"[CPUParticles2D],å•击 2D 编辑器视å£é¡¶éƒ¨çš„[b]Particles[/b]èœå•,然åŽé€‰æ‹©[b]转"
+"æ¢ä¸º CPUParticles2D[/b]。\n"
+"[b]注æ„:[/b]在 macOS 上,渲染 [Particles2D] 比 [CPUParticles2D] è¦æ…¢ä¸Šå¾ˆå¤šï¼Œ"
+"å› ä¸ºå˜æ¢å馈是在 CPU ä¸Šå®žçŽ°çš„ï¼Œè€Œä¸æ˜¯ GPU。以 macOS 为目标时,请考虑使用 "
+"[CPUParticles2D]。\n"
"[b]注æ„:[/b]在粒å­èŠ‚ç‚¹ä¸Šå·¥ä½œåŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å®ƒçš„ [member "
-"visibility_rect],å•击 2D 编辑器视å£é¡¶éƒ¨çš„[b]ç²’å­[/b]èœå•,然åŽé€‰æ‹©[b]生æˆå¯"
-"è§çŸ©å½¢[/b]。å¦åˆ™ï¼Œæ ¹æ®ç›¸æœºä½ç½®å’Œè§’度,粒å­å¯èƒ½ä¼šçªç„¶æ¶ˆå¤±ã€‚\n"
-"[b]注æ„:[/b]与[CPUParticles2D]ä¸åŒï¼Œ[Particles2D]ç›®å‰å¿½ç•¥[AtlasTexture]s中定"
-"义的纹ç†åŒºåŸŸã€‚"
+"visibility_rect],å•击 2D 编辑器视å£é¡¶éƒ¨çš„[b]Particles[/b]èœå•,然åŽé€‰æ‹©[b]生"
+"æˆå¯è§çŸ©å½¢[/b]。å¦åˆ™ï¼Œæ ¹æ®ç›¸æœºä½ç½®å’Œè§’度,粒å­å¯èƒ½ä¼šçªç„¶æ¶ˆå¤±ã€‚\n"
+"[b]注æ„:[/b]与 [CPUParticles2D] ä¸åŒï¼Œ[Particles2D] ç›®å‰ä¼šå¿½ç•¥ "
+"[AtlasTexture] 中定义的纹ç†åŒºåŸŸã€‚"
+
+#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
@@ -51433,9 +51735,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
-msgstr "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
+msgstr ""
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -52834,7 +53135,7 @@ msgid ""
"This is equivalent to [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]."
msgstr ""
"施加å•一方å‘的冲é‡è€Œä¸å½±å“旋转。\n"
-"这等价于[code]apply_impulse(Vector3(0,0,0), impulse)[/code]。"
+"这等价于 [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]。"
#: doc/classes/PhysicsDirectBodyState.xml
msgid ""
@@ -53436,7 +53737,7 @@ msgstr "如果[code]true[/code]ï¼Œé“°é“¾å…·æœ‰æœ€å¤§å’Œæœ€å°æ—‹è½¬ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], a motor turns the Hinge."
-msgstr "如果[code]true[/code],电机将转动铰链。"
+msgstr "如果为 [code]true[/code],则马达将转动铰链。"
#: doc/classes/PhysicsServer.xml doc/classes/SliderJoint.xml
msgid ""
@@ -53598,13 +53899,13 @@ msgstr "设置时,å¯ä»¥åšæ—‹è½¬è¿åŠ¨ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "If set, there is a rotational motor across these axes."
-msgstr "设置时,在这些轴上有旋转动力。"
+msgstr "设置时,存在跨这些轴的旋转马达。"
#: doc/classes/PhysicsServer.xml
msgid ""
"If set, there is a linear motor on this axis that targets a specific "
"velocity."
-msgstr "设置时,在该轴上有指定速度的线性动力。"
+msgstr "设置时,存在跨这些轴的线性马达,以指定的速度为目标。"
#: doc/classes/PhysicsServer.xml
msgid "The [Shape] is a [PlaneShape]."
@@ -53801,8 +54102,8 @@ msgid ""
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过在æ¯ä¸ªç»„件上è¿è¡Œ[method @GDScript.is_equal_approx],如果此平é¢å’Œ"
-"[code]plane[/code]近似相等,则返回[code]true[/code]。"
+"如果此平é¢å’Œ [code]plane[/code] 近似相等,则返回[code]true[/code],方法是对æ¯"
+"个分é‡è¿è¡Œ [method @GDScript.is_equal_approx]。"
#: doc/classes/Plane.xml
msgid ""
@@ -54433,8 +54734,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://godotengine.org/asset-library/asset/519"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -54966,6 +55267,11 @@ msgstr ""
"[b]注:[/b]被移除项åŽçš„项的索引将被移ä½1。"
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "设置在索引[code]idx[/code]处项的图标。"
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr "当窗å£å¤±åŽ»ç„¦ç‚¹æ—¶éšè—[PopupMenu]。"
@@ -55830,7 +56136,6 @@ msgid ""
msgstr "设置é…置值的顺åºï¼ˆä¿å­˜åˆ°é…置文件时会产生影å“)。"
#: doc/classes/ProjectSettings.xml
-#, fuzzy
msgid ""
"Sets the value of a setting.\n"
"[b]Example:[/b]\n"
@@ -55844,7 +56149,8 @@ msgstr ""
"[b]示例:[/b]\n"
"[codeblock]\n"
"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"也å¯ä»¥ç”¨äºŽæ¸…除自定义项目设置。å¯é€šè¿‡å°†å€¼ä¿®æ”¹ä¸º [code]null[/code] 实现。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -56589,8 +56895,8 @@ msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çж
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr "被ç¦ç”¨çš„导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
#: doc/classes/ProjectSettings.xml
@@ -56699,8 +57005,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -56733,13 +57039,13 @@ msgstr ""
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
-msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£é«˜åº¦ã€‚用于测试拉伸模å¼ã€‚"
+msgstr "如果大于 0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£é«˜åº¦ã€‚用于测试拉伸模å¼ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
-msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£å®½åº¦ã€‚用于测试拉伸模å¼ã€‚"
+msgstr "如果大于 0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£å®½åº¦ã€‚用于测试拉伸模å¼ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -56754,7 +57060,7 @@ msgstr ""
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
-msgstr "指定è¦ä½¿ç”¨çš„å¹³æ¿é©±åŠ¨ç¨‹åºã€‚如果为空,将使用默认驱动程åºã€‚"
+msgstr "指定è¦ä½¿ç”¨çš„æ•°ä½æ¿é©±åŠ¨ç¨‹åºã€‚如果为空,将使用默认驱动程åºã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -56764,9 +57070,9 @@ msgid ""
"synchronization will be disabled, however, many platforms will enforce it "
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ã€‚这消除了在移动场景中å¯èƒ½å‡ºçŽ°çš„æ’•è£‚ï¼Œä»¥"
-"较高的输入延迟和较低的帧率为代价。如果[code]false[/code]ï¼Œåž‚ç›´åŒæ­¥å°†è¢«ç¦ç”¨ï¼Œ"
-"然而,许多平å°ä»å°†æ‰§è¡Œå®ƒ(如手机平å°å’ŒHTML5)。"
+"如果为 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ã€‚这消除了在移动场景中å¯èƒ½å‡ºçŽ°çš„æ’•"
+"裂,以较高的输入延迟和较低的帧率为代价。如果为 [code]false[/code]ï¼Œåž‚ç›´åŒæ­¥å°†"
+"被ç¦ç”¨ï¼Œç„¶è€Œï¼Œè®¸å¤šå¹³å°ä»å°†æ‰§è¡Œå®ƒï¼ˆå¦‚移动平å°å’Œ HTML5)。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -56778,11 +57084,11 @@ msgid ""
"experienced by some users. However, some users have experienced a Vsync "
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-"如果[code]Use Vsync[/code]å·²å¯ç”¨ï¼Œä¸”[code]true[/code]ï¼Œåˆ™åœ¨çª—å£æ¨¡å¼ä¸‹å¯ç”¨æŽ’å­—"
-"器时,å¯é€šè¿‡æ“ä½œç³»ç»Ÿçš„çª—å£æŽ’å­—å™¨å®žçŽ°åž‚ç›´åŒæ­¥ã€‚这将防止在æŸäº›æƒ…况下å¡é¡¿ã€‚"
-"(Windows)。\n"
-"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使"
-"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。"
+"如果 [code]Use Vsync[/code] å·²å¯ç”¨ï¼Œä¸”这个设置为 [code]true[/code],则在窗å£"
+"模å¼ä¸‹ä¸”å¯ç”¨äº†åˆæˆå™¨æ—¶ï¼Œä¼šé€šè¿‡æ“作系统的窗å£åˆæˆå™¨å¯ç”¨åž‚ç›´åŒæ­¥ã€‚这将防止在æŸ"
+"些情况下å¡é¡¿ã€‚ï¼ˆä»…é™ Windows)。\n"
+"[b]注æ„:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在"
+"ä½¿ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠï¼ˆä¾‹å¦‚从 60 FPS é™è‡³ 30 FPS)。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -56820,9 +57126,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
"脚本编辑器的“在文件中查找â€ç‰¹æ€§ä¸­åŒ…å«çš„基于文本的文件扩展å。你å¯ä»¥æ·»åР例如"
@@ -56834,12 +57140,14 @@ msgid ""
"Load the previously opened VCS plugin when the editor starts up. This is set "
"to [code]true[/code] whenever a new VCS plugin is initialized."
msgstr ""
+"编辑器å¯åŠ¨æ—¶åŠ è½½ä¸Šä¸€æ¬¡æ‰“å¼€çš„ VCS æ’件。åˆå§‹åŒ–æ–° VCS æ’件时,会被设为 "
+"[code]true[/code]。"
#: doc/classes/ProjectSettings.xml
msgid ""
"Last loaded VCS plugin name. Used to autoload the plugin when the editor "
"starts up."
-msgstr ""
+msgstr "上次加载的 VCS æ’ä»¶å称。用于在编辑器å¯åŠ¨æ—¶è‡ªåŠ¨åŠ è½½è¯¥æ’件。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58523,6 +58831,7 @@ msgstr ""
"义。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"If set to [code]Asynchronous[/code] and available on the target device, "
"asynchronous compilation of shaders is enabled (in contrast to "
@@ -58539,12 +58848,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
"设为 [code]Asynchronous[/code] 时,如果目标设备具备æ¡ä»¶ï¼Œå°±ä¼šå¯ç”¨ç€è‰²å™¨çš„异步"
"编译(此处点题 [code]Asynchronous[/code])。\n"
@@ -58676,6 +58987,21 @@ msgstr ""
"用于交错属性数æ®ã€‚如果用于移动设备,建议å¯ç”¨ã€‚切æ¢åŽéœ€è¦æ‰‹åЍ釿–°å¯¼å…¥ç½‘格。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
+msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+"确定将在任何时候使用的çƒä½“鮿Œ¡å™¨çš„æœ€å¤§æ•°é‡ã€‚\n"
+"尽管一个场景中å¯ä»¥æœ‰è®¸å¤šé®æŒ¡ç‰©ï¼Œä½†ç³»ç»Ÿä¼šæ ¹æ®å±å¹•空间度é‡ä»Žè¿™äº›é®æŒ¡ç‰©ä¸­é€‰æ‹©æœ€"
+"相关的æ¯ä¸€å¸§ï¼Œä»¥æä¾›æœ€ä½³çš„æ•´ä½“性能。"
+
+#: doc/classes/ProjectSettings.xml
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -58809,10 +59135,12 @@ msgstr ""
"和照明时,这会æé«˜é«˜é€æ”¯åœºæ™¯çš„æ€§èƒ½ã€‚"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
"æ–¹å‘æ€§é˜´å½±çš„大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚更高的值会导致更清晰的阴影,但会以性能为代"
"价。该值将被四èˆäº”入到最接近的2次方。"
@@ -59382,6 +59710,12 @@ msgid ""
msgstr ""
"用于 [VisibilityNotifier2D] 使用的 2D 哈希网格的å•元格大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚"
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr "通用的é è¿‘检测节点。"
@@ -59403,8 +59737,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://godotengine.org/asset-library/asset/129"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -59436,12 +59770,6 @@ msgstr ""
"加有效,并且对浮点错误有很强的抵抗力。"
#: doc/classes/Quat.xml
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr "从给定的 [Basis] 构造一个四元数。"
@@ -59499,12 +59827,12 @@ msgid ""
"quaternion. Returned vector contains the rotation angles in the format (X "
"angle, Y angle, Z angle)."
msgstr ""
-"返回与å•ä½å››å…ƒæ•°æ‰€ä»£è¡¨çš„æ—‹è½¬ç›¸å¯¹åº”的欧拉角(按照YXZ惯例:分解时,先ZåŽX,最åŽ"
-"是Y)。返回的å‘é‡åŒ…嫿 ¼å¼ä¸ºï¼ˆXè§’ã€Yè§’ã€Z角)的旋转角。"
+"返回与å•ä½å››å…ƒæ•°æ‰€ä»£è¡¨çš„æ—‹è½¬ç›¸å¯¹åº”的欧拉角(按照 YXZ 惯例:分解时先 Z åŽ X,"
+"æœ€åŽæ˜¯ Y)。返回的å‘é‡åŒ…嫿 ¼å¼ä¸ºï¼ˆXè§’ã€Yè§’ã€Z角)的旋转角。"
#: doc/classes/Quat.xml
msgid "Returns the inverse of the quaternion."
-msgstr "返回四元数的å–逆。(译注:å³xyz的值分别å–å)."
+msgstr "返回四元数的å–逆。"
#: doc/classes/Quat.xml
msgid ""
@@ -59650,8 +59978,9 @@ msgstr ""
"䏿˜¯å®žé™…的默认ç§å­ã€‚"
#: doc/classes/RandomNumberGenerator.xml
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "$DOCS_URL/tutorials/math/random_number_generation.html"
+#, fuzzy
+msgid "Random number generation"
+msgstr "è®¾ç½®éšæœºæ•°ç”Ÿæˆå™¨çš„ç§å­ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -60142,18 +60471,15 @@ msgid "2D axis-aligned bounding box."
msgstr "2D 轴对é½è¾¹ç•Œæ¡†ã€‚"
#: doc/classes/Rect2.xml
-#, fuzzy
msgid ""
"[Rect2] consists of a position, a size, and several utility functions. It is "
"typically used for fast overlap tests.\n"
"It uses floating-point coordinates.\n"
"The 3D counterpart to [Rect2] is [AABB]."
msgstr ""
-"[Rect2] ç”±ä¸€ä¸ªåæ ‡ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨å‡½æ•°ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
+"[Rect2] ç”±ä¸€ä¸ªåæ ‡ã€ä¸€ä¸ªå¤§å°å’Œè‹¥å¹²å®žç”¨å‡½æ•°ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚\n"
-"[Rect2] 在 3D 中对应 [AABB]。\n"
-"䏿”¯æŒè´Ÿæ•°çš„ [member size],大多数方法都无法正常工作。请使用 [method abs] 获"
-"å–æ­£æ•°å¤§å°çš„ Rect2。"
+"[Rect2] 在 3D 中对应 [AABB]。"
#: doc/classes/Rect2.xml
msgid "Constructs a [Rect2] by position and size."
@@ -60202,7 +60528,8 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
msgstr "返回 [Rect2] é¢ç§¯ã€‚"
#: doc/classes/Rect2.xml
@@ -60230,8 +60557,18 @@ msgid ""
msgstr "返回[Rect2]å‘[enum Margin]æ–¹å‘增长给定数é‡å•ä½çš„副本。"
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
-msgstr "如果[Rect2]为flat或空,则返回[code]true[/code]。"
+#, fuzzy
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
+msgstr ""
+"如果对象从给定的 [code]class[/code] 中继承,则返回 [code]true[/code]。å¦è¯·å‚"
+"阅 [method get_class]。\n"
+"[b]注:[/b] [method is_class] 没有考虑 [code]class_name[/code] 声明。如果对象"
+"有 [code]class_name[/code] 定义,[method is_class] 将为该å称返回 "
+"[code]false[/code] 。"
#: doc/classes/Rect2.xml
msgid ""
@@ -60265,8 +60602,8 @@ msgid ""
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-"通过在æ¯ä¸ªç»„件上调用 [code]is_equal_approx[/code],如果此 [Rect2] å’Œ "
-"[code]rect[/code] 大致相等,则返回 [code]true[/code]。"
+"如果此 [Rect2] 和 [code]rect[/code] 大致相等,则返回 [code]true[/code],方法"
+"是对æ¯ä¸ªåˆ†é‡è¿è¡Œ [code]is_equal_approx[/code]。"
#: doc/classes/Rect2.xml
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
@@ -60309,7 +60646,7 @@ msgid ""
"will linger on for a while before being removed."
msgstr ""
"ä»»ä½•ä¿æŒå¼•用计数对象的基类。 [Resource] 和许多其他辅助对象继承了这个类。\n"
-"与其他 [Object] 类型ä¸åŒï¼ŒReferences ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…"
+"与其他 [Object] 类型ä¸åŒï¼ŒReference ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…"
"在那时自动释放。因此,ä¸éœ€è¦ä½¿ç”¨ [method Object.free] 手动释放引用。\n"
"在ç»å¤§å¤šæ•°ç”¨ä¾‹ä¸­ï¼Œæ‚¨åªéœ€è¦å®žä¾‹åŒ–和使用 [Reference] 派生类型。此类中æä¾›çš„æ–¹æ³•"
"仅适用于高级用户,如果误用å¯èƒ½ä¼šå¯¼è‡´é—®é¢˜ã€‚\n"
@@ -60428,10 +60765,6 @@ msgstr ""
"把跨越多个å射探针的大网格分割æˆå°ç½‘格。"
#: doc/classes/ReflectionProbe.xml
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr "$DOCS_URL/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -60515,10 +60848,15 @@ msgstr ""
"[code]internal_ambient_*[/code]属性控制。"
#: doc/classes/ReflectionProbe.xml
+#, fuzzy
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
"设置对象在被剔除å‰ä¸Žè¯¥ [ReflectionProbe] 的最大è·ç¦»ã€‚调低å¯ä»¥æå‡æ€§èƒ½ï¼Œå°¤å…¶æ˜¯"
"使用 [constant UPDATE_ALWAYS] 作为 [member update_mode] 时。"
@@ -60649,9 +60987,9 @@ msgstr ""
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
"[/codeblock]\n"
-"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\\\d"
-"+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\\\"
-"\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n"
+"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\"
+"\\d+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\"
+"\\\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n"
"使用 [method search] ,你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”"
"回[RegExMatch],你å¯ä»¥ä½¿ç”¨[method RegExMatch.get_string]å’Œ[method RegExMatch."
"get_start]等方法检索结果的细节。\n"
@@ -60958,8 +61296,8 @@ msgstr ""
"行,并释放ä¸å†ä½¿ç”¨çš„资æºã€‚è¿™æ„å‘³ç€æœªä½¿ç”¨çš„资æºåœ¨è¢«åˆ é™¤ä¹‹å‰ä¼šåœç•™ä¸€æ®µæ—¶é—´ã€‚"
#: doc/classes/Resource.xml
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "$DOCS_URL/tutorials/scripting/resources.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -61260,6 +61598,10 @@ msgstr ""
"器,请å‚阅[EditorImportPlugin]。"
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr "默认导入顺åºã€‚"
@@ -61664,8 +62006,12 @@ msgstr ""
"(例如大多数表情符å·ï¼‰ã€‚它们将显示为未知字符。这将在 Godot 4.0 中解决。"
#: doc/classes/RichTextLabel.xml
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://godotengine.org/asset-library/asset/132"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -61894,15 +62240,17 @@ msgstr ""
"置为 [code]false[/code]。改用 [method append_bbcode] æ¥ä¿ç•™ BBCode æ ¼å¼ã€‚"
#: doc/classes/RichTextLabel.xml
+#, fuzzy
msgid ""
"The label's text in BBCode format. Is not representative of manual "
"modifications to the internal tag stack. Erases changes made by other "
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
"BBCode æ ¼å¼çš„æ ‡ç­¾æ–‡æœ¬ã€‚ä¸ä»£è¡¨å¯¹å†…部标签栈的手动修改。编辑时擦除通过其他方法所"
"åšçš„æ›´æ”¹ã€‚\n"
@@ -62663,12 +63011,12 @@ msgstr ""
"è´¨é‡ä¸­å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘[CollisionShape2D]中心点的å移。"
#: doc/classes/RigidBody2D.xml
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://godotengine.org/asset-library/asset/119"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://godotengine.org/asset-library/asset/148"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -62917,20 +63265,20 @@ msgid ""
"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当这个RigidBody2Dçš„[Shape2D]与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]碰撞"
-"æ—¶å‘å‡ºã€‚è¦æ±‚ [member contact_monitor] 设置为 [code]true[/code] 并且 [member "
-"contacts_reported] 设置得足够高,以检测所有碰撞。如果 [TileMap] 具有碰撞 "
-"[Shape2D],就会检测到 [TileSet]。\n"
+"当这个 RigidBody2D çš„ [Shape2D] 与å¦ä¸€ä¸ª [PhysicsBody2D] 或 [TileMap] çš„ "
+"[Shape2D] 碰撞时å‘å‡ºã€‚è¦æ±‚ [member contact_monitor] 设置为 [code]true[/code] "
+"并且 [member contacts_reported] 设置得足够高,以检测所有碰撞。如果 [TileMap] "
+"具有碰撞 [Shape2D],就会检测到 [TileSet]。\n"
"[code]body_rid[/code] 由 [Physics2DServer] 使用的其他 [PhysicsBody2D] 或 "
"[TileSet] 的 [CollisionObject2D] 的 [RID]。\n"
-"[code]body[/code]其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树上)。\n"
+"[code]body[/code]其他 [PhysicsBody2D] 或 [TileMap] 的 [Node](如果它存在于树"
+"上)。\n"
"[code]body_shape_index[/code] 其他 [PhysicsBody2D] 或 [TileMap] 使用 "
"[Physics2DServer] 的 [Shape2D] 索引。获得带有 [code]body."
-"shape_owner_get_owner (body_shape_index)[/code] 的 [CollisionShape2D] 节"
-"点。\n"
+"shape_owner_get_owner(body_shape_index)[/code] 的 [CollisionShape2D] 节点。\n"
"[code]local_shape_index[/code] [Physics2DServer] 使用的此 RigidBody2D 的 "
-"[Shape2D] 索引。获得带有 [code]self.shape_owner_get_owner "
-"(local_shape_index)[/code] 的 [CollisionShape2D] 节点。"
+"[Shape2D] 索引。获得带有 [code]self.shape_owner_get_owner (local_shape_index)"
+"[/code] 的 [CollisionShape2D] 节点。"
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -63464,8 +63812,8 @@ msgid ""
"Sometimes using the larger gameplay area of the secondary PVS may be "
"preferable."
msgstr ""
-"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦"
-"PVS(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n"
+"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦PVS"
+"(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n"
"æœ‰æ—¶ä½¿ç”¨æ¬¡è¦ PVS 的较大游æˆåŒºåŸŸå¯èƒ½æ›´å¯å–。"
#: doc/classes/RoomManager.xml
@@ -63517,8 +63865,8 @@ msgstr ""
"RootMotionView[/code]。此外,它ä¸èƒ½æ˜¯ [code]tool[/code] 脚本。"
#: doc/classes/RootMotionView.xml
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
-msgstr "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
+msgstr ""
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -63771,14 +64119,6 @@ msgstr ""
"[SceneTree] 是场景所使用的默认 [MainLoop] å®žçŽ°ï¼Œå› æ­¤æŽŒæŽ§ç€æ¸¸æˆå¾ªçŽ¯ã€‚"
#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "$DOCS_URL/tutorials/scripting/scene_tree.html"
-
-#: doc/classes/SceneTree.xml
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -63843,12 +64183,13 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºæŒ‡å®šçš„[code]path[/code]中的场景,在将其加载到"
-"[PackedScene]中并创建一个新的实例。\n"
-"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果[code]path[/code]ä¸èƒ½è¢«åŠ è½½åˆ°ä¸€ä¸ª[PackedScene]"
-"中,,该场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant ERR_CANT_CREATE]。\n"
-"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„场景节点是在下一个空闲帧中添加。在[method "
-"change_scene]调用之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
+"å°†ä½äºŽç»™å®šè·¯å¾„ [code]path[/code] 的场景加载进一个 [PackedScene] 并新建其实"
+"例,然åŽå°†æ­£åœ¨è¿è¡Œçš„场景修改为这个场景。\n"
+"æˆåŠŸæ—¶è¿”å›ž [constant OK],如果 [code]path[/code] ä¸èƒ½è¢«åŠ è½½åˆ°ä¸€ä¸ª "
+"[PackedScene] 中则返回 [constant ERR_CANT_OPEN],如果该场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返"
+"回 [constant ERR_CANT_CREATE]。\n"
+"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„场景节点是在下一个空闲帧中添加的。在 "
+"[method change_scene] 调用之åŽï¼Œä½ æ— æ³•ç«‹å³è®¿é—®åˆ°å®ƒã€‚"
#: doc/classes/SceneTree.xml
msgid ""
@@ -63859,11 +64200,11 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene_to] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[PackedScene]的新实例。\n"
-"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant "
+"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„ [PackedScene] 的新实例。\n"
+"æˆåŠŸæ—¶è¿”å›ž [constant OK],如果场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回 [constant "
"ERR_CANT_CREATE]。\n"
-"[b]注æ„:[/b] åœºæ™¯çš„æ”¹å˜æ˜¯å»¶è¿Ÿçš„,新的场景节点是在下一个空闲帧中添加。在调用"
-"[method change_scene_to]之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
+"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„场景节点是在下一个空闲帧中添加的。在 "
+"[method change_scene_to] 调用之åŽï¼Œä½ æ— æ³•ç«‹å³è®¿é—®åˆ°å®ƒã€‚"
#: doc/classes/SceneTree.xml
msgid ""
@@ -64364,10 +64705,6 @@ msgstr ""
"的基类之一相匹é…,[method Object.set_script] 会扩展该对象。"
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/index.html"
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr "如果脚本å¯ä»¥å®žä¾‹åŒ–,则返回 [code]true[/code]。"
@@ -64509,7 +64846,7 @@ msgstr ""
msgid ""
"Reload all currently opened scripts from disk in case the file contents are "
"newer."
-msgstr ""
+msgstr "从ç£ç›˜é‡æ–°åŠ è½½æ‰€æœ‰å½“å‰æ‰“开的脚本,å‡è®¾æ–‡ä»¶å†…容更新。"
#: doc/classes/ScriptEditor.xml
msgid ""
@@ -64734,14 +65071,6 @@ msgstr ""
"ç¼–å†™è‡ªå·±çš„è‡ªå®šä¹‰è¡Œä¸ºæ¥æ¸²æŸ“对象或更新粒å­ä¿¡æ¯ã€‚有关详细说明和用法,请å‚阅下é¢"
"链接的教程。"
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr "$DOCS_URL/tutorials/shaders/index.html"
-
-#: doc/classes/Shader.xml
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -65142,10 +65471,6 @@ msgstr ""
"对其å­é¡¹çš„æ”¾æ¾å§¿åŠ¿çš„å¼•ç”¨ï¼Œå¹¶ä½œä¸ºå¯¹å…¶éª¨éª¼çš„å•一访问点。"
#: doc/classes/Skeleton2D.xml
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -65471,11 +65796,12 @@ msgid ""
"Emitted when dragging stops. If [code]value_changed[/code] is true, [member "
"Range.value] is different from the value when you started the dragging."
msgstr ""
+"æ‹–æ‹½åœæ­¢æ—¶è§¦å‘。如果 [code]value_changed[/code] 为真,则 [member Range."
+"value] 与开始拖拽时的值ä¸åŒã€‚"
#: doc/classes/Slider.xml
-#, fuzzy
msgid "Emitted when dragging is started."
-msgstr "滚动开始时å‘出。"
+msgstr "拖拽开始时触å‘。"
#: doc/classes/SliderJoint.xml
msgid "Slider between two PhysicsBodies in 3D."
@@ -65542,12 +65868,11 @@ msgstr "柔性网格物ç†ä½“。"
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr "å¯å˜å½¢çš„物ç†ä½“。用于创建弹性或å¯å˜å½¢çš„ç‰©ä½“ï¼Œå¦‚å¸ƒã€æ©¡èƒ¶æˆ–其他柔性æè´¨ã€‚"
-
-#: doc/classes/SoftBody.xml
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
-msgstr "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
+msgstr ""
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -65655,12 +65980,12 @@ msgstr ""
"使用 [method @GDScript.deg2rad] 将度数转æ¢ä¸ºå¼§åº¦ã€‚"
#: doc/classes/Spatial.xml
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
-msgstr "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
+msgstr ""
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
-msgstr "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
+msgstr ""
#: doc/classes/Spatial.xml
msgid ""
@@ -65731,17 +66056,18 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
-"旋转自身,使局部-Z轴指å‘[code]target[/code]ä½ç½®ã€‚\n"
-"å˜æ¢å°†é¦–先围绕给定的[code]up[/code]矢é‡è¿›è¡Œæ—‹è½¬ï¼Œç„¶åŽé€šè¿‡è¿›ä¸€æ­¥å›´ç»•垂直于"
-"[code]target[/code]å’Œ[code]up[/code]矢é‡çš„轴进行旋转æ¥å®Œå…¨å¯¹å‡†ç›®æ ‡ã€‚\n"
-"æ“作是在全局空间进行的。"
#: doc/classes/Spatial.xml
msgid ""
@@ -65897,8 +66223,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ä»¥å¼§åº¦è¡¨ç¤ºï¼Œä»¥YXZ-Euler角的形å¼è¡¨ç¤º(Xè§’ã€Yè§’ã€Zè§’)。\n"
"[b]注:[/b]在数学æ„ä¹‰ä¸Šï¼Œæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ©é˜µè€Œä¸æ˜¯ä¸€ä¸ªå‘é‡ã€‚这三个欧拉角是旋转矩阵"
@@ -66007,10 +66333,6 @@ msgstr ""
"下é¢çš„æ•™ç¨‹ã€‚"
#: doc/classes/SpatialMaterial.xml
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr "$DOCS_URL/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr "如果指定的 [enum Feature] 被å¯ç”¨ï¼Œè¿”回 [code]true[/code]。"
@@ -66317,7 +66639,6 @@ msgid ""
msgstr "纹ç†ç”¨äºŽæŒ‡å®šç»†èŠ‚çº¹ç†ä¸ŽåŸºç¡€çº¹ç†çš„æ··åˆæ–¹å¼ã€‚"
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid ""
"Texture that specifies the per-pixel normal of the detail overlay.\n"
"[b]Note:[/b] Godot expects the normal map to use X+, Y+, and Z+ coordinates. "
@@ -66326,10 +66647,10 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"指定细节å åР层æ¯åƒç´ æ³•线的纹ç†ã€‚\n"
-"[b]注æ„:[/b] Godot希望法线贴图使用X +,Y-å’ŒZ +åæ ‡ã€‚请å‚阅[url=http://wiki."
-"polycount.com/wiki/"
-"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url],以比"
-"较æµè¡Œå¼•æ“ŽæœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"[b]注æ„:[/b]Godot 希望法线贴图使用 X+ã€Y+ å’Œ Z+ åæ ‡ã€‚请å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该页[/url],了解æµè¡Œ"
+"å¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -66553,7 +66874,6 @@ msgid "The strength of the normal map's effect."
msgstr "法线贴图的效果强度。"
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
msgid ""
"Texture used to specify the normal at a given pixel. The "
"[code]normal_texture[/code] only uses the red and green channels; the blue "
@@ -66570,16 +66890,17 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"ç”¨æ¥æŒ‡å®šåƒç´ ç‚¹çš„æ³•线的纹ç†ã€‚[code]normal_texture[/code]åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€šé“,"
-"忽略è“色和alpha通é“。从 [code]normal_texture[/code] 读å–的法线围绕 [Mesh] æ"
-"ä¾›çš„è¡¨é¢æ³•线定å‘。\n"
-"[b]注æ„:[/b] Mesh必须在其顶点数æ®ä¸­åŒæ—¶å®šä¹‰æ³•线和切线。å¦åˆ™ï¼Œæ³•线贴图将无法"
-"正确渲染,会出现整个表é¢å˜æš—的情况。如果用[SurfaceTool]创建几何体,å¯ä»¥ä½¿ç”¨"
-"[method SurfaceTool.generate_normals]和[method SurfaceTool.generate_tangents]"
-"æ¥åˆ†åˆ«è‡ªåŠ¨ç”Ÿæˆæ³•线和切线。\n"
-"[b]注æ„:[/b] Godot希望法线贴图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该"
-"页[/url],了解æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
+"ç”¨æ¥æŒ‡å®šåƒç´ ç‚¹çš„æ³•线的纹ç†ã€‚[code]normal_texture[/code] åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€š"
+"é“,忽略è“色和 Alpha 通é“。从 [code]normal_texture[/code] 读å–的法线围绕 "
+"[Mesh] æä¾›çš„è¡¨é¢æ³•线定å‘。\n"
+"[b]注æ„:[/b]Mesh 必须在其顶点数æ®ä¸­åŒæ—¶å®šä¹‰æ³•线和切线。å¦åˆ™ï¼Œæ³•线贴图将无法"
+"正确渲染,会出现整个表é¢å˜æš—的情况。如果用 [SurfaceTool] 创建几何体,å¯ä»¥ä½¿"
+"用 [method SurfaceTool.generate_normals] 和 [method SurfaceTool."
+"generate_tangents] æ¥åˆ†åˆ«è‡ªåŠ¨ç”Ÿæˆæ³•线和切线。\n"
+"[b]注æ„:[/b]Godot 希望法线贴图使用 X+ã€Y+ å’Œ Z+ åæ ‡ã€‚请å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该页[/url],了解æµè¡Œ"
+"å¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/SpatialMaterial.xml
msgid "Threshold at which the alpha scissor will discard values."
@@ -67612,9 +67933,9 @@ msgstr "从碰撞检查排除的 [PhysicsBody] 对象列表中删除指定的 [R
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
"碰撞检测的目标层。更多信æ¯è¯·å‚阅文档中的[url=$DOCS_URL/tutorials/physics/"
@@ -67737,7 +68058,7 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"为 Sprite æä¾›æ·±åº¦çš„æ³•线贴图。\n"
-"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"[b]注æ„:[/b]Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
"wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
@@ -67836,15 +68157,30 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
-msgstr "乘以颜色值,用于色调调制和模拟光的颜色。"
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
+msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
-msgstr "物体的å¯è§åº¦ä»Ž [code]0[/code] 完全ä¸å¯è§åˆ° [code]1[/code] 完全å¯è§ã€‚"
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
+msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid "The size of one pixel's width on the sprite to scale it in 3D."
@@ -67884,12 +68220,10 @@ msgid "Represents the size of the [enum DrawFlags] enum."
msgstr "代表[enum DrawFlags]枚举的大å°ã€‚"
#: doc/classes/SpriteFrames.xml
-#, fuzzy
msgid "Sprite frame library for AnimatedSprite and AnimatedSprite3D."
-msgstr "AnimatedSprite 的精çµå¸§åº“。"
+msgstr "AnimatedSprite å’Œ AnimatedSprite3D 的精çµå¸§åº“。"
#: doc/classes/SpriteFrames.xml
-#, fuzzy
msgid ""
"Sprite frame library for an [AnimatedSprite] or [AnimatedSprite3D] node. "
"Contains frames and animation data for playback.\n"
@@ -67898,7 +68232,8 @@ msgid ""
"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-"[AnimatedSprite] 的精çµå¸§åº“。包å«å¯ç”¨äºŽæ’­æ”¾çš„帧和动画数æ®ã€‚\n"
+"[AnimatedSprite] 或 [AnimatedSprite3D] 节点的精çµå¸§åº“。包å«å¯ç”¨äºŽæ’­æ”¾çš„帧和动"
+"画数æ®ã€‚\n"
"[b]注æ„:[/b]ä½ å¯ä»¥é€šè¿‡åˆ›å»ºå¸¦æœ‰ [code]_normal[/code] åŽç¼€çš„ [SpriteFrames] æ¥"
"å…³è”ä¸€ç»„æ³•çº¿è´´å›¾ã€‚ä¾‹å¦‚ï¼ŒåŒæ—¶å­˜åœ¨ä¸¤ä¸ªåˆ†åˆ«å«åš [code]run[/code] å’Œ "
"[code]run_normal[/code] çš„ [SpriteFrames] 资æºï¼Œé‚£ä¹ˆ [code]run[/code] 中的动"
@@ -68286,6 +68621,54 @@ msgid ""
"encoding and decoding."
msgstr "为 [code]true[/code] 时,该 [StreamPeer] è¿›è¡Œç¼–è§£ç æ—¶ä¼šä½¿ç”¨å¤§ç«¯æ ¼å¼ã€‚"
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Data buffer stream peer."
+msgstr "SSLæµå¯¹ç­‰ä½“。"
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "返回当å‰çš„æ»šåЍä½ç½®ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "è¿”å›žå‚æ•°çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr "SSLæµå¯¹ç­‰ä½“。"
@@ -68462,10 +68845,6 @@ msgstr ""
"è¿›è¡Œä¼ é€’çš„æˆæœ¬å¾ˆä½Žã€‚"
#: doc/classes/String.xml
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr "从给定的 [bool] 构造新 String。"
@@ -68626,8 +69005,9 @@ msgid ""
msgstr ""
"与å¦ä¸€ä¸ªå­—符串进行比较,区分大å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
-"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
-"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚\n"
+"[url=https://zh.wikipedia.org/wiki/"
+"Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨"
+"顺åºä¸€è‡´ã€‚\n"
"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
@@ -68795,8 +69175,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
-msgstr "以32使•´æ•°å½¢å¼è¿”回字符串的哈希值。"
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
+msgstr ""
#: doc/classes/String.xml
msgid ""
@@ -68867,10 +69252,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
"返回该字符串的副本,其中æ¯ä¸€è¡Œéƒ½ä½¿ç”¨å‰ç¼€ [code]prefix[/code] 进行缩进。\n"
@@ -69068,9 +69453,9 @@ msgid ""
msgstr ""
"与å¦ä¸€ä¸ªå­—符串进行[i]自然顺åº[/i]比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/"
"code]ã€å¤§äºŽæ—¶è¿”回 [code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”"
-"较的是字符串中的 [url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
-"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
-"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"较的是字符串中的 [url=https://zh.wikipedia.org/wiki/"
+"Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨"
+"顺åºä¸€è‡´ã€‚内部实现时,会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
"使用自然顺åºè¿›è¡ŒæŽ’åºæ—¶ï¼Œå¯¹è¿žç»­æ•°å­—的排åºç¬¦åˆå¤§å¤šæ•°äººçš„预期。使用自然顺åºå¯¹ 1 "
"到 10 进行排åºåŽï¼Œä¼šå¾—到 [code][1, 2, 3, ...][/code] è€Œä¸æ˜¯ [code][1, 10, 2, "
"3, ...][/code]。\n"
@@ -69104,9 +69489,9 @@ msgid ""
msgstr ""
"与å¦ä¸€ä¸ªå­—符串进行比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
-"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
-"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
-"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"[url=https://zh.wikipedia.org/wiki/"
+"Unicode%E5%AD%97%E7%AC%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨"
+"顺åºä¸€è‡´ã€‚内部实现时,会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
@@ -69348,13 +69733,28 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
-msgstr "将包å«å进制数的字符串转æ¢ä¸º [code]float[/code]。"
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
+msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
-msgstr "å°†åŒ…å«æ•´æ•°çš„字符串转æ¢ä¸º [code]int[/code]。"
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
+msgstr ""
#: doc/classes/String.xml
msgid "Returns the string converted to lowercase."
@@ -70009,7 +70409,7 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"绘制此样å¼ç›’时使用的法线贴图。\n"
-"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"[b]注æ„:[/b]Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
"wiki.polycount.com/wiki/"
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
@@ -72169,11 +72569,11 @@ msgid ""
"render_target_v_flip] on the Viewport. Otherwise, the image will appear "
"upside down."
msgstr ""
-"用于在用户界é¢ä¸Šç»˜åˆ¶å›¾æ ‡å’Œç²¾çµã€‚纹ç†çš„ä½ç½®å¯ä»¥é€šè¿‡[member stretch_mode]属性æ¥"
-"控制。它å¯ä»¥ç¼©æ”¾ã€å¹³é“ºï¼Œæˆ–è€…åœ¨å…¶è¾¹ç•ŒçŸ©å½¢å†…ä¿æŒå±…中。\n"
-"[b]注æ„:[/b] 当使用TextureRectæ¥æ˜¾ç¤º[ViewportTexture]时,你应该å¯ç”¨[member "
-"flip_v]。或者,你也å¯ä»¥åœ¨è§†çª—上å¯ç”¨[member Viewport.render_target_v_flip]。å¦"
-"则,图åƒä¼šå‡ºçŽ°é¢ å€’çš„æƒ…å†µã€‚"
+"用于在用户界é¢ä¸Šç»˜åˆ¶å›¾æ ‡å’Œç²¾çµã€‚纹ç†çš„ä½ç½®å¯ä»¥é€šè¿‡ [member stretch_mode] 属性"
+"æ¥æŽ§åˆ¶ã€‚å®ƒå¯ä»¥ç¼©æ”¾ã€å¹³é“ºï¼Œæˆ–è€…åœ¨å…¶è¾¹ç•ŒçŸ©å½¢å†…ä¿æŒå±…中。\n"
+"[b]注æ„:[/b]当使用 TextureRect æ¥æ˜¾ç¤º [ViewportTexture] 时,你应该å¯ç”¨ "
+"[member flip_v]。或者,你也å¯ä»¥åœ¨è§†çª—上å¯ç”¨ [member Viewport."
+"render_target_v_flip]。å¦åˆ™ï¼Œå›¾åƒä¼šå‡ºçŽ°ä¸Šä¸‹é¢ å€’çš„æƒ…å†µã€‚"
#: doc/classes/TextureRect.xml
msgid "If [code]true[/code], the texture scales to fit its bounding rectangle."
@@ -72225,10 +72625,6 @@ msgstr ""
"还å¯ä»¥é€šè¿‡ç¼–写 [code].theme[/code] 文件加载主题资æºï¼Œæ›´å¤šä¿¡æ¯è§æ–‡æ¡£ã€‚"
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr "$DOCS_URL/tutorials/ui/gui_skinning.html"
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr "清除主题上的所有值。"
@@ -72332,10 +72728,14 @@ msgstr ""
"get_constant]和/或[method get_constant_list]使用。"
#: doc/classes/Theme.xml
+#, fuzzy
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
-msgstr "如果主题有[code]node_type[/code],返回[code]name[/code]处的[Font]。"
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
+msgstr ""
+"如果主题有[code]node_type[/code],则将[code]old_name[/code]çš„[Font]é‡å‘½å为"
+"[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -72706,8 +73106,12 @@ msgstr ""
"é™åˆ¶ã€‚"
#: doc/classes/Thread.xml
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
-msgstr "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
+msgstr ""
#: doc/classes/Thread.xml
msgid ""
@@ -72808,12 +73212,12 @@ msgstr ""
"处的å•å…ƒæ ¼åæ ‡ä¼šè¢«ç¼–ç ä¸º [code]metadata[/code]。"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
-msgstr "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
+msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://godotengine.org/asset-library/asset/111"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -73511,8 +73915,13 @@ msgid "Sets the tile's material."
msgstr "设置图å—çš„æè´¨ã€‚"
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
-msgstr "设置图å—的调制颜色。"
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
+msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the tile's name."
@@ -73535,9 +73944,10 @@ msgid ""
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
"设置图å—的法线贴图纹ç†ã€‚\n"
-"[b]注æ„:[/b] Godot希望法线贴图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]本"
-"页é¢[/url],了解和比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ã€‚"
+"[b]注æ„:[/b]Godot 希望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚请å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]本页é¢[/url],了解和"
+"比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ã€‚"
#: doc/classes/TileSet.xml
msgid "Sets an offset for the tile's light occluder."
@@ -73717,8 +74127,8 @@ msgstr ""
"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š [code]year[/code]ã€[code]month[/code]ã€[code]day[/"
"code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/code]。其他的记"
"录(包括 [code]dst[/code])都会被忽略。\n"
-"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 "
-"0(1970-01-01 的 00:00:00)的对应部分。\n"
+"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 0"
+"(1970-01-01 的 00:00:00)的对应部分。\n"
"[code]use_space[/code] ä¸ºçœŸæ—¶ï¼Œå°†ä½¿ç”¨ç©ºæ ¼ä»£æ›¿ä¸­é—´çš„å­—æ¯ T。"
#: doc/classes/Time.xml
@@ -73827,8 +74237,8 @@ msgstr ""
"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š [code]year[/code]ã€[code]month[/code]ã€[code]day[/"
"code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/code]。其他的记"
"录(包括 [code]dst[/code])都会被忽略。\n"
-"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 "
-"0(1970-01-01 的 00:00:00)的对应部分。\n"
+"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 0"
+"(1970-01-01 的 00:00:00)的对应部分。\n"
"ä½ å¯ä»¥å°† [method get_datetime_dict_from_unix_time] 的输出直接传给本函数,得到"
"的就是最åˆçš„输入。\n"
"[b]注æ„:[/b]Unix 时间戳通常是 UTC 的。本方法ä¸ä¼šåšä»»ä½•时区转æ¢ï¼Œæ‰€ä»¥æ—¶é—´æˆ³çš„"
@@ -74514,14 +74924,6 @@ msgid ""
"map a string to another string."
msgstr "翻译是å¯ä»¥æŒ‰éœ€åŠ è½½å’Œå¸è½½çš„资æºï¼Œå°†ä¸€ä¸ªå­—符串映射到å¦ä¸€ä¸ªå­—符串。"
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr "$DOCS_URL/tutorials/i18n/locales.html"
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr "é‡å†™ [method get_message] 的虚方法。"
@@ -74661,8 +75063,10 @@ msgid "Clears the tree. This removes all items."
msgstr "清除树。这将删除所有项目。"
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -74699,6 +75103,12 @@ msgstr ""
"SELECT_MULTI] 模å¼ä¸‹å¯è§ã€‚"
#: doc/classes/Tree.xml
+#, fuzzy
+msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr "返回在[code]position[/code]的列索引,如果那里没有项目,则返回-1。"
+
+#: doc/classes/Tree.xml
msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr "返回在[code]position[/code]的列索引,如果那里没有项目,则返回-1。"
@@ -74760,10 +75170,11 @@ msgid "Returns the column for the currently edited item."
msgstr "返回当å‰ç¼–辑项的列。"
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
"返回指定项目的矩形区域。如果[code]column[/code]被指定,åªå¾—到该列的ä½ç½®å’Œå¤§"
"å°ï¼Œå¦åˆ™å¾—åˆ°åŒ…å«æ‰€æœ‰åˆ—的矩形。"
@@ -74775,9 +75186,10 @@ msgid ""
msgstr "返回指定ä½ç½®ï¼Œå³ç›¸å¯¹äºŽæ ‘的原点ä½ç½®çš„æ ‘中项。"
#: doc/classes/Tree.xml
+#, fuzzy
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -74828,7 +75240,8 @@ msgstr ""
"è¦åˆ¤æ–­ä¸€ä¸ªé¡¹çš„æŸä¸€åˆ—æ˜¯å¦è¢«é€‰ä¸­ï¼Œè¯·ä½¿ç”¨[method TreeItem.is_selected]。"
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
msgstr "使 [Tree] 跳转到指定的项。"
#: doc/classes/Tree.xml
@@ -75243,13 +75656,13 @@ msgstr ""
"您å¯ä»¥ä½¿ç”¨[method Object.free]删除[TreeItem]。"
#: doc/classes/TreeItem.xml
+#, fuzzy
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
"在 [code]column[/code] 列添加一个带有 [Texture] [code]button[/code] 的按钮。 "
"[code]button_idx[/code] 索引用于在调用其他方法时标识按钮。如果未指定,则使用"
@@ -75290,6 +75703,14 @@ msgstr ""
"返回在[code]column[/code]中索引[code]button_idx[/code]按钮的[Texture]。"
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr ""
+"返回在[code]column[/code]中索引[code]button_idx[/code]按钮的æç¤ºä¿¡æ¯å­—符串。"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
@@ -75298,6 +75719,14 @@ msgstr ""
"按钮的索引。"
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr ""
+"返回在[code]column[/code]中索引[code]button_idx[/code]按钮的æç¤ºä¿¡æ¯å­—符串。"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -75632,7 +76061,6 @@ msgid "Smoothly animates a node's properties over time."
msgstr "ä½¿èŠ‚ç‚¹çš„å±žæ€§éšæ—¶é—´å¹³æ»‘地å˜åŒ–。"
#: doc/classes/Tween.xml
-#, fuzzy
msgid ""
"Tweens are useful for animations requiring a numerical property to be "
"interpolated over a range of values. The name [i]tween[/i] comes from [i]in-"
@@ -75695,7 +76123,9 @@ msgstr ""
"两处都是)。如果你ä¸çŸ¥é“该选哪个过渡和缓动,你å¯ä»¥ç”¨ [constant EASE_IN_OUT] "
"å°è¯•ä¸åŒçš„ [enum TransitionType] 常数,然åŽä½¿ç”¨çœ‹èµ·æ¥æœ€å¥½çš„那个。\n"
"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
-"tween_cheatsheet.png]Tween 缓动与过渡类型速查表[/url]"
+"tween_cheatsheet.png]Tween 缓动与过渡类型速查表[/url]\n"
+"[b]注æ„:[/b]å¦‚æžœæ— æ³•å®Œæˆæ‰€è¯·æ±‚çš„æ“作,Tween 的方法会返回 [code]false[/"
+"code]。"
#: doc/classes/Tween.xml
msgid ""
@@ -76592,8 +77022,8 @@ msgid ""
"Returns the default gateway. That is the first discovered [UPNPDevice] that "
"is also a valid IGD (InternetGatewayDevice)."
msgstr ""
-"返回默认网关。这是第一个å‘现的[UPNPDevice],也是一个有效的"
-"IGD(InternetGatewayDevice)。"
+"返回默认网关。这是第一个å‘现的[UPNPDevice],也是一个有效的IGD"
+"(InternetGatewayDevice)。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
@@ -77037,17 +77467,13 @@ msgstr ""
"对一个容器的修改将修改对它的所有引用。如果需è¦å¤šçº¿ç¨‹è®¿é—®ï¼Œåº”该创建一个 "
"[Mutex] æ¥é”定它。"
-#: doc/classes/Variant.xml
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr "$DOCS_URL/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr "垂直盒å¼å®¹å™¨ã€‚"
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container. See [BoxContainer]."
-msgstr "垂直盒å¼å®¹å™¨ã€‚å‚阅[BoxContainer]。"
+msgstr "垂直盒å¼å®¹å™¨ã€‚请å‚阅 [BoxContainer]。"
#: doc/classes/VBoxContainer.xml
msgid "The vertical space between the [VBoxContainer]'s elements."
@@ -77070,10 +77496,8 @@ msgstr ""
"评估为 [code]false[/code]。å¦åˆ™ï¼ŒVector2 将总是评估为 [code]true[/code]。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
#: doc/classes/Vector2.xml
msgid ""
@@ -77166,6 +77590,11 @@ msgid ""
"embeds the 2D vectors in the XY plane of 3D space and uses their cross "
"product's Z component as the analog."
msgstr ""
+"返回该å‘é‡ä¸Ž [code]with[/code] çš„å‰ç§¯çš„ 2D 模拟。\n"
+"这是这两个å‘釿‰€æž„æˆçš„平行四边形的有å‘é¢ç§¯ã€‚如果第二个å‘é‡ç›¸å¯¹äºŽç¬¬ä¸€ä¸ªå‘釿˜¯"
+"顺时针的,则å‰ç§¯ä¸ºæ­£é¢ç§¯ã€‚如果是逆时针,则å‰ç§¯ä¸ºè´Ÿé¢ç§¯ã€‚\n"
+"[b]注æ„:[/b]数学上没有定义 2D å‰ç§¯ã€‚这个方法会将这两个 2D å‘é‡åµŒå…¥åˆ° 3D 空间"
+"中的 XY å¹³é¢ï¼Œç„¶åŽç”¨å…¶å‰ç§¯çš„ Z 分é‡ä½œä¸ºæ¨¡æ‹Ÿã€‚"
#: doc/classes/Vector2.xml
msgid ""
@@ -77410,7 +77839,7 @@ msgstr "å³å•ä½å‘é‡ã€‚代表å³çš„æ–¹å‘。"
#: doc/classes/Vector2.xml
msgid "Up unit vector. Y is down in 2D, so this vector points -Y."
-msgstr "上å•ä½å‘é‡ã€‚Y 在 2D 中是å‘下的,所以这个å‘釿Œ‡å‘ -Y。"
+msgstr "上å•ä½å‘é‡ã€‚在 2D 中 Y 是å‘下的,所以这个å‘釿Œ‡å‘ -Y。"
#: doc/classes/Vector2.xml
msgid "Down unit vector. Y is down in 2D, so this vector points +Y."
@@ -77435,7 +77864,7 @@ msgstr ""
#: doc/classes/Vector3.xml
msgid "Returns a Vector3 with the given components."
-msgstr "返回具有给定分é‡çš„Vector3。"
+msgstr "返回具有给定分é‡çš„ Vector3。"
#: doc/classes/Vector3.xml
msgid "Returns the unsigned minimum angle to the given vector, in radians."
@@ -77458,7 +77887,7 @@ msgstr ""
#: doc/classes/Vector3.xml
msgid "Returns the distance between this vector and [code]b[/code]."
-msgstr "返回此å‘é‡ä¸Ž[code]b[/code]之间的è·ç¦»ã€‚"
+msgstr "返回此å‘é‡ä¸Ž [code]b[/code] 之间的è·ç¦»ã€‚"
#: doc/classes/Vector3.xml
msgid ""
@@ -77474,21 +77903,21 @@ msgid ""
"aligned.\n"
"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
msgstr ""
-"返回此å‘é‡ä¸Ž[code]b[/code]的点积。这å¯ä»¥ç”¨æ¥æ¯”较两个å‘é‡ä¹‹é—´çš„角度。例如,这"
-"å¯ä»¥ç”¨æ¥ç¡®å®šä¸€ä¸ªæ•Œäººæ˜¯å¦æ­£é¢å¯¹çŽ©å®¶ã€‚\n"
-"对于直角90度,点积将是[code]0[/code],对于窄于90度的角度,点积大于0,对于宽于"
-"90度的角度,点积å°äºŽ0。\n"
-"当使用归一化å•ä½å‘é‡ï¼Œå‘釿œå‘ç›¸åæ–¹å‘时,结果总是在[code]-1.0[/code](180度"
-"角)和[code]1.0[/code](0度角)之间,当å‘é‡å¯¹é½ã€‚\n"
-"[b]注æ„:[/b][code]a.dot(b)[/code]ç­‰åŒäºŽ[code]b.dot(a)[/code]。"
+"返回此å‘é‡ä¸Ž [code]b[/code] 的点积。这å¯ä»¥ç”¨æ¥æ¯”较两个å‘é‡ä¹‹é—´çš„角度。例如,"
+"è¿™å¯ä»¥ç”¨æ¥ç¡®å®šä¸€ä¸ªæ•Œäººæ˜¯å¦æ­£é¢å¯¹çŽ©å®¶ã€‚\n"
+"对于直角 90 度,点积将是 [code]0[/code],对于窄于 90 度的角度,点积大于 0,对"
+"于宽于 90 度的角度,点积å°äºŽ 0。\n"
+"当使用归一化å•ä½å‘é‡ï¼Œå‘釿œå‘ç›¸åæ–¹å‘时,结果总是在 [code]-1.0[/code](180 "
+"度角)和 [code]1.0[/code](0 度角)之间,当å‘é‡å¯¹é½ã€‚\n"
+"[b]注æ„:[/b][code]a.dot(b)[/code] ç­‰åŒäºŽ [code]b.dot(a)[/code]。"
#: doc/classes/Vector3.xml
msgid ""
"Returns the inverse of the vector. This is the same as [code]Vector3( 1.0 / "
"v.x, 1.0 / v.y, 1.0 / v.z )[/code]."
msgstr ""
-"返回å‘é‡çš„å值。这与[code]Vector3( 1.0 / v.x, 1.0 / v.y, 1.0 / v.z )[/code]相"
-"åŒã€‚"
+"返回å‘é‡çš„å值。这与 [code]Vector3( 1.0 / v.x, 1.0 / v.y, 1.0 / v.z )[/code] "
+"相åŒã€‚"
#: doc/classes/Vector3.xml
msgid ""
@@ -77496,8 +77925,8 @@ msgid ""
"[code]to[/code] by amount [code]t[/code]. [code]weight[/code] is on the "
"range of 0.0 to 1.0, representing the amount of interpolation."
msgstr ""
-"返回这个å‘é‡ä¸Ž[code]to[/code]之间的线性æ’值的结果,æ’值é‡ä¸º[code]t[/code]。"
-"[code]weight[/code]的范围是0.0到1.0,表示æ’值的数é‡ã€‚"
+"返回这个å‘é‡ä¸Ž [code]to[/code] 之间的线性æ’值的结果,æ’值é‡ä¸º [code]t[/"
+"code]。[code]weight[/code] 的范围是 0.0 到 1.0,表示æ’值的数é‡ã€‚"
#: doc/classes/Vector3.xml
msgid ""
@@ -77505,8 +77934,8 @@ msgid ""
"constants. If all components are equal, this method returns [constant "
"AXIS_X]."
msgstr ""
-"返回å‘é‡çš„æœ€å¤§å€¼çš„轴。å‚阅[code]AXIS_*[/code]常é‡ã€‚如果所有分é‡éƒ½ç›¸ç­‰ï¼Œè¯¥æ–¹æ³•"
-"返回[constant AXIS_X]。"
+"返回å‘é‡çš„æœ€å¤§å€¼çš„轴。å‚阅 [code]AXIS_*[/code] 常é‡ã€‚如果所有分é‡éƒ½ç›¸ç­‰ï¼Œè¯¥æ–¹"
+"法返回 [constant AXIS_X]。"
#: doc/classes/Vector3.xml
msgid ""
@@ -77514,8 +77943,8 @@ msgid ""
"constants. If all components are equal, this method returns [constant "
"AXIS_Z]."
msgstr ""
-"返回矢é‡çš„æœ€å°å€¼çš„轴。å‚阅[code]AXIS_*[/code]常é‡ã€‚如果所有分é‡éƒ½ç›¸ç­‰ï¼Œæœ¬æ–¹æ³•"
-"返回[constant AXIS_Z]。"
+"返回矢é‡çš„æœ€å°å€¼çš„轴。å‚阅 [code]AXIS_*[/code] 常é‡ã€‚如果所有分é‡éƒ½ç›¸ç­‰ï¼Œæœ¬æ–¹"
+"法返回 [constant AXIS_Z]。"
#: doc/classes/Vector3.xml
msgid "Returns the outer product with [code]b[/code]."
@@ -77554,7 +77983,7 @@ msgstr ""
msgid ""
"The vector's Z component. Also accessible by using the index position [code]"
"[2][/code]."
-msgstr "å‘é‡çš„Z分é‡ã€‚也å¯ä»¥é€šè¿‡ä½¿ç”¨ç´¢å¼•ä½ç½®[code][2][/code]访问。"
+msgstr "å‘é‡çš„ Z 分é‡ã€‚也å¯ä»¥é€šè¿‡ä½¿ç”¨ç´¢å¼•ä½ç½® [code][2][/code] 访问。"
#: doc/classes/Vector3.xml
msgid ""
@@ -77875,6 +78304,16 @@ msgstr ""
"这个值会影å“车辆的滚动。如果所有车轮都设置为1.0,车辆将容易翻车,而0.0的值将"
"阻止车身侧倾。"
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical flow container."
+msgstr "垂直盒å¼å®¹å™¨ã€‚"
+
+#: doc/classes/VFlowContainer.xml
+#, fuzzy
+msgid "Vertical version of [FlowContainer]."
+msgstr "[Separator]的垂直版本。"
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr "用于播放视频æµçš„æŽ§ä»¶ã€‚"
@@ -78136,28 +78575,28 @@ msgstr ""
"å¦å¤–,如果设备有多个å±å¹•,视窗å¯ä»¥è¢«åˆ†é…到ä¸åŒçš„å±å¹•。\n"
"最åŽï¼Œè§†çª—也å¯ä»¥ä½œä¸ºæ¸²æŸ“ç›®æ ‡ï¼Œåœ¨è¿™ç§æƒ…况下,除éžç›¸å…³çš„纹ç†è¢«ç”¨äºŽç»˜åˆ¶ï¼Œå¦åˆ™å®ƒ"
"们将ä¸å¯è§ã€‚\n"
-"[b]注æ„:[/b]默认情况下,Godot 3.x 新创建的 Viewport 是上下颠倒的。å¯ç”¨ "
+"[b]注æ„:[/b]默认情况下,Godot 3.x 中新创建的 Viewport 是上下颠倒的。å¯ç”¨ "
"[member render_target_v_flip] å¯ä»¥ä½¿è¯¥ Viewport 使用正确的æœå‘显示。"
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
-msgstr "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://godotengine.org/asset-library/asset/128"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://godotengine.org/asset-library/asset/130"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://godotengine.org/asset-library/asset/541"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://godotengine.org/asset-library/asset/586"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -78188,7 +78627,10 @@ msgid "Returns the topmost modal in the stack."
msgstr "返回堆栈中最顶层的模型。"
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+#, fuzzy
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr "返回相对于视窗的鼠标ä½ç½®ã€‚"
#: doc/classes/Viewport.xml
@@ -78297,8 +78739,10 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr "强制更新 2D 和 3D 世界。"
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
-msgstr "将鼠标å移到相对于视窗的ä½ç½®ã€‚"
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
+msgstr ""
#: doc/classes/Viewport.xml
msgid "If [code]true[/code], the viewport will be used in AR/VR process."
@@ -78712,8 +79156,8 @@ msgid ""
"than the 3D usage modes. Note that 3D rendering effects such as glow and HDR "
"are not available when using this mode."
msgstr ""
-"分é…绘制2D场景所需的所有缓冲区。这比3D使用模å¼å ç”¨æ›´å°‘çš„VRAM。请注æ„,使用这"
-"ç§æ¨¡å¼æ—¶ï¼Œè¯¸å¦‚辉光和HDRç­‰3D渲染效果是ä¸å¯ç”¨çš„。"
+"分é…绘制 2D 场景所需的所有缓冲区。这比 3D 使用模å¼å ç”¨æ›´å°‘çš„ VRAM。请注æ„,使"
+"ç”¨è¿™ç§æ¨¡å¼æ—¶ï¼Œè¯¸å¦‚辉光和 HDR ç­‰ 3D 渲染效果是ä¸å¯ç”¨çš„。"
#: doc/classes/Viewport.xml
msgid ""
@@ -78722,16 +79166,17 @@ msgid ""
"Usage] types, this requires the least VRAM. Note that 3D rendering effects "
"such as glow and HDR are not available when using this mode."
msgstr ""
-"分é…2D场景所需的缓冲区,而ä¸åˆ†é…å±å¹•æ‹·è´çš„缓冲区。相应地,你ä¸èƒ½ä»Žå±å¹•上读"
-"å–。在[enum Usage]ç±»åž‹ä¸­ï¼Œè¿™éœ€è¦æœ€å°‘çš„VRAM。注æ„ï¼Œä½¿ç”¨è¿™ç§æ¨¡å¼æ—¶ï¼Œè¯¸å¦‚辉光和"
-"HDRç­‰3D渲染效果是ä¸å¯ç”¨çš„。"
+"åˆ†é… 2D 场景所需的缓冲区,而ä¸åˆ†é…å±å¹•æ‹·è´çš„缓冲区。相应地,你ä¸èƒ½ä»Žå±å¹•上读"
+"å–。在 [enum Usage] ç±»åž‹ä¸­ï¼Œè¿™éœ€è¦æœ€å°‘çš„ VRAM。注æ„ï¼Œä½¿ç”¨è¿™ç§æ¨¡å¼æ—¶ï¼Œè¯¸å¦‚辉光"
+"å’Œ HDR ç­‰ 3D 渲染效果是ä¸å¯ç”¨çš„。"
#: doc/classes/Viewport.xml
msgid ""
"Allocates full buffers for drawing 3D scenes and all 3D effects including "
"buffers needed for 2D scenes and effects."
msgstr ""
-"为绘制3D场景和所有3D效果分é…完整的缓冲区,包括2D场景和效果所需的缓冲区。"
+"为绘制 3D 场景和所有 3D 效果分é…完整的缓冲区,包括 2D 场景和效果所需的缓冲"
+"区。"
#: doc/classes/Viewport.xml
msgid ""
@@ -78739,8 +79184,8 @@ msgid ""
"buffers needed for reading from the screen and post-processing effects. "
"Saves some VRAM."
msgstr ""
-"分é…绘制3D场景所需的缓冲区。但ä¸åˆ†é…从å±å¹•上读å–å’ŒåŽæœŸå¤„ç†æ•ˆæžœæ‰€éœ€çš„缓冲区。"
-"节çœäº†ä¸€äº›VRAM。"
+"分é…绘制 3D 场景所需的缓冲区。但ä¸åˆ†é…从å±å¹•上读å–å’ŒåŽæœŸå¤„ç†æ•ˆæžœæ‰€éœ€çš„缓冲"
+"区。节çœäº†ä¸€äº› VRAM。"
#: doc/classes/Viewport.xml
msgid "Always clear the render target before drawing."
@@ -79159,10 +79604,6 @@ msgstr ""
"您最有å¯èƒ½é€šè¿‡ Visual Script 编辑器或在为其编写æ’件时使用此类。"
#: modules/visual_script/doc_classes/VisualScript.xml
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr "在 VisualScript 中添加指定å称的自定义信å·ã€‚"
@@ -81165,10 +81606,6 @@ msgstr ""
"视窗的画布的å­é¡¹ï¼Œæˆ–è€…å®ƒéœ€è¦æ˜¯æœ€ç»ˆè¿žæŽ¥åˆ°ç”»å¸ƒçš„å¦ä¸€ä¸ªç”»å¸ƒé¡¹çš„å­é¡¹ã€‚"
#: doc/classes/VisualServer.xml
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr "$DOCS_URL/tutorials/performance/using_servers.html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr "设置在窗å£è¾¹ç¼˜æ¸²æŸ“的图åƒã€‚"
@@ -81654,8 +82091,8 @@ msgstr "设置环境的[i]BGMode[/i]。相当于[member Environment.background_m
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr "场景中空白区域的颜色显示(如果使用自定义颜色或颜色+天空背景模å¼ï¼‰ã€‚"
#: doc/classes/VisualServer.xml
@@ -81966,10 +82403,11 @@ msgstr "为这个GI探针设置å•å…ƒ[Transform]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
-"如果VisualServer的数æ®è¢«æ›´æ”¹ï¼Œåˆ™è¿”回[code]true[/code]。如果å‘ç”Ÿè¿™ç§æƒ…况,通常"
-"会调用[method draw]。"
#: doc/classes/VisualServer.xml
msgid "Not yet implemented. Always returns [code]false[/code]."
@@ -82422,10 +82860,10 @@ msgid ""
"LIGHT_BAKE_DISABLED] or [constant LIGHT_BAKE_INDIRECT] depending on the "
"given parameter."
msgstr ""
-"设置GI探针是å¦ä»Žè¿™ä¸ªç¯ä¸­æ•æ‰å…‰çº¿ä¿¡æ¯ã€‚[i]废弃的方法。[/i]使用[method "
-"light_set_bake_mode]ä»£æ›¿ã€‚è¿™ä¸ªæ–¹æ³•åªæ˜¯å‡ºäºŽå…¼å®¹æ€§è€ƒè™‘而被ä¿ç•™ï¼Œå®ƒåœ¨å†…部调用"
-"[method light_set_bake_mode],根æ®ç»™å®šçš„傿•°å°†çƒ˜çƒ¤æ¨¡å¼è®¾ç½®ä¸º[constant "
-"LIGHT_BAKE_DISABLED]或[constant LIGHT_BAKE_INDIRECT]。"
+"设置 GI 探针是å¦ä»Žè¿™ä¸ªç¯ä¸­æ•æ‰å…‰çº¿ä¿¡æ¯ã€‚[i]已废弃的方法。[/i]请使用 [method "
+"light_set_bake_mode] ä»£æ›¿ã€‚è¿™ä¸ªæ–¹æ³•åªæ˜¯å‡ºäºŽå…¼å®¹æ€§è€ƒè™‘而被ä¿ç•™ï¼Œå®ƒåœ¨å†…部调用 "
+"[method light_set_bake_mode],根æ®ç»™å®šçš„傿•°å°†çƒ˜ç„™æ¨¡å¼è®¾ç½®ä¸º [constant "
+"LIGHT_BAKE_DISABLED] 或 [constant LIGHT_BAKE_INDIRECT]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -84441,33 +84879,33 @@ msgstr "使用 [Transform] 存储 MultiMesh å˜æ¢ã€‚"
#: doc/classes/VisualServer.xml
msgid "MultiMesh does not use per-instance color."
-msgstr "MultiMeshä¸ä½¿ç”¨æ¯ä¸ªå®žä¾‹çš„颜色。"
+msgstr "MultiMesh ä¸ä½¿ç”¨æ¯ä¸ªå®žä¾‹çš„颜色。"
#: doc/classes/VisualServer.xml
msgid ""
"MultiMesh color uses 8 bits per component. This packs the color into a "
"single float."
-msgstr "多网格颜色使用æ¯ä¸ªç»„ä»¶ 8 ä½ã€‚这将颜色打包æˆä¸€ä¸ªæµ®ç‚¹æ•°ã€‚"
+msgstr "MultiMesh 颜色使用æ¯ä¸ªåˆ†é‡ 8 ä½ã€‚这将颜色打包æˆä¸€ä¸ªæµ®ç‚¹æ•°ã€‚"
#: doc/classes/VisualServer.xml
msgid "MultiMesh color uses a float per channel."
-msgstr "多网格颜色使用æ¯ä¸ªé€šé“的浮点数。"
+msgstr "MultiMesh 颜色为æ¯ä¸ªé€šé“使用浮点数。"
#: doc/classes/VisualServer.xml
msgid "MultiMesh does not use custom data."
-msgstr "MultiMeshä¸ä½¿ç”¨è‡ªå®šä¹‰æ•°æ®ã€‚"
+msgstr "MultiMesh ä¸ä½¿ç”¨è‡ªå®šä¹‰æ•°æ®ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"MultiMesh custom data uses 8 bits per component. This packs the 4-component "
"custom data into a single float."
msgstr ""
-"å¤šç½‘æ ¼è‡ªå®šä¹‰æ•°æ®æ¯ä¸ªç»„件使用 8 ä½ã€‚这将 4 ä¸ªç»„ä»¶çš„è‡ªå®šä¹‰æ•°æ®æ‰“包到一个浮点数"
-"中。"
+"MultiMesh è‡ªå®šä¹‰æ•°æ®æ¯ä¸ªåˆ†é‡ä½¿ç”¨ 8 ä½ã€‚这将 4 个分é‡çš„è‡ªå®šä¹‰æ•°æ®æ‰“包到一个浮"
+"点数中。"
#: doc/classes/VisualServer.xml
msgid "MultiMesh custom data uses a float per component."
-msgstr "多网格自定义数æ®ä½¿ç”¨æ¯ä¸ªç»„件的浮点数。"
+msgstr "MultiMesh 自定义数æ®ä¸ºæ¯ä¸ªåˆ†é‡ä½¿ç”¨æµ®ç‚¹æ•°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Reflection probe will update reflections once and then stop."
@@ -84523,7 +84961,7 @@ msgstr "ä¸è¦æ¸…除背景,使用上一帧渲染的东西作为背景。"
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum EnvironmentBG] enum."
-msgstr "代表[enum EnvironmentBG]枚举的大å°ã€‚"
+msgstr "代表 [enum EnvironmentBG] 枚举的大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Use lowest blur quality. Fastest, but may look bad."
@@ -84602,6 +85040,22 @@ msgstr "对 SSAO 输出执行 2x2 模糊。"
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr "对SSAO输出执行3x3模糊。使用它å¯ä»¥èŽ·å¾—æœ€å¹³æ»‘çš„SSAO。"
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr "带有å¯è§†åŒ–编辑器的自定义ç€è‰²å™¨ç¨‹åºã€‚"
@@ -84707,10 +85161,6 @@ msgstr ""
"并控制ç€è‰²å™¨çš„æµç¨‹ã€‚"
#: doc/classes/VisualShaderNode.xml
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -85292,10 +85742,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/VisualShaderNodeCustom.xml
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -85414,8 +85860,8 @@ msgid ""
msgstr ""
"é‡å†™æ­¤æ–¹æ³•æ¥å®šä¹‰å¯è§†åŒ–ç€è‰²å™¨ç¼–辑器的æˆå‘˜å¯¹è¯æ¡†å’Œå›¾ä¸­çš„相关自定义节点的å"
"称。\n"
-"定义这个方法是[b]å¯é€‰çš„[/b],但推è使用。如果ä¸é‡å†™ï¼ŒèŠ‚ç‚¹å°†è¢«å‘½å为 \"Unnamed"
-"\"。"
+"定义这个方法是[b]å¯é€‰çš„[/b],但推è使用。如果ä¸é‡å†™ï¼ŒèŠ‚ç‚¹å°†è¢«å‘½å为 "
+"\"Unnamed\"。"
#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
@@ -85718,13 +86164,9 @@ msgstr ""
"表,请å‚阅ç€è‰²å™¨å‚è€ƒï¼Œå³æŸ¥çœ‹[code]Tutorials[/code]教程部分的链接。"
#: doc/classes/VisualShaderNodeInput.xml
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
"å°å†™é£Žæ ¼çš„几个输入常é‡ä¹‹ä¸€ï¼Œæ¯”如。\"vertex\"([code]VERTEX[/code]) or "
"\"point_size\"([code]POINT_SIZE[/code])."
@@ -85780,8 +86222,8 @@ msgstr "表示å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„输出ç€è‰²å™¨å‚数。"
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
"æ­¤å¯è§†åŒ–ç€è‰²å™¨èŠ‚ç‚¹ä»¥ \"输出\" å—的形å¼å‡ºçŽ°åœ¨æ‰€æœ‰ç€è‰²å™¨å›¾ä¸­ï¼Œæœ‰å¤šä¸ªè¾“出值端"
"å£ã€‚"
@@ -86144,27 +86586,29 @@ msgstr "è¦æ‰§è¡Œçš„乘法类型。å‚阅[enum Operator]的选项。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid "Multiplies transform [code]a[/code] by the vector [code]b[/code]."
-msgstr "å°†å˜æ¢[code]a[/code]乘以å‘é‡[code]b[/code]。"
+msgstr "å°†å˜æ¢ [code]a[/code] 乘以å‘é‡ [code]b[/code]。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid "Multiplies vector [code]b[/code] by the transform [code]a[/code]."
-msgstr "å‘é‡[code]b[/code]ä¸Žå˜æ¢[code]a[/code]相乘。"
+msgstr "å°†å‘é‡ [code]b[/code] ä¹˜ä»¥å˜æ¢ [code]a[/code]。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid ""
"Multiplies transform [code]a[/code] by the vector [code]b[/code], skipping "
"the last row and column of the transform."
-msgstr "å°†å˜æ¢[code]a[/code]乘以å‘é‡[code]b[/code]ï¼Œè·³è¿‡å˜æ¢çš„æœ€åŽä¸€è¡Œå’Œä¸€åˆ—。"
+msgstr ""
+"å°†å˜æ¢ [code]a[/code] 乘以å‘é‡ [code]b[/code]ï¼Œè·³è¿‡å˜æ¢çš„æœ€åŽä¸€è¡Œå’Œä¸€åˆ—。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid ""
"Multiplies vector [code]b[/code] by the transform [code]a[/code], skipping "
"the last row and column of the transform."
-msgstr "å‘é‡[code]b[/code]ä¸Žå˜æ¢[code]a[/code]ç›¸ä¹˜ï¼Œè·³è¿‡å˜æ¢çš„æœ€åŽä¸€è¡Œå’Œä¸€åˆ—。"
+msgstr ""
+"å°†å‘é‡ [code]b[/code] ä¹˜ä»¥å˜æ¢ [code]a[/code]ï¼Œè·³è¿‡å˜æ¢çš„æœ€åŽä¸€è¡Œå’Œä¸€åˆ—。"
#: doc/classes/VisualShaderNodeUniform.xml
msgid "A base type for the uniforms within the visual shader graph."
-msgstr "å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„uniforms的基本类型。"
+msgstr "å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„ uniform 的基本类型。"
#: doc/classes/VisualShaderNodeUniform.xml
msgid ""
@@ -86172,46 +86616,46 @@ msgid ""
"from the [ShaderMaterial]. Uniforms are exposed as properties in the "
"[ShaderMaterial] and can be assigned from the inspector or from a script."
msgstr ""
-"uniform表示ç€è‰²å™¨ä¸­çš„一个å˜é‡ï¼Œå®ƒæ˜¯ç”±å¤–部设置的,å³ä»Ž[ShaderMaterial]中设置。"
-"uniform在[ShaderMaterial]中被暴露为属性,å¯ä»¥ä»Žæ£€æŸ¥å™¨æˆ–脚本中分é…。"
+"uniform 表示ç€è‰²å™¨ä¸­çš„一个å˜é‡ï¼Œå®ƒæ˜¯ç”±å¤–部设置的,å³ä»Ž [ShaderMaterial] 中设"
+"置。uniform 在 [ShaderMaterial] 中被暴露为属性,å¯ä»¥ä»Žæ£€æŸ¥å™¨æˆ–脚本中分é…。"
#: doc/classes/VisualShaderNodeUniform.xml
msgid ""
"Name of the uniform, by which it can be accessed through the "
"[ShaderMaterial] properties."
-msgstr "uniformçš„å称,å¯ä»¥é€šè¿‡[ShaderMaterial]属性访问它。"
+msgstr "uniform çš„å称,å¯ä»¥é€šè¿‡ [ShaderMaterial] 属性访问它。"
#: doc/classes/VisualShaderNodeUniformRef.xml
msgid "A reference to an existing [VisualShaderNodeUniform]."
-msgstr "对现有[VisualShaderNodeUniform]的引用。"
+msgstr "对现有 [VisualShaderNodeUniform] 的引用。"
#: doc/classes/VisualShaderNodeUniformRef.xml
msgid ""
"Creating a reference to a [VisualShaderNodeUniform] allows you to reuse this "
"uniform in different shaders or shader stages easily."
msgstr ""
-"创建对[VisualShaderNodeUniform]的引用,å¯ä»¥è®©ä½ åœ¨ä¸åŒçš„ç€è‰²å™¨æˆ–ç€è‰²é˜¶æ®µè½»æ¾åœ°"
-"é‡å¤ä½¿ç”¨è¿™ä¸ªuniform。"
+"创建对 [VisualShaderNodeUniform] 的引用,å¯ä»¥è®©ä½ åœ¨ä¸åŒçš„ç€è‰²å™¨æˆ–ç€è‰²é˜¶æ®µè½»æ¾"
+"地é‡å¤ä½¿ç”¨è¿™ä¸ª uniform。"
#: doc/classes/VisualShaderNodeUniformRef.xml
msgid "The name of the uniform which this reference points to."
-msgstr "该引用所指å‘çš„uniformçš„å称。"
+msgstr "该引用所指å‘çš„ uniform çš„å称。"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A [Vector3] constant to be used within the visual shader graph."
-msgstr "一个[Vector3]常é‡ï¼Œç”¨äºŽå¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ã€‚"
+msgstr "一个 [Vector3] 常é‡ï¼Œç”¨äºŽå¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ã€‚"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A constant [Vector3], which can be used as an input node."
-msgstr "一个常é‡[Vector3],它å¯ä»¥ä½œä¸ºè¾“入节点使用。"
+msgstr "ä¸€ä¸ªå¸¸é‡ [Vector3],它å¯ä»¥ä½œä¸ºè¾“入节点使用。"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A [Vector3] constant which represents the state of this node."
-msgstr "一个[Vector3]常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
+msgstr "一个 [Vector3] 常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
#: doc/classes/VisualShaderNodeVec3Uniform.xml
msgid "A [Vector3] uniform to be used within the visual shader graph."
-msgstr "一个[Vector3]çš„uniform,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
+msgstr "一个 [Vector3] çš„ uniform,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeVec3Uniform.xml
msgid "Translated to [code]uniform vec3[/code] in the shader language."
@@ -87434,7 +87878,7 @@ msgstr ""
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid "A class representing a specific WebSocket connection."
-msgstr "表示特定WebSocket连接的类。"
+msgstr "表示特定 WebSocket 连接的类。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid ""
@@ -87472,8 +87916,8 @@ msgid ""
"Returns the IP address of the connected peer.\n"
"[b]Note:[/b] Not available in the HTML5 export."
msgstr ""
-"返回连接的对等体的IP地å€ã€‚\n"
-"[b]注æ„:[/b] 在HTML5导出中ä¸å¯ç”¨ã€‚"
+"返回连接的对等体的 IP 地å€ã€‚\n"
+"[b]注æ„:[/b]在 HTML5 导出中ä¸å¯ç”¨ã€‚"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid ""
@@ -87481,7 +87925,7 @@ msgid ""
"[b]Note:[/b] Not available in the HTML5 export."
msgstr ""
"返回所连接对等体的远程端å£ã€‚\n"
-"[b]注æ„:[/b] 在HTML5导出中ä¸å¯ç”¨ã€‚"
+"[b]注æ„:[/b]在 HTML5 导出中ä¸å¯ç”¨ã€‚"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid ""
@@ -87684,6 +88128,7 @@ msgid "AR/VR interface using WebXR."
msgstr "使用 WebXR çš„ AR/VR 接å£ã€‚"
#: modules/webxr/doc_classes/WebXRInterface.xml
+#, fuzzy
msgid ""
"WebXR is an open standard that allows creating VR and AR applications that "
"run in the web browser.\n"
@@ -87806,7 +88251,7 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
"WebXR是一个开放标准,å…许创建在网络æµè§ˆå™¨ä¸­è¿è¡Œçš„VRå’ŒAR应用程åºã€‚\n"
"因此,这个界é¢åªæœ‰åœ¨HTML5导出中è¿è¡Œæ—¶æ‰èƒ½ä½¿ç”¨ã€‚\n"
@@ -87918,8 +88363,8 @@ msgstr ""
"和输入方法,或者å…许与更高级的设备进行更高级的交互。"
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
-msgstr "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
+msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -87954,6 +88399,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -88116,8 +88569,8 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
"当一个“controllerâ€æŽ§åˆ¶å™¨å®Œæˆå…¶â€œprimary actionâ€ä¸»è¦åŠ¨ä½œåŽè§¦å‘。\n"
@@ -88125,8 +88578,8 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
"当一个“controllerâ€æŽ§åˆ¶å™¨å®Œæˆå…¶â€œprimary actionâ€ä¸»è¦åŠ¨ä½œæ—¶è§¦å‘。\n"
@@ -88214,6 +88667,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr "当[member visibility_state]已更改时触å‘。"
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr "窗å£å¯¹è¯æ¡†çš„基类。"
@@ -88501,7 +88972,7 @@ msgstr "获å–当å‰èŠ‚ç‚¹ä»Žæ–‡ä»¶æˆ–ç¼“å†²åŒºå¼€å§‹å¤„çš„å­—èŠ‚åç§»é‡ã€‚"
#: doc/classes/XMLParser.xml
msgid ""
"Gets the type of the current node. Compare with [enum NodeType] constants."
-msgstr "获å–当å‰èŠ‚ç‚¹çš„ç±»åž‹ã€‚ä¸Ž[enum NodeType]叏釿¯”较。"
+msgstr "获å–当å‰èŠ‚ç‚¹çš„ç±»åž‹ã€‚ä¸Ž [enum NodeType] 叏釿¯”较。"
#: doc/classes/XMLParser.xml
msgid "Check whether the current element has a certain attribute."
@@ -88512,15 +88983,15 @@ msgid ""
"Check whether the current element is empty (this only works for completely "
"empty tags, e.g. [code]<element \\>[/code])."
msgstr ""
-"检查当å‰å…ƒç´ æ˜¯å¦ä¸ºç©ºï¼Œè¿™åªé€‚用于完全空的标签,例如[code]<element\\>[/code]。"
+"检查当å‰å…ƒç´ æ˜¯å¦ä¸ºç©ºï¼ˆåªé€‚用于完全空的标签,例如 [code]<element\\>[/code])。"
#: doc/classes/XMLParser.xml
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr "打开一个XML文件进行解æžã€‚这将返回一个错误代ç ã€‚"
+msgstr "打开一个 XML 文件进行解æžã€‚这将返回一个错误代ç ã€‚"
#: doc/classes/XMLParser.xml
msgid "Opens an XML raw buffer for parsing. This returns an error code."
-msgstr "打开一个XML原始缓冲区进行解æžã€‚这将返回一个错误代ç ã€‚"
+msgstr "打开一个 XML 原始缓冲区进行解æžã€‚这将返回一个错误代ç ã€‚"
#: doc/classes/XMLParser.xml
msgid "Reads the next node of the file. This returns an error code."
@@ -88531,7 +89002,7 @@ msgid ""
"Moves the buffer cursor to a certain offset (since the beginning) and read "
"the next node there. This returns an error code."
msgstr ""
-"将缓冲区光标移动到æŸä¸€åç§»é‡ï¼Œæ³¨ï¼Œä»Žå¼€å§‹ä½ç½®ï¼Œå¹¶åœ¨é‚£é‡Œè¯»å–下一个节点。这将返"
+"将缓冲区光标移动到æŸä¸€åç§»é‡ï¼ˆç›¸å¯¹äºŽå¼€å§‹ä½ç½®ï¼‰å¹¶åœ¨é‚£é‡Œè¯»å–下一个节点。这将返"
"回一个错误代ç ã€‚"
#: doc/classes/XMLParser.xml
diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po
index b07e7c7cc7..6fb4ff9eb2 100644
--- a/doc/translations/zh_TW.po
+++ b/doc/translations/zh_TW.po
@@ -3493,8 +3493,8 @@ msgstr ""
msgid ""
"Hints that a string property is an absolute path to a file outside the "
"project folder. Editing it will show a file dialog for picking the path. The "
-"hint string can be a set of filters with wildcards like [code]\"*.png,*.jpg"
-"\"[/code]."
+"hint string can be a set of filters with wildcards like [code]\"*.png,*."
+"jpg\"[/code]."
msgstr ""
#: doc/classes/@GlobalScope.xml
@@ -3853,22 +3853,21 @@ msgid ""
"integer coordinates."
msgstr ""
-#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Plane.xml
-#: doc/classes/Rect2.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
+#: doc/classes/AABB.xml doc/classes/Basis.xml doc/classes/Rect2.xml
+#: doc/classes/Transform.xml doc/classes/Transform2D.xml
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/index.html"
+msgid "Math tutorial index"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-msgid "$DOCS_URL/tutorials/math/vector_math.html"
+msgid "Vector math"
msgstr ""
#: doc/classes/AABB.xml doc/classes/Rect2.xml doc/classes/Vector2.xml
#: doc/classes/Vector3.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/vectors_advanced.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Advanced vector math"
+msgstr ""
#: doc/classes/AABB.xml
msgid "Constructs an [AABB] from a position and size."
@@ -4208,11 +4207,9 @@ msgid ""
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
-#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
-#: doc/classes/AnimationPlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_sprite_animation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
+#: doc/classes/AnimatedSprite.xml doc/classes/AnimationPlayer.xml
+msgid "2D Sprite animation"
+msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/Area2D.xml
#: doc/classes/AudioStreamPlayer.xml doc/classes/Button.xml
@@ -4221,9 +4218,8 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html"
#: doc/classes/InputEventAction.xml doc/classes/Label.xml
#: doc/classes/Particles2D.xml doc/classes/Timer.xml
#: doc/classes/VisibilityNotifier2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/515"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Dodge The Creeps Demo"
+msgstr ""
#: doc/classes/AnimatedSprite.xml
msgid ""
@@ -4302,6 +4298,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimatedSprite3D.xml
+msgid "2D Sprite animation (also applies to 3D)"
+msgstr ""
+
+#: doc/classes/AnimatedSprite3D.xml
msgid "Returns [code]true[/code] if an animation is currently being played."
msgstr ""
@@ -4437,10 +4437,6 @@ msgid ""
"Check [enum TrackType] to see available types."
msgstr ""
-#: doc/classes/Animation.xml doc/classes/AnimationPlayer.xml
-msgid "$DOCS_URL/tutorials/animation/index.html"
-msgstr ""
-
#: doc/classes/Animation.xml
msgid "Adds a track to the Animation."
msgstr ""
@@ -4869,25 +4865,6 @@ msgid ""
"otherwise [AnimationRootNode] should be used instead."
msgstr ""
-#: doc/classes/AnimationNode.xml doc/classes/AnimationNodeAdd2.xml
-#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
-#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
-#: doc/classes/AnimationNodeBlendSpace1D.xml
-#: doc/classes/AnimationNodeBlendSpace2D.xml
-#: doc/classes/AnimationNodeBlendTree.xml doc/classes/AnimationNodeOneShot.xml
-#: doc/classes/AnimationNodeOutput.xml
-#: doc/classes/AnimationNodeStateMachine.xml
-#: doc/classes/AnimationNodeStateMachinePlayback.xml
-#: doc/classes/AnimationNodeStateMachineTransition.xml
-#: doc/classes/AnimationNodeTimeScale.xml doc/classes/AnimationNodeTimeSeek.xml
-#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationTree.xml
-#: doc/classes/AnimationTreePlayer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
-
#: doc/classes/AnimationNode.xml
msgid ""
"Adds an input to the node. This is only useful for nodes created for use in "
@@ -5071,6 +5048,15 @@ msgstr ""
#: doc/classes/AnimationNodeBlend2.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
+#: doc/classes/AnimationNodeTimeScale.xml
+#: doc/classes/AnimationNodeTransition.xml
+msgid "AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
+#: doc/classes/AnimationNodeBlend2.xml
+#: doc/classes/AnimationNodeBlendSpace2D.xml
+#: doc/classes/AnimationNodeOneShot.xml doc/classes/AnimationNodeOutput.xml
#: doc/classes/AnimationNodeTransition.xml doc/classes/AnimationPlayer.xml
#: doc/classes/AnimationTree.xml doc/classes/AudioEffectReverb.xml
#: doc/classes/Camera.xml doc/classes/CollisionShape.xml
@@ -5080,9 +5066,8 @@ msgstr ""
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml doc/classes/Particles.xml
#: doc/classes/Quat.xml doc/classes/Skeleton.xml doc/classes/SpotLight.xml
#: doc/classes/StaticBody.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/678"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Third Person Shooter Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid "Input animation to use in an [AnimationNodeBlendTree]."
@@ -5103,9 +5088,8 @@ msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/MeshLibrary.xml
#: doc/classes/ProjectSettings.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/125"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Platformer Demo"
+msgstr ""
#: doc/classes/AnimationNodeAnimation.xml
msgid ""
@@ -5751,6 +5735,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationPlayer.xml
+msgid "Animation tutorial index"
+msgstr ""
+
+#: doc/classes/AnimationPlayer.xml
msgid ""
"Adds [code]animation[/code] to the player accessible with the key "
"[code]name[/code]."
@@ -6034,6 +6022,10 @@ msgid ""
msgstr ""
#: doc/classes/AnimationTree.xml
+msgid "Using AnimationTree"
+msgstr ""
+
+#: doc/classes/AnimationTree.xml
msgid "Manually advance the animations by the specified time (in seconds)."
msgstr ""
@@ -6503,9 +6495,8 @@ msgstr ""
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/127"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI in 3D Demo"
+msgstr ""
#: doc/classes/Area.xml
msgid ""
@@ -6740,23 +6731,19 @@ msgid ""
msgstr ""
#: doc/classes/Area2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_area_2d.html"
+msgid "Using Area2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html"
#: doc/classes/Area2D.xml doc/classes/CollisionShape2D.xml
#: doc/classes/RectangleShape2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/121"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Pong Demo"
+msgstr ""
#: doc/classes/Area2D.xml doc/classes/Camera2D.xml
#: doc/classes/KinematicBody2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/120"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Platformer Demo"
+msgstr ""
#: doc/classes/Area2D.xml
msgid ""
@@ -7142,9 +7129,12 @@ msgstr ""
#: doc/classes/Array.xml
msgid ""
-"Returns a hashed integer value representing the array and its contents.\n"
-"[b]Note:[/b] Arrays with equal contents can still produce different hashes. "
-"Only the exact same arrays will produce the same hashed integer value."
+"Returns a hashed 32-bit integer value representing the array and its "
+"contents.\n"
+"[b]Note:[/b] [Array]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the arrays are equal, because different arrays can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Array.xml
@@ -7341,13 +7331,6 @@ msgid ""
msgstr ""
#: doc/classes/ArrayMesh.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/"
-"arraymesh.html"
-
-#: doc/classes/ArrayMesh.xml
msgid ""
"Adds name for a blend shape that will be added with [method "
"add_surface_from_arrays]. Must be called before surface is added."
@@ -7647,12 +7630,6 @@ msgid ""
"milliseconds behind what is used for rendering as a result."
msgstr ""
-#: doc/classes/ARVRCamera.xml doc/classes/ARVRController.xml
-#: doc/classes/ARVRInterface.xml doc/classes/ARVROrigin.xml
-#: doc/classes/ARVRPositionalTracker.xml doc/classes/ARVRServer.xml
-msgid "$DOCS_URL/tutorials/vr/index.html"
-msgstr ""
-
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
msgstr ""
@@ -8774,9 +8751,8 @@ msgstr ""
#: doc/classes/AudioEffect.xml doc/classes/AudioEffectRecord.xml
#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
#: doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/527"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Mic Record Demo"
+msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid ""
@@ -9071,10 +9047,8 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml doc/classes/AudioEffectFilter.xml
#: doc/classes/AudioEffectHighShelfFilter.xml
#: doc/classes/AudioEffectLowShelfFilter.xml doc/classes/AudioServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_buses.html"
+msgid "Audio buses"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml
msgid "Distortion power. Value can range from 0 to 1."
@@ -9466,11 +9440,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioEffectRecord.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/recording_with_microphone.html"
+msgid "Recording with microphone"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/"
-"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml
msgid "Returns the recorded sample."
@@ -9563,7 +9534,9 @@ msgid ""
"See also [AudioStreamGenerator] for procedurally generating sounds."
msgstr ""
-#: doc/classes/AudioEffectSpectrumAnalyzer.xml
+#: doc/classes/AudioEffectSpectrumAnalyzer.xml doc/classes/AudioServer.xml
+#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
+#: doc/classes/CanvasItem.xml
msgid "Audio Spectrum Demo"
msgstr ""
@@ -9608,15 +9581,8 @@ msgid ""
msgstr ""
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/525"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
-
-#: doc/classes/AudioServer.xml doc/classes/AudioStream.xml
-#: doc/classes/AudioStreamPlayer.xml doc/classes/CanvasItem.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/528"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Device Changer Demo"
+msgstr ""
#: doc/classes/AudioServer.xml
msgid "Adds a bus at [code]at_position[/code]."
@@ -9631,7 +9597,8 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Name of the current device for audio input (see [method "
-"capture_get_device_list])."
+"capture_get_device_list]). The value [code]\"Default\"[/code] means that the "
+"system-wide default audio input is currently used."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9639,7 +9606,12 @@ msgid "Returns the names of all audio input devices detected on the system."
msgstr ""
#: doc/classes/AudioServer.xml
-msgid "Sets which audio input device is used for audio capture."
+msgid ""
+"Sets which audio input device is used for audio capture. On systems with "
+"multiple audio inputs (such as analog and USB), this can be used to select "
+"the audio input device. Setting the value [code]\"Default\"[/code] will "
+"record audio from the system-wide default audio input. If an invalid device "
+"name is set, the value will be reverted back to [code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9800,7 +9772,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
-"Name of the current device for audio output (see [method get_device_list])."
+"Name of the current device for audio output (see [method get_device_list]). "
+"On systems with multiple audio outputs (such as analog, USB and HDMI audio), "
+"this can be used to select the audio output device. The value "
+"[code]\"Default\"[/code] will play audio on the system-wide default audio "
+"output. If an invalid device name is set, the value will be reverted back to "
+"[code]\"Default\"[/code]."
msgstr ""
#: doc/classes/AudioServer.xml
@@ -9841,18 +9818,14 @@ msgid ""
msgstr ""
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/audio/audio_streams.html"
+msgid "Audio streams"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
#: doc/classes/AudioStreamPlayback.xml doc/classes/AudioStreamPlayer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/526"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Audio Generator Demo"
+msgstr ""
#: doc/classes/AudioStream.xml
msgid "Returns the length of the audio stream in seconds."
@@ -9890,12 +9863,12 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"generating lower-pitched sounds such as voices, lower sample rates such as "
-"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are generating lower-pitched sounds such as voices, lower sample rates such "
+"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10100,8 +10073,13 @@ msgid ""
"seconds."
msgstr ""
-#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
-msgid "Areas in which this sound plays."
+#: doc/classes/AudioStreamPlayer2D.xml
+msgid ""
+"Determines which [Area2D] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml
@@ -10145,6 +10123,15 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
+"Determines which [Area] layers affect the sound for reverb and audio bus "
+"effects. Areas can be used to redirect [AudioStream]s so that they play in a "
+"certain audio bus. An example of how you might use this is making a "
+"\"water\" area so that sounds played in the water are redirected through an "
+"audio bus to make them sound like they are being played underwater."
+msgstr ""
+
+#: doc/classes/AudioStreamPlayer3D.xml
+msgid ""
"Dampens audio using a low-pass filter above this frequency, in Hz. To "
"disable the dampening effect entirely, set this to [code]20500[/code] as "
"this frequency is above the human hearing limit."
@@ -10356,11 +10343,11 @@ msgid ""
"In games, common sample rates in use are [code]11025[/code], [code]16000[/"
"code], [code]22050[/code], [code]32000[/code], [code]44100[/code], and "
"[code]48000[/code].\n"
-"According to the [url=https://en.wikipedia.org/wiki/Nyquist"
-"%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/url], "
-"there is no quality difference to human hearing when going past 40,000 Hz "
-"(since most humans can only hear up to ~20,000 Hz, often less). If you are "
-"using lower-pitched sounds such as voices, lower sample rates such as "
+"According to the [url=https://en.wikipedia.org/wiki/"
+"Nyquist%E2%80%93Shannon_sampling_theorem]Nyquist-Shannon sampling theorem[/"
+"url], there is no quality difference to human hearing when going past 40,000 "
+"Hz (since most humans can only hear up to ~20,000 Hz, often less). If you "
+"are using lower-pitched sounds such as voices, lower sample rates such as "
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
@@ -10467,12 +10454,6 @@ msgid ""
msgstr ""
#: doc/classes/BakedLightmap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/baked_lightmaps.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-
-#: doc/classes/BakedLightmap.xml
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10531,7 +10512,7 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Bias value to reduce the amount of light proagation in the captured octree."
+"Bias value to reduce the amount of light propagation in the captured octree."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10598,9 +10579,9 @@ msgstr ""
#: doc/classes/BakedLightmap.xml
msgid ""
-"Determines the amount of samples per texel used in indrect light baking. The "
-"amount of samples for each quality level can be configured in the project "
-"settings."
+"Determines the amount of samples per texel used in indirect light baking. "
+"The amount of samples for each quality level can be configured in the "
+"project settings."
msgstr ""
#: doc/classes/BakedLightmap.xml
@@ -10904,23 +10885,17 @@ msgid ""
msgstr ""
#: doc/classes/Basis.xml doc/classes/Transform.xml doc/classes/Transform2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/matrices_and_transforms.html"
+msgid "Matrices and transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/math/"
-"matrices_and_transforms.html"
-#: doc/classes/Basis.xml doc/classes/Transform.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_transforms.html"
+#: doc/classes/Basis.xml doc/classes/Quat.xml doc/classes/Transform.xml
+msgid "Using 3D transforms"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml doc/classes/Vector2.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/584"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Matrix Transform Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/CylinderShape.xml
#: doc/classes/Dictionary.xml doc/classes/DynamicFont.xml
@@ -10931,15 +10906,13 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
#: doc/classes/SurfaceTool.xml doc/classes/TextureButton.xml
#: doc/classes/TextureRect.xml doc/classes/Thread.xml
#: doc/classes/VBoxContainer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/676"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Voxel Demo"
+msgstr ""
#: doc/classes/Basis.xml doc/classes/Line2D.xml doc/classes/Transform.xml
#: doc/classes/Transform2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/583"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2.5D Demo"
+msgstr ""
#: doc/classes/Basis.xml
msgid "Constructs a pure rotation basis matrix from the given quaternion."
@@ -11126,6 +11099,14 @@ msgstr ""
#: doc/classes/BitMap.xml
msgid ""
+"Returns an image of the same size as the bitmap and with a [enum Image."
+"Format] of type [code]FORMAT_L8[/code]. [code]true[/code] bits of the bitmap "
+"are being converted into white pixels, and [code]false[/code] bits into "
+"black."
+msgstr ""
+
+#: doc/classes/BitMap.xml
+msgid ""
"Creates a bitmap with the specified size, filled with [code]false[/code]."
msgstr ""
@@ -11160,6 +11141,11 @@ msgid ""
msgstr ""
#: doc/classes/BitMap.xml
+#, fuzzy
+msgid "Resizes the image to [code]new_size[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/BitMap.xml
msgid ""
"Sets the bitmap's element at the specified position, to the specified value."
msgstr ""
@@ -11420,17 +11406,15 @@ msgstr ""
#: doc/classes/CylinderShape.xml doc/classes/ProjectSettings.xml
#: doc/classes/RigidBody.xml doc/classes/SphereShape.xml
#: doc/classes/StaticBody.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/675"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Physics Tests Demo"
+msgstr ""
#: doc/classes/BoxShape.xml doc/classes/CollisionShape.xml
#: modules/gridmap/doc_classes/GridMap.xml doc/classes/KinematicBody.xml
#: doc/classes/Mesh.xml doc/classes/MeshInstance.xml
#: doc/classes/MeshLibrary.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/126"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Kinematic Character Demo"
+msgstr ""
#: doc/classes/BoxShape.xml
msgid ""
@@ -11472,9 +11456,8 @@ msgstr ""
#: doc/classes/GridContainer.xml doc/classes/OS.xml
#: doc/classes/PoolStringArray.xml doc/classes/ProjectSettings.xml
#: doc/classes/ResourceLoader.xml doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/677"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "OS Test Demo"
+msgstr ""
#: doc/classes/Button.xml
msgid ""
@@ -11507,6 +11490,13 @@ msgid ""
"used [StyleBox]es."
msgstr ""
+#: doc/classes/Button.xml
+msgid ""
+"Specifies if the icon should be aligned to the left, right, or center of a "
+"button. Uses the same [enum TextAlign] constants as the text alignment. If "
+"centered, text will draw on top of the icon."
+msgstr ""
+
#: doc/classes/Button.xml doc/classes/LinkButton.xml
msgid "The button's text that will be displayed inside the button's area."
msgstr ""
@@ -11907,15 +11897,13 @@ msgid ""
msgstr ""
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/112"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Isometric Demo"
+msgstr ""
#: doc/classes/Camera2D.xml doc/classes/Environment.xml
#: doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/110"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D HDR Demo"
+msgstr ""
#: doc/classes/Camera2D.xml
msgid "Aligns the camera to the tracked node."
@@ -12347,14 +12335,12 @@ msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/2d/2d_transforms.html"
+msgid "Viewport and canvas transforms"
msgstr ""
#: doc/classes/CanvasItem.xml doc/classes/Control.xml doc/classes/Node2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html"
+msgid "Custom drawing in 2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -12549,7 +12535,9 @@ msgid "Returns the transform matrix of this item's canvas."
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the global position of the mouse."
+msgid ""
+"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
+"in using the coordinate system of the [CanvasLayer]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12562,7 +12550,9 @@ msgid ""
msgstr ""
#: doc/classes/CanvasItem.xml
-msgid "Returns the mouse position relative to this item's position."
+msgid ""
+"Returns the mouse's position in this [CanvasItem] using the local coordinate "
+"system of this [CanvasItem]."
msgstr ""
#: doc/classes/CanvasItem.xml
@@ -12856,7 +12846,7 @@ msgid ""
msgstr ""
#: doc/classes/CanvasLayer.xml
-msgid "$DOCS_URL/tutorials/2d/canvas_layers.html"
+msgid "Canvas layers"
msgstr ""
#: doc/classes/CanvasLayer.xml
@@ -12906,6 +12896,18 @@ msgstr ""
msgid "The layer's transform."
msgstr ""
+#: doc/classes/CanvasLayer.xml
+msgid ""
+"If [code]false[/code], any [CanvasItem] under this [CanvasLayer] will be "
+"hidden.\n"
+"Unlike [member CanvasItem.visible], visibility of a [CanvasLayer] isn't "
+"propagated to underlying layers."
+msgstr ""
+
+#: doc/classes/CanvasLayer.xml
+msgid "Emitted when visibility of the layer is changed. See [member visible]."
+msgstr ""
+
#: doc/classes/CanvasModulate.xml
msgid "Tint the entire canvas."
msgstr ""
@@ -12986,20 +12988,6 @@ msgid ""
"characters will be displayed in a [RichTextEffect]."
msgstr ""
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/gui/bbcode_in_richtextlabel."
-"html"
-
-#: doc/classes/CharFXTransform.xml doc/classes/RichTextEffect.xml
-msgid ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-msgstr ""
-"https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project"
-
#: doc/classes/CharFXTransform.xml
msgid ""
"The index of the current character (starting from 0) for the "
@@ -13558,6 +13546,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -13643,9 +13632,9 @@ msgid ""
"The physics layers this CollisionObject3D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13654,9 +13643,9 @@ msgid ""
"The physics layers this CollisionObject3D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13666,10 +13655,11 @@ msgid ""
"events as the mouse is dragged across its shapes."
msgstr ""
-#: doc/classes/CollisionObject.xml
+#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], the [CollisionObject]'s shapes will respond to "
-"[RayCast]s."
+"If [code]true[/code], this object is pickable. A pickable object can detect "
+"the mouse pointer entering/leaving, and if the mouse is inside it, report "
+"input events. Requires at least one [member collision_layer] bit to be set."
msgstr ""
#: doc/classes/CollisionObject.xml
@@ -13762,9 +13752,9 @@ msgid ""
"The physics layers this CollisionObject2D is in. Collision objects can exist "
"in one or more of 32 different layers. See also [member collision_mask].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -13773,22 +13763,14 @@ msgid ""
"The physics layers this CollisionObject2D scans. Collision objects can scan "
"one or more of 32 different layers. See also [member collision_layer].\n"
"[b]Note:[/b] A contact is detected if object A is in any of the layers that "
-"object B scans, or object B is in any layers that object A scans. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"object B scans, or object B is in any layers that object A scans. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
#: doc/classes/CollisionObject2D.xml
msgid ""
-"If [code]true[/code], this object is pickable. A pickable object can detect "
-"the mouse pointer entering/leaving, and if the mouse is inside it, report "
-"input events. Requires at least one [code]collision_layer[/code] bit to be "
-"set."
-msgstr ""
-
-#: doc/classes/CollisionObject2D.xml
-msgid ""
"Emitted when an input event occurs. Requires [member input_pickable] to be "
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
@@ -13908,15 +13890,11 @@ msgstr ""
#: doc/classes/CollisionShape.xml doc/classes/CollisionShape2D.xml
#: doc/classes/Physics2DDirectBodyState.xml
-#: doc/classes/Physics2DDirectSpaceState.xml doc/classes/PhysicsBody.xml
-#: doc/classes/PhysicsBody2D.xml doc/classes/PhysicsDirectBodyState.xml
+#: doc/classes/Physics2DDirectSpaceState.xml
+#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RigidBody.xml
-#: doc/classes/Shape.xml doc/classes/Shape2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/physics_introduction.html"
+msgid "Physics introduction"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"physics_introduction.html"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -13955,9 +13933,8 @@ msgstr ""
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/113"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Kinematic Character Demo"
+msgstr ""
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -14002,19 +13979,16 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/517"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D GD Paint Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPicker.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/146"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Tween Demo"
+msgstr ""
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/133"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "GUI Drag And Drop Demo"
+msgstr ""
#: doc/classes/Color.xml
msgid ""
@@ -15472,20 +15446,16 @@ msgid ""
msgstr ""
#: doc/classes/Control.xml
-msgid "$DOCS_URL/tutorials/ui/index.html"
+msgid "GUI tutorial index"
msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/ui/control_node_gallery.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/gui/index.html"
+msgid "Control node gallery"
+msgstr ""
#: doc/classes/Control.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
+msgid "All GUI Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Control.xml
msgid ""
@@ -15585,8 +15555,8 @@ msgid ""
"custom value.\n"
"$MyLabel.add_color_override(\"font_color\", Color(1, 0.5, 0))\n"
"# Reset the font color of the child label.\n"
-"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", \"Label"
-"\"))\n"
+"$MyLabel.add_color_override(\"font_color\", get_color(\"font_color\", "
+"\"Label\"))\n"
"[/codeblock]"
msgstr ""
@@ -17569,12 +17539,6 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
-#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/particle_systems_2d.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/CPUParticles2D.xml
msgid ""
"Sets this node's properties to match a given [Particles2D] node with an "
@@ -17739,8 +17703,8 @@ msgid ""
"Generates a self-signed [X509Certificate] from the given [CryptoKey] and "
"[code]issuer_name[/code]. The certificate validity will be defined by "
"[code]not_before[/code] and [code]not_after[/code] (first valid date and "
-"last valid date). The [code]issuer_name[/code] must contain at least \"CN="
-"\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
+"last valid date). The [code]issuer_name[/code] must contain at least "
+"\"CN=\" (common name, i.e. the domain name), \"O=\" (organization, i.e. your "
"company name), \"C=\" (country, i.e. 2 lettered ISO-3166 code of the country "
"the organization is based in).\n"
"A small example to generate an RSA key and a X509 self-signed certificate.\n"
@@ -17829,7 +17793,22 @@ msgid "A CSG Box shape."
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
-msgid "This node allows you to create a box for use with the CSG system."
+msgid ""
+"This node allows you to create a box for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
+msgstr ""
+
+#: modules/csg/doc_classes/CSGBox.xml modules/csg/doc_classes/CSGCombiner.xml
+#: modules/csg/doc_classes/CSGCylinder.xml modules/csg/doc_classes/CSGMesh.xml
+#: modules/csg/doc_classes/CSGPolygon.xml
+#: modules/csg/doc_classes/CSGPrimitive.xml
+#: modules/csg/doc_classes/CSGShape.xml modules/csg/doc_classes/CSGSphere.xml
+#: modules/csg/doc_classes/CSGTorus.xml
+msgid "Prototyping levels with CSG"
msgstr ""
#: modules/csg/doc_classes/CSGBox.xml
@@ -17861,7 +17840,12 @@ msgid ""
"children of one CSGCombiner node, and a set of separate operations on a "
"second set of shapes that are children of a second CSGCombiner node, and "
"then do an operation that takes the two end results as its input to create "
-"the final shape."
+"the final shape.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17871,7 +17855,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
msgid ""
"This node allows you to create a cylinder (or cone) for use with the CSG "
-"system."
+"system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml
@@ -17913,7 +17902,13 @@ msgstr ""
msgid ""
"This CSG node allows you to use any mesh resource as a CSG shape, provided "
"it is closed, does not self-intersect, does not contain internal faces and "
-"has no edges that connect to more then two faces."
+"has no edges that connect to more than two faces. See also [CSGPolygon] for "
+"drawing 2D extruded polygons to be used as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGMesh.xml
@@ -17937,7 +17932,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"An array of 2D points is extruded to quickly and easily create a variety of "
-"3D meshes."
+"3D meshes. See also [CSGMesh] for using 3D meshes as CSG nodes.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18018,7 +18018,13 @@ msgid ""
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
-msgid "The point array that defines the 2D polygon that is extruded."
+msgid ""
+"The point array that defines the 2D polygon that is extruded. This can be a "
+"convex or concave polygon with 3 or more points. The polygon must [i]not[/i] "
+"have any intersecting edges. Otherwise, triangulation will fail and no mesh "
+"will be generated.\n"
+"[b]Note:[/b] If only 1 or 2 points are defined in [member polygon], no mesh "
+"will be generated."
msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -18093,7 +18099,12 @@ msgstr ""
msgid ""
"Parent class for various CSG primitives. It contains code and functionality "
"that is common between them. It cannot be used directly. Instead use one of "
-"the various classes that inherit from it."
+"the various classes that inherit from it.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGPrimitive.xml
@@ -18107,7 +18118,12 @@ msgstr ""
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
"This is the CSG base class that provides CSG operation support to the "
-"various CSG nodes in Godot."
+"various CSG nodes in Godot.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGShape.xml doc/classes/RayCast2D.xml
@@ -18208,7 +18224,13 @@ msgid "A CSG Sphere shape."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
-msgid "This node allows you to create a sphere for use with the CSG system."
+msgid ""
+"This node allows you to create a sphere for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGSphere.xml
@@ -18239,7 +18261,13 @@ msgid "A CSG Torus shape."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
-msgid "This node allows you to create a torus for use with the CSG system."
+msgid ""
+"This node allows you to create a torus for use with the CSG system.\n"
+"[b]Note:[/b] CSG nodes are intended to be used for level prototyping. "
+"Creating CSG nodes has a significant CPU cost compared to creating a "
+"[MeshInstance] with a [PrimitiveMesh]. Moving a CSG node within another CSG "
+"node also has a significant CPU cost, so it should be avoided during "
+"gameplay."
msgstr ""
#: modules/csg/doc_classes/CSGTorus.xml
@@ -18283,13 +18311,6 @@ msgid ""
msgstr ""
#: modules/mono/doc_classes/CSharpScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/c_sharp/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/c_sharp/"
-"index.html"
-
-#: modules/mono/doc_classes/CSharpScript.xml
#: modules/gdnative/doc_classes/PluginScript.xml
msgid "Returns a new instance of the script."
msgstr ""
@@ -18455,6 +18476,14 @@ msgstr ""
#: doc/classes/CullInstance.xml
msgid ""
+"This allows fine control over the mesh merging feature in the "
+"[RoomManager].\n"
+"Setting this option to [code]false[/code] can be used to prevent an instance "
+"being merged."
+msgstr ""
+
+#: doc/classes/CullInstance.xml
+msgid ""
"When set to [code]0[/code], [CullInstance]s will be autoplaced in the [Room] "
"with the highest priority.\n"
"When set to a value other than [code]0[/code], the system will attempt to "
@@ -19168,11 +19197,8 @@ msgid ""
msgstr ""
#: doc/classes/Dictionary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary"
+msgid "GDScript basics: Dictionary"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml
msgid "Clear the dictionary, removing all key/value pairs."
@@ -19227,8 +19253,8 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid ""
-"Returns a hashed integer value representing the dictionary contents. This "
-"can be used to compare dictionaries by value:\n"
+"Returns a hashed 32-bit integer value representing the dictionary contents. "
+"This can be used to compare dictionaries by value:\n"
"[codeblock]\n"
"var dict1 = {0: 10}\n"
"var dict2 = {0: 10}\n"
@@ -19237,7 +19263,11 @@ msgid ""
"print(dict1.hash() == dict2.hash())\n"
"[/codeblock]\n"
"[b]Note:[/b] Dictionaries with the same keys/values but in a different order "
-"will have a different hash."
+"will have a different hash.\n"
+"[b]Note:[/b] Dictionaries with equal content will always produce identical "
+"hash values. However, the reverse is not true. Returning identical hash "
+"values does [i]not[/i] imply the dictionaries are equal, because different "
+"dictionaries can have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/Dictionary.xml
@@ -19266,13 +19296,6 @@ msgid ""
"(origin) is ignored. Only the basis is used to determine light direction."
msgstr ""
-#: doc/classes/DirectionalLight.xml doc/classes/Light.xml
-#: doc/classes/OmniLight.xml doc/classes/SpotLight.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html"
-
#: doc/classes/DirectionalLight.xml
msgid ""
"Amount of extra bias for shadow splits that are far away. If self-shadowing "
@@ -19395,12 +19418,6 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/Directory.xml doc/classes/File.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/filesystem.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html"
-
#: doc/classes/Directory.xml
msgid ""
"Changes the currently opened directory to the one passed as an argument. The "
@@ -20428,13 +20445,6 @@ msgid ""
"add_import_plugin] method first."
msgstr ""
-#: doc/classes/EditorImportPlugin.xml doc/classes/ResourceImporter.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/import_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
-
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the options and default values for the preset at this index. Returns an "
@@ -20466,8 +20476,8 @@ msgid ""
"func get_option_visibility(option, options):\n"
" # Only show the lossy quality setting if the compression mode is set to "
"\"Lossy\".\n"
-" if option == \"compress/lossy_quality\" and options.has(\"compress/mode"
-"\"):\n"
+" if option == \"compress/lossy_quality\" and options.has(\"compress/"
+"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
"\n"
" return true\n"
@@ -20500,8 +20510,8 @@ msgstr ""
#: doc/classes/EditorImportPlugin.xml
msgid ""
-"Gets the Godot resource type associated with this loader. e.g. [code]\"Mesh"
-"\"[/code] or [code]\"Animation\"[/code]."
+"Gets the Godot resource type associated with this loader. e.g. "
+"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
#: doc/classes/EditorImportPlugin.xml
@@ -20611,11 +20621,8 @@ msgid ""
msgstr ""
#: doc/classes/EditorInspectorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html"
+msgid "Inspector plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml
msgid "Adds a custom control, which is not necessarily a property editor."
@@ -20878,12 +20885,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html"
-
-#: doc/classes/EditorPlugin.xml
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
@@ -21754,13 +21755,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorScenePostImport.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
-
-#: doc/classes/EditorScenePostImport.xml
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
@@ -22175,13 +22169,6 @@ msgid ""
msgstr ""
#: doc/classes/EditorSpatialGizmoPlugin.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"spatial_gizmos.html"
-
-#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Adds a new material to the internal material list for the plugin. It can "
"then be accessed with [method get_material]. Should not be overridden."
@@ -22503,9 +22490,8 @@ msgid ""
"[code]new_line_no[/code] is the line number in the new file (can be "
"[code]-1[/code] if the line is deleted). [code]old_line_no[/code] is the "
"line number in the old file (can be [code]-1[/code] if the line is added). "
-"[code]content[/code] is the diff text. [code]content[/code] is the diff "
-"text. [code]status[/code] is a single character string which stores the line "
-"origin."
+"[code]content[/code] is the diff text. [code]status[/code] is a single "
+"character string which stores the line origin."
msgstr ""
#: doc/classes/EditorVCSInterface.xml
@@ -22824,31 +22810,35 @@ msgid ""
"- Glow\n"
"- Tonemap (Auto Exposure)\n"
"- Adjustments\n"
-"These effects will only apply when the [Viewport]'s intended usage is \"3D\" "
-"or \"3D Without Effects\". This can be configured for the root Viewport with "
-"[member ProjectSettings.rendering/quality/intended_usage/"
-"framebuffer_allocation], or for specific Viewports via the [member Viewport."
-"usage] property."
+"If the target [Viewport] is set to \"2D Without Sampling\", all post-"
+"processing effects will be unavailable. With \"3D Without Effects\", the "
+"following options will be unavailable:\n"
+"- Ssao\n"
+"- Ss Reflections\n"
+"This can be configured for the root Viewport with [member ProjectSettings."
+"rendering/quality/intended_usage/framebuffer_allocation], or for specific "
+"Viewports via the [member Viewport.usage] property.\n"
+"Note that [member ProjectSettings.rendering/quality/intended_usage/"
+"framebuffer_allocation] has a mobile platform override to use \"3D Without "
+"Effects\" by default. It improves the performance on mobile devices, but at "
+"the same time affects the screen display on mobile devices."
msgstr ""
#: doc/classes/Environment.xml doc/classes/WorldEnvironment.xml
#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/environment_and_post_processing.html"
+msgid "Environment and post-processing"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/high_dynamic_range.html"
+msgid "Light transport in game engines"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html"
#: doc/classes/Environment.xml doc/classes/Material.xml doc/classes/Mesh.xml
#: doc/classes/MeshInstance.xml doc/classes/WorldEnvironment.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/123"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Material Testers Demo"
+msgstr ""
#: doc/classes/Environment.xml
msgid ""
@@ -22908,12 +22898,14 @@ msgstr ""
#: doc/classes/Environment.xml
msgid ""
-"Defines the amount of light that the sky brings on the scene. A value of 0 "
-"means that the sky's light emission has no effect on the scene illumination, "
-"thus all ambient illumination is provided by the ambient light. On the "
-"contrary, a value of 1 means that all the light that affects the scene is "
-"provided by the sky, thus the ambient light parameter has no effect on the "
-"scene."
+"Defines the amount of light that the sky brings on the scene. A value of "
+"[code]0.0[/code] means that the sky's light emission has no effect on the "
+"scene illumination, thus all ambient illumination is provided by the ambient "
+"light. On the contrary, a value of [code]1.0[/code] means that [i]all[/i] "
+"the light that affects the scene is provided by the sky, thus the ambient "
+"light parameter has no effect on the scene.\n"
+"[b]Note:[/b] [member ambient_light_sky_contribution] is internally clamped "
+"between [code]0.0[/code] and [code]1.0[/code] (inclusive)."
msgstr ""
#: doc/classes/Environment.xml
@@ -23592,6 +23584,10 @@ msgid ""
msgstr ""
#: doc/classes/File.xml
+msgid "File system"
+msgstr ""
+
+#: doc/classes/File.xml
msgid ""
"Closes the currently opened file and prevents subsequent read/write "
"operations. Use [method flush] to persist the data to disk without closing "
@@ -24193,11 +24189,11 @@ msgid ""
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Double-precision_floating-point_format"
+msgid "Wikipedia: Double-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
-msgid "https://en.wikipedia.org/wiki/Single-precision_floating-point_format"
+msgid "Wikipedia: Single-precision floating-point format"
msgstr ""
#: doc/classes/float.xml
@@ -24224,6 +24220,23 @@ msgid ""
"[code]float(\"1e3a2\")[/code] will return 1000.0."
msgstr ""
+#: doc/classes/FlowContainer.xml
+msgid "Base class for flow containers."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+msgid ""
+"Arranges child [Control] nodes vertically or horizontally in a left-to-right "
+"or top-to-bottom flow.\n"
+"A line is filled with [Control] nodes until no more fit on the same line, "
+"similar to text in an autowrapped label."
+msgstr ""
+
+#: doc/classes/FlowContainer.xml
+#, fuzzy
+msgid "Returns the current line count."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
#: doc/classes/Font.xml
msgid "Internationalized font and text drawing support."
msgstr ""
@@ -24364,20 +24377,6 @@ msgid ""
msgstr ""
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-c-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdnative/gdnative-cpp-example.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-"
-"cpp-example.html"
-
-#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"Returns paths to all dependency libraries for the current platform and "
"architecture."
@@ -24447,13 +24446,6 @@ msgid ""
msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"index.html"
-
-#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
msgstr ""
@@ -25496,7 +25488,7 @@ msgid ""
msgstr ""
#: doc/classes/GIProbe.xml
-msgid "$DOCS_URL/tutorials/3d/gi_probes.html"
+msgid "GI probes"
msgstr ""
#: doc/classes/GIProbe.xml
@@ -26500,11 +26492,13 @@ msgid ""
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The horizontal separation of children nodes."
msgstr ""
-#: doc/classes/GridContainer.xml
+#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
+#: doc/classes/VFlowContainer.xml
msgid "The vertical separation of children nodes."
msgstr ""
@@ -26531,10 +26525,8 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_gridmaps.html"
+msgid "Using gridmaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Clear all cells."
@@ -26580,6 +26572,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"Returns an array of all cells with the given item index specified in "
+"[code]item[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Returns the position of a grid cell in the GridMap's local coordinate space."
msgstr ""
@@ -26802,6 +26801,14 @@ msgid ""
"map_data]."
msgstr ""
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal flow container."
+msgstr ""
+
+#: doc/classes/HFlowContainer.xml
+msgid "Horizontal version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/HingeJoint.xml
msgid "A hinge between two 3D PhysicsBodies."
msgstr ""
@@ -27133,21 +27140,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPClient.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_client_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_client_class.html"
-
-#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
-#: doc/classes/StreamPeerSSL.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/ssl_certificates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates."
-"html"
-
-#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
msgstr ""
@@ -27938,13 +27930,6 @@ msgid ""
msgstr ""
#: doc/classes/HTTPRequest.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/http_request_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"http_request_class.html"
-
-#: doc/classes/HTTPRequest.xml
msgid "Cancels the current request."
msgstr ""
@@ -28089,11 +28074,8 @@ msgid ""
msgstr ""
#: doc/classes/Image.xml doc/classes/ImageTexture.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/assets_pipeline/importing_images.html"
+msgid "Importing images"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/assets/"
-"importing_scenes.html#custom-script"
#: doc/classes/Image.xml
msgid ""
@@ -28811,6 +28793,10 @@ msgid ""
"compressed into two channels)."
msgstr ""
+#: doc/classes/Image.xml
+msgid "Source texture (before compression) is a [TextureLayered]."
+msgstr ""
+
#: doc/classes/ImageTexture.xml
msgid "A [Texture] based on an [Image]."
msgstr ""
@@ -29003,7 +28989,7 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "$DOCS_URL/tutorials/inputs/index.html"
+msgid "Inputs tutorial index"
msgstr ""
#: doc/classes/Input.xml
@@ -29232,8 +29218,8 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29261,8 +29247,8 @@ msgid ""
"keyboard shortcuts are generally dependent on the keyboard layout in non-"
"game applications. If in doubt, use [method is_physical_key_pressed].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_key_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29419,7 +29405,12 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse position to the specified vector."
+msgid ""
+"Sets the mouse position to the specified vector, provided in pixels and "
+"relative to an origin at the upper left corner of the game window.\n"
+"Mouse position is clipped to the limits of the screen resolution, or to the "
+"limits of the game window if [enum MouseMode] is set to [constant "
+"MOUSE_MODE_CONFINED]."
msgstr ""
#: doc/classes/Input.xml
@@ -29554,15 +29545,9 @@ msgstr ""
msgid "Base class of all sort of input event. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEvent.xml doc/classes/InputEventJoypadButton.xml
-#: doc/classes/InputEventJoypadMotion.xml doc/classes/InputEventKey.xml
-#: doc/classes/InputEventMouse.xml doc/classes/InputEventScreenDrag.xml
-#: doc/classes/InputEventScreenTouch.xml
-#: doc/classes/InputEventWithModifiers.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html"
+#: doc/classes/InputEvent.xml
+msgid "InputEvent"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml
msgid ""
@@ -29605,8 +29590,8 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events.\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29637,8 +29622,8 @@ msgid ""
"Returns [code]true[/code] if this input event is pressed. Not relevant for "
"events of type [InputEventMouseMotion] or [InputEventScreenDrag].\n"
"[b]Note:[/b] Due to keyboard ghosting, [method is_action_pressed] may return "
-"[code]false[/code] even if one of the action's keys is pressed. See [url="
-"$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
+"[code]false[/code] even if one of the action's keys is pressed. See "
+"[url=$DOCS_URL/tutorials/inputs/input_examples.html#keyboard-events]Input "
"examples[/url] in the documentation for more information."
msgstr ""
@@ -29682,11 +29667,8 @@ msgid ""
msgstr ""
#: doc/classes/InputEventAction.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#actions"
+msgid "InputEvent: Actions"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#actions"
#: doc/classes/InputEventAction.xml
msgid "The action's name. Actions are accessed via this [String]."
@@ -29853,17 +29835,15 @@ msgid ""
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid ""
-"https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-"
-"status-bytes"
+msgid "MIDI Message Status Byte List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/General_MIDI#Program_change_events"
+msgid "Wikipedia General MIDI Instrument List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
-msgid "https://en.wikipedia.org/wiki/Piano_key_frequencies#List"
+msgid "Wikipedia Piano Key Frequencies List"
msgstr ""
#: doc/classes/InputEventMIDI.xml
@@ -29947,17 +29927,21 @@ msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The global mouse position relative to the current [Viewport]. If used in "
-"[method Control._gui_input] and if the current [Control] is not under the "
-"mouse, moving it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the root [Viewport] using the coordinate "
+"system of the root [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [CanvasLayer] that the [Control] is in using the coordinate system of "
+"the [CanvasLayer]."
msgstr ""
#: doc/classes/InputEventMouse.xml
msgid ""
-"The local mouse position relative to the [Viewport]. If used in [method "
-"Control._gui_input], the position is relative to the current [Control] which "
-"is under the mouse. If the current [Control] is not under the mouse, moving "
-"it will not update this value."
+"When received in [method Node._input] or [method Node._unhandled_input], "
+"returns the mouse's position in the [Viewport] this [Node] is in using the "
+"coordinate system of this [Viewport].\n"
+"When received in [method Control._gui_input], returns the mouse's position "
+"in the [Control] using the local coordinate system of the [Control]."
msgstr ""
#: doc/classes/InputEventMouseButton.xml
@@ -29968,13 +29952,6 @@ msgstr ""
msgid "Contains mouse click information. See [method Node._input]."
msgstr ""
-#: doc/classes/InputEventMouseButton.xml doc/classes/InputEventMouseMotion.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/"
-"mouse_and_input_coordinates.html"
-
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
@@ -30011,9 +29988,13 @@ msgid ""
"at most. If you need more precise input reporting, call [method Input."
"set_use_accumulated_input] with [code]false[/code] to make events emitted as "
"often as possible. If you use InputEventMouseMotion to draw lines, consider "
-"implementing [url=https://en.wikipedia.org/wiki/Bresenham"
-"%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid "
-"visible gaps in lines if the user is moving the mouse quickly."
+"implementing [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to "
+"avoid visible gaps in lines if the user is moving the mouse quickly."
+msgstr ""
+
+#: doc/classes/InputEventMouseMotion.xml
+msgid "Mouse and input coordinates"
msgstr ""
#: doc/classes/InputEventMouseMotion.xml
@@ -30140,13 +30121,6 @@ msgid ""
msgstr ""
#: doc/classes/InputMap.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/inputs/inputevent.html#inputmap"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent."
-"html#inputmap"
-
-#: doc/classes/InputMap.xml
msgid ""
"Adds an [InputEvent] to an action. This [InputEvent] will trigger the action."
msgstr ""
@@ -30901,15 +30875,6 @@ msgid ""
msgstr ""
#: doc/classes/JavaScript.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-"
-"script"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/export/"
-"exporting_for_web.html#calling-javascript-from-script"
-
-#: doc/classes/JavaScript.xml
msgid ""
"Creates a reference to a script function that can be used as a callback by "
"JavaScript. The reference must be kept until the callback happens, or it "
@@ -30957,6 +30922,29 @@ msgid ""
"[JavaScriptObject] for usage."
msgstr ""
+#: doc/classes/JavaScript.xml
+msgid ""
+"Returns [code]true[/code] if a new version of the progressive web app is "
+"waiting to be activated.\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Performs the live update of the progressive web app. Forcing the new version "
+"to be installed and the page to be reloaded.\n"
+"[b]Note:[/b] Your application will be [b]reloaded in all browser tabs[/b].\n"
+"[b]Note:[/b] Only relevant when exported as a Progressive Web App and "
+"[method pwa_needs_update] returns [code]true[/code]."
+msgstr ""
+
+#: doc/classes/JavaScript.xml
+msgid ""
+"Emitted when an update for this progressive web app has been detected but is "
+"waiting to be activated because a previous version is active. See [method "
+"pwa_update] to force the update to take place immediately."
+msgstr ""
+
#: doc/classes/JavaScriptObject.xml
msgid "A wrapper class for native JavaScript objects."
msgstr ""
@@ -31017,11 +31005,8 @@ msgid ""
msgstr ""
#: doc/classes/JNISingleton.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/platform/android/android_plugin.html"
+msgid "Creating Android plugins"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"import_plugins.html"
#: doc/classes/Joint.xml
msgid "Base class for all 3D joints."
@@ -31036,9 +31021,8 @@ msgstr ""
#: doc/classes/Joint.xml doc/classes/RigidBody.xml doc/classes/VehicleBody.xml
#: doc/classes/VehicleWheel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/524"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Truck Town Demo"
+msgstr ""
#: doc/classes/Joint.xml
msgid ""
@@ -31115,7 +31099,11 @@ msgid ""
"[b]Note:[/b] The JSON specification does not define integer or float types, "
"but only a [i]number[/i] type. Therefore, converting a Variant to JSON text "
"will convert all numerical values to [float] types.\n"
-"Use [code]indent[/code] parameter to pretty print the output.\n"
+"The [code]indent[/code] parameter controls if and how something is indented, "
+"the string used for this parameter will be used where there should be an "
+"indent in the output, even spaces like [code]\" \"[/code] will work. "
+"[code]\\t[/code] and [code]\\n[/code] can also be used for a tab indent, or "
+"to make a newline for each indent respectively.\n"
"[b]Example output:[/b]\n"
"[codeblock]\n"
"## JSON.print(my_dictionary)\n"
@@ -31125,18 +31113,34 @@ msgid ""
"\n"
"## JSON.print(my_dictionary, \"\\t\")\n"
"{\n"
-" \"name\": \"my_dictionary\",\n"
-" \"version\": \"1.0.0\",\n"
-" \"entities\": [\n"
-" {\n"
-" \"name\": \"entity_0\",\n"
-" \"value\": \"value_0\"\n"
-" },\n"
-" {\n"
-" \"name\": \"entity_1\",\n"
-" \"value\": \"value_1\"\n"
-" }\n"
-" ]\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"\n"
+"## JSON.print(my_dictionary, \"...\")\n"
+"{\n"
+"...\"name\": \"my_dictionary\",\n"
+"...\"version\": \"1.0.0\",\n"
+"...\"entities\": [\n"
+"......{\n"
+".........\"name\": \"entity_0\",\n"
+".........\"value\": \"value_0\"\n"
+"......},\n"
+"......{\n"
+".........\"name\": \"entity_1\",\n"
+".........\"value\": \"value_1\"\n"
+"......}\n"
+"...]\n"
"}\n"
"[/codeblock]"
msgstr ""
@@ -31288,11 +31292,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/kinematic_character_2d.html"
+msgid "Kinematic character (2D)"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml
msgid ""
@@ -31541,11 +31542,8 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html"
+msgid "Using KinematicBody2D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/"
-"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml
msgid ""
@@ -31975,6 +31973,10 @@ msgid ""
"lighting."
msgstr ""
+#: doc/classes/Light.xml doc/classes/SpotLight.xml
+msgid "3D lights and shadows"
+msgstr ""
+
#: doc/classes/Light.xml
#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
@@ -32172,13 +32174,6 @@ msgid ""
"[b]Note:[/b] Light2D can also be used as a mask."
msgstr ""
-#: doc/classes/Light2D.xml doc/classes/LightOccluder2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows."
-"html"
-
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
msgstr ""
@@ -34025,10 +34020,6 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance2D.xml
-msgid "$DOCS_URL/tutorials/2d/2d_meshes.html"
-msgstr ""
-
-#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
msgstr ""
@@ -34260,22 +34251,6 @@ msgid ""
"provided by the user."
msgstr ""
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish."
-"html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"animating_thousands_of_fish.html"
-
-#: doc/classes/MultiMesh.xml doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_multimesh.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/"
-"using_multimesh.html"
-
#: doc/classes/MultiMesh.xml
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
@@ -34419,13 +34394,6 @@ msgid ""
msgstr ""
#: doc/classes/MultiMeshInstance.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/"
-"using_multi_mesh_instance.html"
-
-#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
@@ -34673,13 +34641,6 @@ msgid ""
"used to protect a critical section; however, be careful to avoid deadlocks."
msgstr ""
-#: doc/classes/Mutex.xml doc/classes/Semaphore.xml doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/using_multiple_threads.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/"
-"using_multiple_threads.html"
-
#: doc/classes/Mutex.xml
msgid ""
"Locks this [Mutex], blocks until it is unlocked by the current owner.\n"
@@ -34751,9 +34712,8 @@ msgstr ""
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
#: doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/124"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Navmesh Demo"
+msgstr ""
#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
msgid ""
@@ -34790,6 +34750,10 @@ msgid ""
"etc.) are considered in the path calculation, otherwise they are ignored."
msgstr ""
+#: doc/classes/Navigation.xml
+msgid "The cell height to use for fields."
+msgstr ""
+
#: doc/classes/Navigation.xml doc/classes/NavigationMesh.xml
msgid "The XZ plane cell size to use for fields."
msgstr ""
@@ -34818,9 +34782,8 @@ msgstr ""
#: doc/classes/Navigation2D.xml doc/classes/Navigation2DServer.xml
#: doc/classes/NavigationPolygon.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/117"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Demo"
+msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
@@ -35144,7 +35107,7 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
"The minimal amount of time for which this agent's velocities, that are "
-"computed with the collision avoidance algorithim, are safe with respect to "
+"computed with the collision avoidance algorithm, are safe with respect to "
"other agents. The larger the number, the sooner the agent will respond to "
"other agents, but the less freedom in choosing its velocities. Must be "
"positive."
@@ -35700,6 +35663,11 @@ msgstr ""
#: doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the map cell height."
+msgstr "å›žå‚³åƒæ•¸çš„åæ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/NavigationServer.xml
+#, fuzzy
msgid ""
"Returns the normal for the point returned by [method map_get_closest_point]."
msgstr "å›žå‚³åƒæ•¸çš„平方根之倒數。"
@@ -35721,6 +35689,10 @@ msgid "Returns the map's up direction."
msgstr "å›žå‚³åƒæ•¸çš„åæ­£å¼¦å€¼ã€‚"
#: doc/classes/NavigationServer.xml
+msgid "Set the map cell height used to weld the navigation mesh polygons."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the map up direction."
msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
@@ -35761,18 +35733,6 @@ msgid ""
msgstr ""
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/networking/high_level_multiplayer.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/networking/"
-"high_level_multiplayer.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
-msgid "http://enet.bespin.org/usergroup0.html"
-msgstr "http://enet.bespin.org/usergroup0.html"
-
-#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Closes the connection. Ignored if no connection is currently established. If "
"this is a server it tries to notify all clients before forcibly "
@@ -36011,9 +35971,12 @@ msgid ""
msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/537"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "High-level multiplayer"
+msgstr ""
+
+#: doc/classes/NetworkedMultiplayerPeer.xml
+msgid "WebRTC Signaling Demo"
+msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -36303,16 +36266,12 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
-msgid "$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html"
+msgid "Nodes and Scenes"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/step_by_step/"
-"scenes_and_nodes.html"
#: doc/classes/Node.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/"
-msgstr "https://github.com/godotengine/tps-demo"
+msgid "All Demos"
+msgstr ""
#: doc/classes/Node.xml
msgid ""
@@ -36358,7 +36317,7 @@ msgid ""
"_unhandled_key_input] are usually a better fit as they allow the GUI to "
"intercept the events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36373,7 +36332,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PHYSICS_PROCESS] notification in "
"[method Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36386,7 +36345,7 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_PROCESS] notification in [method "
"Object._notification].\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -36401,17 +36360,17 @@ msgid ""
"Usually used for initialization. For even earlier initialization, [method "
"Object._init] may be used. See also [method _enter_tree].\n"
"[b]Note:[/b] [method _ready] may be called only once for each node. After "
-"removing a node from the scene tree and adding again, [code]_ready[/code] "
-"will not be called for the second time. This can be bypassed with requesting "
-"another call with [method request_ready], which may be called anywhere "
-"before adding the node again."
+"removing a node from the scene tree and adding it again, [code]_ready[/code] "
+"will not be called a second time. This can be bypassed by requesting another "
+"call with [method request_ready], which may be called anywhere before adding "
+"the node again."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
-"GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled input processing is enabled, which is done "
"automatically if this method is overridden, and can be toggled with [method "
"set_process_unhandled_input].\n"
@@ -36421,14 +36380,14 @@ msgid ""
"better fit than [method _input] as they allow the GUI to intercept the "
"events first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
-"any GUI. The input event propagates up through the node tree until a node "
-"consumes it.\n"
+"any GUI [Control] item. The input event propagates up through the node tree "
+"until a node consumes it.\n"
"It is only called if unhandled key input processing is enabled, which is "
"done automatically if this method is overridden, and can be toggled with "
"[method set_process_unhandled_key_input].\n"
@@ -36438,7 +36397,7 @@ msgid ""
"fit than [method _input] as they allow the GUI to intercept the events "
"first.\n"
"[b]Note:[/b] This method is only called if the node is present in the scene "
-"tree (i.e. if it's not orphan)."
+"tree (i.e. if it's not an orphan)."
msgstr ""
#: doc/classes/Node.xml
@@ -37147,6 +37106,18 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node enters the scene tree, either because it entered "
+"on its own or because this node entered with it."
+msgstr ""
+
+#: doc/classes/Node.xml
+msgid ""
+"Emitted when a child node exits the scene tree, either because it exited on "
+"its own or because this node exited."
+msgstr ""
+
+#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
msgstr ""
@@ -37299,11 +37270,8 @@ msgid ""
msgstr ""
#: doc/classes/Node2D.xml doc/classes/Vector2.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/2d"
+msgid "All 2D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Node2D.xml
msgid "Multiplies the current scale by the [code]ratio[/code] vector."
@@ -37470,9 +37438,8 @@ msgstr ""
#: doc/classes/NodePath.xml doc/classes/PackedScene.xml doc/classes/Panel.xml
#: doc/classes/PanelContainer.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/520"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Role Playing Game Demo"
+msgstr ""
#: doc/classes/NodePath.xml
msgid ""
@@ -37508,11 +37475,11 @@ msgid ""
"transforming it to a pure property path with no node name (defaults to "
"resolving from the current node).\n"
"[codeblock]\n"
-"# This will be parsed as a node path to the \"x\" property in the \"position"
-"\" node\n"
+"# This will be parsed as a node path to the \"x\" property in the "
+"\"position\" node\n"
"var node_path = NodePath(\"position:x\")\n"
-"# This will be parsed as a node path to the \"x\" component of the \"position"
-"\" property in the current node\n"
+"# This will be parsed as a node path to the \"x\" component of the "
+"\"position\" property in the current node\n"
"var property_path = node_path.get_as_property_path()\n"
"print(property_path) # :position:x\n"
"[/codeblock]"
@@ -37649,8 +37616,8 @@ msgstr ""
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
-"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct Object"
-"\" node in VisualScript.\n"
+"[/code] in GDScript, [code]new Object[/code] in C#, or the \"Construct "
+"Object\" node in VisualScript.\n"
"Objects do not manage memory. If a class inherits from Object, you will have "
"to delete instances of it manually. To do so, call the [method free] method "
"from your script or delete the instance from C++.\n"
@@ -37684,19 +37651,12 @@ msgid ""
msgstr ""
#: doc/classes/Object.xml doc/classes/Reference.xml doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/best_practices/node_alternatives.html"
+msgid "When and how to avoid using nodes for everything"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/workflow/"
-"best_practices/node_alternatives.html"
#: doc/classes/Object.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/scripting/gdscript/gdscript_exports.html#advanced-exports"
+msgid "Advanced exports using _get_property_list()"
msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_basics.html#dictionary"
#: doc/classes/Object.xml
msgid ""
@@ -37899,8 +37859,8 @@ msgstr ""
msgid ""
"Gets the object's property indexed by the given [NodePath]. The node path "
"should be relative to the current object and can use the colon character "
-"([code]:[/code]) to access nested properties. Examples: [code]\"position:x"
-"\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
+"([code]:[/code]) to access nested properties. Examples: [code]\"position:"
+"x\"[/code] or [code]\"material:next_pass:blend_mode\"[/code].\n"
"[b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't "
"support actual paths to [Node]s in the scene tree, only colon-separated sub-"
"property paths. For the purpose of nodes, use [method Node."
@@ -38024,7 +37984,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Assigns a new value to the given property. If the [code]property[/code] does "
-"not exist, nothing will happen.\n"
+"not exist or the given value's type doesn't match, nothing will happen.\n"
"[b]Note:[/b] In C#, the property name must be specified as snake_case if it "
"is defined by a built-in Godot node. This doesn't apply to user-defined "
"properties where you should use the same convention as in the C# source "
@@ -38213,6 +38173,48 @@ msgstr ""
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
msgstr ""
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Polygon occlusion primitive for use with the [Occluder] node."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"[OccluderShape]s are resources used by [Occluder] nodes, allowing geometric "
+"occlusion culling.\n"
+"The polygon must be a convex polygon. The polygon points can be created and "
+"deleted either in the Editor inspector or by calling "
+"[code]set_polygon_points[/code]. The points of the edges can be set by "
+"dragging the handles in the Editor viewport.\n"
+"Additionally each polygon occluder can optionally support a single hole. If "
+"you add at least three points in the Editor inspector to the hole, you can "
+"drag the edge points of the hole in the Editor viewport.\n"
+"In general, the lower the number of edges in polygons and holes, the faster "
+"the system will operate at runtime, so in most cases you will want to use 4 "
+"points for each."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual hole point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Sets an individual polygon point position."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the hole geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid "Allows changing the polygon geometry from code."
+msgstr ""
+
+#: doc/classes/OccluderShapePolygon.xml
+msgid ""
+"Specifies whether the occluder should operate one way only, or from both "
+"sides."
+msgstr ""
+
#: doc/classes/OccluderShapeSphere.xml
msgid "Spherical occlusion primitive for use with the [Occluder] node."
msgstr ""
@@ -38739,7 +38741,16 @@ msgid ""
"OS.execute(\"CMD.exe\", [\"/C\", \"cd %TEMP% && dir\"], true, output)\n"
"[/codeblock]\n"
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
-"Windows."
+"Windows.\n"
+"[b]Note:[/b] To execute a Windows command interpreter built-in command, "
+"specify [code]cmd.exe[/code] in [code]path[/code], [code]/c[/code] as the "
+"first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a PowerShell built-in command, specify "
+"[code]powershell.exe[/code] in [code]path[/code], [code]-Command[/code] as "
+"the first argument, and the desired command as the second argument.\n"
+"[b]Note:[/b] To execute a Unix shell built-in command, specify shell "
+"executable name in [code]path[/code], [code]-c[/code] as the first argument, "
+"and the desired command as the second argument."
msgstr ""
#: doc/classes/OS.xml
@@ -39003,8 +39014,8 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
-"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
-"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
+"Returns the given scancode as a string (e.g. Return values: "
+"[code]\"Escape\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
@@ -39255,6 +39266,11 @@ msgid ""
msgstr ""
#: doc/classes/OS.xml
+#, fuzzy
+msgid "Returns [code]true[/code] if there is content on the clipboard."
+msgstr "å›žå‚³åƒæ•¸çš„餘弦值。"
+
+#: doc/classes/OS.xml
msgid ""
"Returns [code]true[/code] if the environment variable with the name "
"[code]variable[/code] exists.\n"
@@ -39365,6 +39381,13 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
+"Converts a physical (US QWERTY) [code]scancode[/code] to one in the active "
+"keyboard layout.\n"
+"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
+msgstr ""
+
+#: doc/classes/OS.xml
+msgid ""
"Sets active keyboard layout.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
@@ -40320,14 +40343,12 @@ msgid ""
msgstr ""
#: doc/classes/Panel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/516"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Finite State Machine Demo"
+msgstr ""
#: doc/classes/Panel.xml doc/classes/Skeleton.xml doc/classes/SkeletonIK.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/523"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Inverse Kinematics Demo"
+msgstr ""
#: doc/classes/Panel.xml
msgid "The style of this [Panel]."
@@ -40478,13 +40499,8 @@ msgid ""
msgstr ""
#: doc/classes/Particles.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/performance/vertex_animation/"
-"controlling_thousands_of_fish.html"
+msgid "Controlling thousands of fish with Particles"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/"
-"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml
msgid ""
@@ -40604,6 +40620,10 @@ msgid ""
msgstr ""
#: doc/classes/Particles2D.xml
+msgid "Particle systems (2D)"
+msgstr ""
+
+#: doc/classes/Particles2D.xml
msgid "Returns a rectangle containing the positions of all existing particles."
msgstr ""
@@ -41349,11 +41369,8 @@ msgstr ""
#: doc/classes/Physics2DDirectSpaceState.xml
#: doc/classes/PhysicsDirectBodyState.xml
#: doc/classes/PhysicsDirectSpaceState.xml doc/classes/RayCast.xml
-#: doc/classes/RayCast2D.xml doc/classes/World.xml doc/classes/World2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/ray-casting.html"
+msgid "Ray-casting"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml doc/classes/RigidBody2D.xml
msgid "Adds a constant directional force without affecting rotation."
@@ -43933,9 +43950,8 @@ msgstr ""
#: doc/classes/PoolVector2Array.xml doc/classes/TileMap.xml
#: doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/519"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Navigation Astar Demo"
+msgstr ""
#: doc/classes/PoolVector2Array.xml
msgid ""
@@ -44345,6 +44361,11 @@ msgid ""
msgstr ""
#: doc/classes/PopupMenu.xml
+#, fuzzy
+msgid "Sets the currently focused item as the given [code]index[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/PopupMenu.xml
msgid "Hides the [PopupMenu] when the window loses focus."
msgstr ""
@@ -45642,8 +45663,8 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Color of the disabled navigation geometry, visible when \"Visible Navigation"
-"\" is enabled in the Debug menu."
+"Color of the disabled navigation geometry, visible when \"Visible "
+"Navigation\" is enabled in the Debug menu."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -45729,8 +45750,8 @@ msgid ""
"window is used to emulate fullscreen. On macOS, a new desktop is used to "
"display the running project.\n"
"Regardless of the platform, enabling fullscreen will change the window size "
-"to match the monitor's size. Therefore, make sure your project supports [url="
-"$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
+"to match the monitor's size. Therefore, make sure your project supports "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple "
"resolutions[/url] when enabling fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
@@ -45818,9 +45839,9 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"Text-based file extensions to include in the script editor's \"Find in Files"
-"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
-"your scene files, especially if you use built-in scripts which are "
+"Text-based file extensions to include in the script editor's \"Find in "
+"Files\" feature. You can add e.g. [code]tscn[/code] if you wish to also "
+"parse your scene files, especially if you use built-in scripts which are "
"serialized in the scene files."
msgstr ""
@@ -47201,12 +47222,14 @@ msgid ""
"situation, that the engine generates internally so it can be used from the "
"beginning while the traditional conditioned, optimized version of it is "
"being compiled.\n"
-"In order to save some loading time, you can use [code]Asynchronous + Cache[/"
-"code], which also causes the ubershaders to be cached into storage so they "
-"can be ready faster next time they are used (provided the platform provides "
-"support for it).\n"
-"[b]Warning:[/b] Async. compilation is currently only supported for spatial "
-"and particle materials/shaders."
+"To reduce loading times after the project has been launched at least once, "
+"you can use [code]Asynchronous + Cache[/code]. This also causes the "
+"ubershaders to be cached into storage so they can be ready faster next time "
+"they are used (provided the platform provides support for it).\n"
+"[b]Note:[/b] Asynchronous compilation is currently only supported for "
+"spatial (3D) and particle materials/shaders. CanvasItem (2D) shaders will "
+"not use asynchronous compilation even if this setting is set to "
+"[code]Asynchronous[/code] or [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47301,6 +47324,17 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Determines the maximum number of polygon occluders that will be used at any "
+"one time.\n"
+"Although you can have many occluders in a scene, each frame the system will "
+"choose from these the most relevant based on a screen space metric, in order "
+"to give the best overall performance.\n"
+"A greater number of polygons can potentially cull more objects, however the "
+"cost of culling calculations scales with the number of occluders."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
"Although you can have many occluders in a scene, each frame the system will "
@@ -47400,7 +47434,8 @@ msgstr ""
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
-"the nearest power of 2."
+"the nearest power of 2. This setting can be changed at run-time; the change "
+"will be applied immediately."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47819,6 +47854,12 @@ msgid ""
"pixels)."
msgstr ""
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Objects can use this signal to restrict reading of settings only to "
+"situations where a change has been made."
+msgstr ""
+
#: doc/classes/ProximityGroup.xml
msgid "General-purpose proximity detection node."
msgstr ""
@@ -47837,9 +47878,8 @@ msgstr ""
#: doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/129"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D in 3D Demo"
+msgstr ""
#: doc/classes/QuadMesh.xml
msgid "Offset of the generated Quad. Useful for particles."
@@ -47866,14 +47906,6 @@ msgid ""
msgstr ""
#: doc/classes/Quat.xml
-#, fuzzy
-msgid ""
-"$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms."
-"html#interpolating-with-quaternions"
-
-#: doc/classes/Quat.xml
msgid "Constructs a quaternion from the given [Basis]."
msgstr ""
@@ -48038,9 +48070,8 @@ msgid ""
msgstr ""
#: doc/classes/RandomNumberGenerator.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/math/random_number_generation.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/math/index.html"
+msgid "Random number generation"
+msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -48476,8 +48507,9 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns the area of the [Rect2]."
-msgstr ""
+#, fuzzy
+msgid "Returns the area of the [Rect2]. See also [method has_no_area]."
+msgstr "å›žå‚³åƒæ•¸çš„平方根之倒數。"
#: doc/classes/Rect2.xml
msgid ""
@@ -48504,7 +48536,11 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml
-msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
+msgid ""
+"Returns [code]true[/code] if the [Rect2] is flat or empty, [code]false[/"
+"code] otherwise. See also [method get_area].\n"
+"[b]Note:[/b] If the [Rect2] has a negative size and is not flat or empty, "
+"[method has_no_area] will return [code]true[/code]."
msgstr ""
#: doc/classes/Rect2.xml
@@ -48659,12 +48695,6 @@ msgid ""
msgstr ""
#: doc/classes/ReflectionProbe.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/reflection_probes.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html"
-
-#: doc/classes/ReflectionProbe.xml
msgid ""
"If [code]true[/code], enables box projection. This makes reflections look "
"more correct in rectangle-shaped rooms by offsetting the reflection center "
@@ -48733,7 +48763,11 @@ msgstr ""
msgid ""
"The maximum distance away from the [ReflectionProbe] an object can be before "
"it is culled. Decrease this to improve performance, especially when using "
-"the [constant UPDATE_ALWAYS] [member update_mode]."
+"the [constant UPDATE_ALWAYS] [member update_mode].\n"
+"[b]Note:[/b] The maximum reflection distance is always at least equal to the "
+"[member extents]. This means that decreasing [member max_distance] will not "
+"always cull objects from reflections, especially if the reflection probe's "
+"[member extents] are already large."
msgstr ""
#: doc/classes/ReflectionProbe.xml
@@ -49051,9 +49085,8 @@ msgid ""
msgstr ""
#: doc/classes/Resource.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/resources.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html"
+msgid "Resources"
+msgstr ""
#: doc/classes/Resource.xml
msgid ""
@@ -49273,6 +49306,10 @@ msgid ""
msgstr ""
#: doc/classes/ResourceImporter.xml
+msgid "Import plugins"
+msgstr ""
+
+#: doc/classes/ResourceImporter.xml
msgid "The default import order."
msgstr ""
@@ -49589,9 +49626,12 @@ msgid ""
msgstr ""
#: doc/classes/RichTextLabel.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/132"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "BBCode in RichTextLabel"
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "GUI Rich Text/BBcode Demo"
+msgstr ""
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -49786,9 +49826,10 @@ msgid ""
"methods when edited.\n"
"[b]Note:[/b] It is unadvised to use the [code]+=[/code] operator with "
"[code]bbcode_text[/code] (e.g. [code]bbcode_text += \"some string\"[/code]) "
-"as it replaces the whole text and can cause slowdowns. Use [method "
-"append_bbcode] for adding text instead, unless you absolutely need to close "
-"a tag that was opened in an earlier method call."
+"as it replaces the whole text and can cause slowdowns. It will also erase "
+"all BBCode that was added to stack using [code]push_*[/code] methods. Use "
+"[method append_bbcode] for adding text instead, unless you absolutely need "
+"to close a tag that was opened in an earlier method call."
msgstr ""
#: doc/classes/RichTextLabel.xml
@@ -50373,14 +50414,12 @@ msgid ""
msgstr ""
#: doc/classes/RigidBody2D.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/119"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Physics Platformer Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml doc/classes/Sprite.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/148"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Instancing Demo"
+msgstr ""
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -50978,11 +51017,8 @@ msgid ""
msgstr ""
#: doc/classes/RootMotionView.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/animation_tree.html#root-motion"
+msgid "Using AnimationTree - Root motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
-"html"
#: doc/classes/RootMotionView.xml
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
@@ -51189,18 +51225,6 @@ msgid ""
msgstr ""
#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/scene_tree.html"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/shading/index.html"
-
-#: doc/classes/SceneTree.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/rendering/multiple_resolutions.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/viewports/"
-"multiple_resolutions.html"
-
-#: doc/classes/SceneTree.xml
msgid ""
"Calls [code]method[/code] on each member of the given group. You can pass "
"arguments to [code]method[/code] by specifying them at the end of the method "
@@ -51656,10 +51680,6 @@ msgid ""
msgstr ""
#: doc/classes/Script.xml
-msgid "$DOCS_URL/tutorials/scripting/index.html"
-msgstr ""
-
-#: doc/classes/Script.xml
msgid "Returns [code]true[/code] if the script can be instanced."
msgstr ""
@@ -51969,16 +51989,6 @@ msgid ""
"explanation and usage, please see the tutorials linked below."
msgstr ""
-#: doc/classes/Shader.xml doc/classes/ShaderMaterial.xml
-msgid "$DOCS_URL/tutorials/shaders/index.html"
-msgstr ""
-
-#: doc/classes/Shader.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/introduction_to_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
-
#: doc/classes/Shader.xml
msgid ""
"Returns the texture that is set as default for the specified parameter.\n"
@@ -52307,12 +52317,6 @@ msgid ""
msgstr ""
#: doc/classes/Skeleton2D.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/animation/2d_skeletons.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html"
-
-#: doc/classes/Skeleton2D.xml
msgid ""
"Returns a [Bone2D] from the node hierarchy parented by Skeleton2D. The "
"object to return is identified by the parameter [code]idx[/code]. Bones are "
@@ -52622,14 +52626,11 @@ msgstr ""
#: doc/classes/SoftBody.xml
msgid ""
"A deformable physics body. Used to create elastic or deformable objects such "
-"as cloth, rubber, or other flexible materials."
-msgstr ""
-
-#: doc/classes/SoftBody.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/physics/soft_body.html"
+"as cloth, rubber, or other flexible materials.\n"
+"[b]Note:[/b] There are many known bugs in [SoftBody]. Therefore, it's not "
+"recommended to use them for things that can affect gameplay (such as a "
+"player character made entirely out of soft bodies)."
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml
msgid "Returns local translation of a vertex in the surface array."
@@ -52713,17 +52714,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/introduction_to_3d.html"
+msgid "Introduction to 3D"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html"
#: doc/classes/Spatial.xml doc/classes/Vector3.xml
-#, fuzzy
-msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
+msgid "All 3D Demos"
msgstr ""
-"https://github.com/godotengine/godot-demo-projects/tree/master/audio/"
-"generator"
#: doc/classes/Spatial.xml
msgid ""
@@ -52786,11 +52782,16 @@ msgstr ""
#: doc/classes/Spatial.xml
msgid ""
-"Rotates itself so that the local -Z axis points towards the [code]target[/"
-"code] position.\n"
-"The transform will first be rotated around the given [code]up[/code] vector, "
-"and then fully aligned to the target by a further rotation around an axis "
-"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
+"Rotates the node so that the local forward axis (-Z) points toward the "
+"[code]target[/code] position.\n"
+"The local up axis (+Y) points as close to the [code]up[/code] vector as "
+"possible while staying perpendicular to the local forward axis. The "
+"resulting transform is orthogonal, and the scale is preserved. Non-uniform "
+"scaling may not work correctly.\n"
+"The [code]target[/code] position cannot be the same as the node's position, "
+"the [code]up[/code] vector cannot be zero, and the direction from the node's "
+"position to the [code]target[/code] vector cannot be parallel to the "
+"[code]up[/code] vector.\n"
"Operations take place in global space."
msgstr ""
@@ -52931,8 +52932,8 @@ msgid ""
"of the Euler-angle parametrization of the rotation matrix, are stored in a "
"[Vector3] data structure not because the rotation is a vector, but only "
"because [Vector3] exists as a convenient data-structure to store 3 floating-"
-"point numbers. Therefore, applying affine operations on the rotation \"vector"
-"\" is not meaningful."
+"point numbers. Therefore, applying affine operations on the rotation "
+"\"vector\" is not meaningful."
msgstr ""
#: doc/classes/Spatial.xml
@@ -53026,12 +53027,6 @@ msgid ""
msgstr ""
#: doc/classes/SpatialMaterial.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/3d/spatial_material.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/3d/spatial_material.html"
-
-#: doc/classes/SpatialMaterial.xml
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
msgstr ""
@@ -54379,9 +54374,9 @@ msgstr ""
#: doc/classes/SpringArm.xml
msgid ""
-"The layers against which the collision check shall be done. See [url="
-"$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks]Collision layers and masks[/url] in the documentation for more "
+"The layers against which the collision check shall be done. See "
+"[url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
@@ -54557,14 +54552,29 @@ msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"A color value that gets multiplied on, could be used for mood-coloring or to "
-"simulate the color of light."
+"A color value used to [i]multiply[/i] the texture's colors. Can be used for "
+"mood-coloring or to simulate the color of light.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the color defined in [member "
+"modulate] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALBEDO *= COLOR.rgb;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
msgid ""
-"The objects' visibility on a scale from [code]0[/code] fully invisible to "
-"[code]1[/code] fully visible."
+"The texture's visibility on a scale from [code]0[/code] (fully invisible) to "
+"[code]1[/code] (fully visible). [member opacity] is a multiplier for the "
+"[member modulate] color's alpha channel.\n"
+"[b]Note:[/b] If a [member GeometryInstance.material_override] is defined on "
+"the [SpriteBase3D], the material override must be configured to take vertex "
+"colors into account for albedo. Otherwise, the opacity defined in [member "
+"opacity] will be ignored. For a [SpatialMaterial], [member SpatialMaterial."
+"vertex_color_use_as_albedo] must be [code]true[/code]. For a "
+"[ShaderMaterial], [code]ALPHA *= COLOR.a;[/color] must be inserted in the "
+"shader's [code]fragment()[/code] function."
msgstr ""
#: doc/classes/SpriteBase3D.xml
@@ -54938,6 +54948,53 @@ msgid ""
"encoding and decoding."
msgstr ""
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Data buffer stream peer."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Data buffer stream peer that uses a byte array as the stream. This object "
+"can be used to handle binary data from network sessions. To handle binary "
+"data stored in files, [File] can be used directly.\n"
+"A [StreamPeerBuffer] object keeps an internal cursor which is the offset in "
+"bytes to the start of the buffer. Get and put operations are performed at "
+"the cursor position and will move the cursor accordingly."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Clears the [member data_array] and resets the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Returns a new [StreamPeerBuffer] with the same [member data_array] content."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the current cursor position."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£åˆ‡å€¼ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+#, fuzzy
+msgid "Returns the size of [member data_array]."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "Resizes the [member data_array]. This [i]doesn't[/i] update the cursor."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid ""
+"Moves the cursor to the specified position. [code]position[/code] must be a "
+"valid index of [member data_array]."
+msgstr ""
+
+#: doc/classes/StreamPeerBuffer.xml
+msgid "The underlying data buffer. Setting this value resets the cursor."
+msgstr ""
+
#: doc/classes/StreamPeerSSL.xml
msgid "SSL stream peer."
msgstr ""
@@ -55091,13 +55148,6 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/"
-"gdscript_format_string.html"
-
-#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
msgstr ""
@@ -55362,7 +55412,12 @@ msgid ""
msgstr ""
#: doc/classes/String.xml
-msgid "Hashes the string and returns a 32-bit integer."
+msgid ""
+"Returns the 32-bit hash value representing the string's contents.\n"
+"[b]Note:[/b] [String]s with equal content will always produce identical hash "
+"values. However, the reverse is not true. Returning identical hash values "
+"does [i]not[/i] imply the strings are equal, because different strings can "
+"have identical hash values due to hash collisions."
msgstr ""
#: doc/classes/String.xml
@@ -55411,10 +55466,10 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
"Returns a copy of the string with lines indented with [code]prefix[/code].\n"
-"For example, the string can be indented with two tabs using [code]\"\\t\\t"
-"\"[/code], or four spaces using [code]\" \"[/code]. The prefix can be any "
-"string so it can also be used to comment out strings with e.g. [code]\"# \"[/"
-"code]. See also [method dedent] to remove indentation.\n"
+"For example, the string can be indented with two tabs using "
+"[code]\"\\t\\t\"[/code], or four spaces using [code]\" \"[/code]. The "
+"prefix can be any string so it can also be used to comment out strings with "
+"e.g. [code]\"# \"[/code]. See also [method dedent] to remove indentation.\n"
"[b]Note:[/b] Empty lines are kept empty."
msgstr ""
@@ -55779,12 +55834,27 @@ msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing a decimal number into a [code]float[/code]."
+"Converts a string containing a decimal number into a [code]float[/code]. The "
+"method will stop on the first non-number character except the first [code].[/"
+"code] (decimal point), and [code]e[/code] which is used for exponential.\n"
+"[codeblock]\n"
+"print(\"12.3\".to_float()) # 12.3\n"
+"print(\"1.2.3\".to_float()) # 1.2\n"
+"print(\"12ab3\".to_float()) # 12\n"
+"print(\"1e3\".to_float()) # 1000\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
msgid ""
-"Converts a string containing an integer number into an [code]int[/code]."
+"Converts a string containing an integer number into an [code]int[/code]. The "
+"method will remove any non-number character and stop if it encounters a "
+"[code].[/code].\n"
+"[codeblock]\n"
+"print(\"123\".to_int()) # 123\n"
+"print(\"a1b2c3\".to_int()) # 123\n"
+"print(\"1.2.3\".to_int()) # 1\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/String.xml
@@ -58189,10 +58259,6 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml
-msgid "$DOCS_URL/tutorials/ui/gui_skinning.html"
-msgstr ""
-
-#: doc/classes/Theme.xml
msgid "Clears all values on the theme."
msgstr ""
@@ -58281,7 +58347,8 @@ msgstr ""
#: doc/classes/Theme.xml
msgid ""
"Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/"
-"code]."
+"code]. If such item does not exist and [member default_font] is set on the "
+"theme, the default font will be returned."
msgstr ""
#: doc/classes/Theme.xml
@@ -58559,11 +58626,12 @@ msgid ""
msgstr ""
#: doc/classes/Thread.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/threads/thread_safe_apis.html"
+msgid "Using multiple threads"
+msgstr ""
+
+#: doc/classes/Thread.xml
+msgid "Thread-safe APIs"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/threads/thread_safe_apis."
-"html"
#: doc/classes/Thread.xml
msgid ""
@@ -58638,15 +58706,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/2d/using_tilemaps.html"
+msgid "Using Tilemaps"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml doc/classes/TileSet.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/111"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "2D Hexagonal Demo"
+msgstr ""
#: doc/classes/TileMap.xml
msgid "Clears all cells."
@@ -59235,7 +59300,12 @@ msgid "Sets the tile's material."
msgstr ""
#: doc/classes/TileSet.xml
-msgid "Sets the tile's modulation color."
+msgid ""
+"Sets the tile's modulation color.\n"
+"[b]Note:[/b] Modulation is performed by setting the tile's vertex color. To "
+"access this in a shader, use [code]COLOR[/code] rather than [code]MODULATE[/"
+"code] (which instead accesses the [TileMap]'s [member CanvasItem.modulate] "
+"property)."
msgstr ""
#: doc/classes/TileSet.xml
@@ -60066,17 +60136,6 @@ msgid ""
"map a string to another string."
msgstr ""
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/i18n/internationalizing_games.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/i18n/"
-"internationalizing_games.html"
-
-#: doc/classes/Translation.xml doc/classes/TranslationServer.xml
-msgid "$DOCS_URL/tutorials/i18n/locales.html"
-msgstr ""
-
#: doc/classes/Translation.xml
msgid "Virtual method to override [method get_message]."
msgstr ""
@@ -60193,7 +60252,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Creates an item in the tree and adds it as a child of [code]parent[/code].\n"
+"Creates an item in the tree and adds it as a child of [code]parent[/code], "
+"which can be either a valid [TreeItem] or [code]null[/code].\n"
"If [code]parent[/code] is [code]null[/code], the root item will be the "
"parent, or the new item will be the root itself if the tree is empty.\n"
"The new item will be the [code]idx[/code]th child of parent, or it will be "
@@ -60219,6 +60279,11 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
+"Returns the button id at [code]position[/code], or -1 if no button is there."
+msgstr ""
+
+#: doc/classes/Tree.xml
+msgid ""
"Returns the column index at [code]position[/code], or -1 if no item is there."
msgstr ""
@@ -60267,9 +60332,9 @@ msgstr "å›žå‚³åƒæ•¸çš„餘弦值。"
#: doc/classes/Tree.xml
msgid ""
-"Returns the rectangle area for the specified item. If [code]column[/code] is "
-"specified, only get the position and size of that column, otherwise get the "
-"rectangle containing all columns."
+"Returns the rectangle area for the specified [TreeItem]. If [code]column[/"
+"code] is specified, only get the position and size of that column, otherwise "
+"get the rectangle containing all columns."
msgstr ""
#: doc/classes/Tree.xml
@@ -60280,8 +60345,8 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
-"Returns the next selected item after the given one, or [code]null[/code] if "
-"the end is reached.\n"
+"Returns the next selected [TreeItem] after the given one, or [code]null[/"
+"code] if the end is reached.\n"
"If [code]from[/code] is [code]null[/code], this returns the first selected "
"item."
msgstr ""
@@ -60321,8 +60386,9 @@ msgid ""
msgstr ""
#: doc/classes/Tree.xml
-msgid "Causes the [Tree] to jump to the specified item."
-msgstr ""
+#, fuzzy
+msgid "Causes the [Tree] to jump to the specified [TreeItem]."
+msgstr "å›žå‚³åƒæ•¸çš„平方根之倒數。"
#: doc/classes/Tree.xml
msgid ""
@@ -60690,11 +60756,10 @@ msgstr ""
#: doc/classes/TreeItem.xml
msgid ""
"Adds a button with [Texture] [code]button[/code] at column [code]column[/"
-"code]. The [code]button_idx[/code] index is used to identify the button when "
-"calling other methods. If not specified, the next available index is used, "
-"which may be retrieved by calling [method get_button_count] immediately "
-"after this method. Optionally, the button can be [code]disabled[/code] and "
-"have a [code]tooltip[/code]."
+"code]. The [code]id[/code] is used to identify the button. If not specified, "
+"the next available index is used, which may be retrieved by calling [method "
+"get_button_count] immediately after this method. Optionally, the button can "
+"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
#: doc/classes/TreeItem.xml
@@ -60728,12 +60793,26 @@ msgid ""
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the button index if there is a button with id [code]id[/code] in "
+"column [code]column[/code], otherwise returns -1."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the number of buttons in column [code]column[/code]. May be used to "
"get the most recently added button's index, if no index was specified."
msgstr ""
#: doc/classes/TreeItem.xml
+#, fuzzy
+msgid ""
+"Returns the id for the button at index [code]button_idx[/code] in column "
+"[code]column[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/TreeItem.xml
msgid ""
"Returns the tooltip string for the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
@@ -62082,12 +62161,6 @@ msgid ""
"should be created to lock it if multi-threaded access is desired."
msgstr ""
-#: doc/classes/Variant.xml
-#, fuzzy
-msgid "$DOCS_URL/development/cpp/variant_class.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/development/cpp/variant_class.html"
-
#: doc/classes/VBoxContainer.xml
msgid "Vertical box container."
msgstr ""
@@ -62114,8 +62187,7 @@ msgid ""
msgstr ""
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
-msgid ""
-"https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab"
+msgid "3Blue1Brown Essence of Linear Algebra"
msgstr ""
#: doc/classes/Vector2.xml
@@ -62776,6 +62848,14 @@ msgid ""
"body roll."
msgstr ""
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical flow container."
+msgstr ""
+
+#: doc/classes/VFlowContainer.xml
+msgid "Vertical version of [FlowContainer]."
+msgstr ""
+
#: doc/classes/VideoPlayer.xml
msgid "Control for playing video streams."
msgstr ""
@@ -62987,28 +63067,24 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-msgid "$DOCS_URL/tutorials/rendering/index.html"
+msgid "Viewports tutorial index"
msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/128"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D in 2D Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/130"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Screen Capture Demo"
+msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/541"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "Dynamic Split Screen Demo"
+msgstr ""
#: doc/classes/Viewport.xml doc/classes/ViewportTexture.xml
-#, fuzzy
-msgid "https://godotengine.org/asset-library/asset/586"
-msgstr "https://docs.godotengine.org/en/latest/tutorials/vr/index.html"
+msgid "3D Viewport Scaling Demo"
+msgstr ""
#: doc/classes/Viewport.xml
msgid ""
@@ -63036,7 +63112,9 @@ msgid "Returns the topmost modal in the stack."
msgstr "å›žå‚³åƒæ•¸çš„相å值。"
#: doc/classes/Viewport.xml
-msgid "Returns the mouse position relative to the viewport."
+msgid ""
+"Returns the mouse's position in this [Viewport] using the coordinate system "
+"of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63128,7 +63206,9 @@ msgid "Forces update of the 2D and 3D worlds."
msgstr ""
#: doc/classes/Viewport.xml
-msgid "Warps the mouse to a position relative to the viewport."
+msgid ""
+"Moves the mouse pointer to the specified position in this [Viewport] using "
+"the coordinate system of this [Viewport]."
msgstr ""
#: doc/classes/Viewport.xml
@@ -63851,13 +63931,6 @@ msgid ""
msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/scripting/visual_script/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/getting_started/scripting/"
-"visual_script/index.html"
-
-#: modules/visual_script/doc_classes/VisualScript.xml
msgid "Add a custom signal with the specified name to the VisualScript."
msgstr ""
@@ -65616,13 +65689,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualServer.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/performance/using_servers.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/optimization/using_servers."
-"html"
-
-#: doc/classes/VisualServer.xml
msgid "Sets images to be rendered in the window margin."
msgstr ""
@@ -66058,8 +66124,8 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or Color"
-"+Sky background modes)."
+"Color displayed for clear areas of the scene (if using Custom color or "
+"Color+Sky background modes)."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -66333,7 +66399,10 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if changes have been made to the VisualServer's "
-"data. [method draw] is usually called if this happens."
+"data. [method draw] is usually called if this happens.\n"
+"As changes are registered as either high or low priority (e.g. dynamic "
+"shaders), this function takes an optional argument to query either low or "
+"high priority changes, or any changes."
msgstr ""
#: doc/classes/VisualServer.xml
@@ -68653,6 +68722,22 @@ msgstr ""
msgid "Performs a 3x3 blur on the SSAO output. Use this for smoothest SSAO."
msgstr ""
+#: doc/classes/VisualServer.xml
+msgid ""
+"Used to query for any changes that request a redraw, whatever the priority."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid ""
+"Registered changes which have low priority can be optionally prevented from "
+"causing editor redraws. Examples might include dynamic shaders (typically "
+"using the [code]TIME[/code] built-in)."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
+msgid "Registered changes which can cause a redraw default to high priority."
+msgstr ""
+
#: doc/classes/VisualShader.xml
msgid "A custom shader program with a visual editor."
msgstr ""
@@ -68752,12 +68837,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNode.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/visual_shaders.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/shading/visual_shaders.html"
-
-#: doc/classes/VisualShaderNode.xml
msgid ""
"Returns an [Array] containing default values for all of the input ports of "
"the node in the form [code][index0, value0, index1, value1, ...][/code]."
@@ -69214,13 +69293,6 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeCustom.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html"
-msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/plugins/editor/"
-"visual_shader_plugins.html"
-
-#: doc/classes/VisualShaderNodeCustom.xml
msgid ""
"Override this method to define the category of the associated custom node in "
"the Visual Shader Editor's members dialog. The path may look like "
@@ -69558,16 +69630,9 @@ msgid ""
msgstr ""
#: doc/classes/VisualShaderNodeInput.xml
-#, fuzzy
-msgid "$DOCS_URL/tutorials/shaders/shader_reference/index.html"
-msgstr ""
-"https://docs.godotengine.org/en/stable/tutorials/shading/shading_reference/"
-"index.html"
-
-#: doc/classes/VisualShaderNodeInput.xml
msgid ""
-"One of the several input constants in lower-case style like: \"vertex"
-"\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
+"One of the several input constants in lower-case style like: "
+"\"vertex\"([code]VERTEX[/code]) or \"point_size\"([code]POINT_SIZE[/code])."
msgstr ""
#: doc/classes/VisualShaderNodeIs.xml
@@ -69616,8 +69681,8 @@ msgstr ""
#: doc/classes/VisualShaderNodeOutput.xml
msgid ""
-"This visual shader node is present in all shader graphs in form of \"Output"
-"\" block with multiple output value ports."
+"This visual shader node is present in all shader graphs in form of "
+"\"Output\" block with multiple output value ports."
msgstr ""
#: doc/classes/VisualShaderNodeScalarClamp.xml
@@ -71324,11 +71389,11 @@ msgid ""
"signals is the same id as used in [member ARVRController.controller_id].\n"
"You can use one or all of these methods to allow your game or app to support "
"a wider or narrower set of devices and input methods, or to allow more "
-"advanced interations with more advanced devices."
+"advanced interactions with more advanced devices."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
-msgid "https://www.snopekgames.com/blog/2020/how-make-vr-game-webxr-godot"
+msgid "How to make a VR game for WebXR with Godot"
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
@@ -71352,6 +71417,14 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
+"Returns the target ray mode for the given [code]controller_id[/code].\n"
+"This can help interpret the input coming from that controller. See "
+"[url=https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource/"
+"targetRayMode]XRInputSource.targetRayMode[/url] for more information."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
"Checks if the given [code]session_mode[/code] is supported by the user's "
"browser.\n"
"Possible values come from [url=https://developer.mozilla.org/en-US/docs/Web/"
@@ -71457,15 +71530,15 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted after one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted after one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
-"Emitted when one of the \"controllers\" has finished its \"primary action"
-"\".\n"
+"Emitted when one of the \"controllers\" has finished its \"primary "
+"action\".\n"
"Use [method get_controller] to get more information about the controller."
msgstr ""
@@ -71529,6 +71602,24 @@ msgstr ""
msgid "Emitted when [member visibility_state] has changed."
msgstr ""
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "We don't know the the target ray mode."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid ""
+"Target ray originates at the viewer's eyes and points in the direction they "
+"are looking."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from a handheld pointer, most likely a VR touch controller."
+msgstr ""
+
+#: modules/webxr/doc_classes/WebXRInterface.xml
+msgid "Target ray from touch screen, mouse or other tactile input device."
+msgstr ""
+
#: doc/classes/WindowDialog.xml
msgid "Base class for window dialogs."
msgstr ""
diff --git a/drivers/coreaudio/audio_driver_coreaudio.cpp b/drivers/coreaudio/audio_driver_coreaudio.cpp
index e37a53fede..e2b195350f 100644
--- a/drivers/coreaudio/audio_driver_coreaudio.cpp
+++ b/drivers/coreaudio/audio_driver_coreaudio.cpp
@@ -174,9 +174,9 @@ OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon,
for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) {
AudioBuffer *abuf = &ioData->mBuffers[i];
memset(abuf->mData, 0, abuf->mDataByteSize);
- };
+ }
return 0;
- };
+ }
ad->start_counting_ticks();
@@ -195,14 +195,14 @@ OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon,
frames_left -= frames;
out += frames * ad->channels;
- };
- };
+ }
+ }
ad->stop_counting_ticks();
ad->unlock();
return 0;
-};
+}
OSStatus AudioDriverCoreAudio::input_callback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
@@ -251,7 +251,7 @@ void AudioDriverCoreAudio::start() {
active = true;
}
}
-};
+}
void AudioDriverCoreAudio::stop() {
if (active) {
@@ -266,19 +266,19 @@ void AudioDriverCoreAudio::stop() {
int AudioDriverCoreAudio::get_mix_rate() const {
return mix_rate;
-};
+}
AudioDriver::SpeakerMode AudioDriverCoreAudio::get_speaker_mode() const {
return get_speaker_mode_by_total_channels(channels);
-};
+}
void AudioDriverCoreAudio::lock() {
mutex.lock();
-};
+}
void AudioDriverCoreAudio::unlock() {
mutex.unlock();
-};
+}
bool AudioDriverCoreAudio::try_lock() {
return mutex.try_lock() == OK;
@@ -521,8 +521,9 @@ Array AudioDriverCoreAudio::_get_device_list(bool capture) {
AudioObjectGetPropertyData(audioDevices[i], &prop, 0, nullptr, &size, bufferList);
UInt32 channelCount = 0;
- for (UInt32 j = 0; j < bufferList->mNumberBuffers; j++)
+ for (UInt32 j = 0; j < bufferList->mNumberBuffers; j++) {
channelCount += bufferList->mBuffers[j].mNumberChannels;
+ }
memfree(bufferList);
@@ -579,8 +580,9 @@ void AudioDriverCoreAudio::_set_device(const String &device, bool capture) {
AudioObjectGetPropertyData(audioDevices[i], &prop, 0, nullptr, &size, bufferList);
UInt32 channelCount = 0;
- for (UInt32 j = 0; j < bufferList->mNumberBuffers; j++)
+ for (UInt32 j = 0; j < bufferList->mNumberBuffers; j++) {
channelCount += bufferList->mBuffers[j].mNumberChannels;
+ }
memfree(bufferList);
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 121dc86fb2..1382573461 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "rasterizer_scene_gles3.h"
+
#ifdef GLES3_ENABLED
// TODO: 3D support not implemented yet.
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index a7638b49ec..abbba13ee6 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "rasterizer_storage_gles3.h"
+
#ifdef GLES3_ENABLED
#include "core/config/project_settings.h"
@@ -3716,10 +3717,11 @@ void RasterizerStorageGLES3::canvas_light_occluder_set_polylines(RID p_occluder,
co->lines = p_lines;
if (p_lines.size() != co->len) {
- if (co->index_id)
+ if (co->index_id) {
glDeleteBuffers(1, &co->index_id);
- if (co->vertex_id)
+ } if (co->vertex_id) {
glDeleteBuffers(1, &co->vertex_id);
+ }
co->index_id = 0;
co->vertex_id = 0;
@@ -4014,10 +4016,12 @@ bool RasterizerStorageGLES3::free(RID p_rid) {
} else if (canvas_occluder_owner.owns(p_rid)) {
CanvasOccluder *co = canvas_occluder_owner.get_or_null(p_rid);
- if (co->index_id)
+ if (co->index_id) {
glDeleteBuffers(1, &co->index_id);
- if (co->vertex_id)
+ }
+ if (co->vertex_id) {
glDeleteBuffers(1, &co->vertex_id);
+ }
canvas_occluder_owner.free(p_rid);
memdelete(co);
diff --git a/drivers/gles3/shader_gles3.cpp b/drivers/gles3/shader_gles3.cpp
index 7ae8b4e3bf..9349722625 100644
--- a/drivers/gles3/shader_gles3.cpp
+++ b/drivers/gles3/shader_gles3.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "shader_gles3.h"
+
#ifdef GLES3_ENABLED
#include "core/io/compression.h"
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl
index 98c92a1d99..2d504cd052 100644
--- a/drivers/gles3/shaders/scene.glsl
+++ b/drivers/gles3/shaders/scene.glsl
@@ -1107,7 +1107,7 @@ void light_compute(
float rim,
float rim_tint,
float clearcoat,
- float clearcoat_gloss,
+ float clearcoat_roughness,
float anisotropy,
inout vec3 diffuse_light,
inout vec3 specular_light,
@@ -1298,7 +1298,7 @@ LIGHT_SHADER_CODE
#if !defined(SPECULAR_SCHLICK_GGX)
float cLdotH5 = SchlickFresnel(cLdotH);
#endif
- float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss));
+ float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_roughness));
float Fr = mix(.04, 1.0, cLdotH5);
//float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25);
float Gr = V_GGX(cNdotL, cNdotV, 0.25);
@@ -1427,7 +1427,7 @@ void main() {
float rim = 0.0;
float rim_tint = 0.0;
float clearcoat = 0.0;
- float clearcoat_gloss = 0.0;
+ float clearcoat_roughness = 0.0;
float anisotropy = 0.0;
vec2 anisotropy_flow = vec2(1.0, 0.0);
float sss_strength = 0.0; //unused
@@ -2028,7 +2028,7 @@ FRAGMENT_SHADER_CODE
rim,
rim_tint,
clearcoat,
- clearcoat_gloss,
+ clearcoat_roughness,
anisotropy,
diffuse_light,
specular_light,
diff --git a/drivers/gles3/texture_loader_gles3.cpp b/drivers/gles3/texture_loader_gles3.cpp
index 1cbda02121..f8d4cfdc61 100644
--- a/drivers/gles3/texture_loader_gles3.cpp
+++ b/drivers/gles3/texture_loader_gles3.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "texture_loader_gles3.h"
+
#ifdef GLES3_ENABLED
#include "core/io/file_access.h"
diff --git a/drivers/png/resource_saver_png.cpp b/drivers/png/resource_saver_png.cpp
index 77390a5915..ca84fb6be9 100644
--- a/drivers/png/resource_saver_png.cpp
+++ b/drivers/png/resource_saver_png.cpp
@@ -46,7 +46,7 @@ Error ResourceSaverPNG::save(const String &p_path, const RES &p_resource, uint32
Error err = save_image(p_path, img);
return err;
-};
+}
Error ResourceSaverPNG::save_image(const String &p_path, const Ref<Image> &p_img) {
Vector<uint8_t> buffer;
@@ -89,4 +89,4 @@ void ResourceSaverPNG::get_recognized_extensions(const RES &p_resource, List<Str
ResourceSaverPNG::ResourceSaverPNG() {
Image::save_png_func = &save_image;
Image::save_png_buffer_func = &save_image_to_buffer;
-};
+}
diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp
index 5fdfde4913..af47173b41 100644
--- a/drivers/unix/dir_access_unix.cpp
+++ b/drivers/unix/dir_access_unix.cpp
@@ -138,9 +138,9 @@ uint64_t DirAccessUnix::get_modified_time(String p_file) {
return flags.st_mtime;
} else {
ERR_FAIL_V(0);
- };
+ }
return 0;
-};
+}
String DirAccessUnix::get_next() {
if (!dir_stream) {
@@ -320,11 +320,11 @@ Error DirAccessUnix::make_dir(String p_dir) {
if (success) {
return OK;
- };
+ }
if (err == EEXIST) {
return ERR_ALREADY_EXISTS;
- };
+ }
return ERR_CANT_CREATE;
}
@@ -474,14 +474,14 @@ uint64_t DirAccessUnix::get_space_left() {
struct statvfs vfs;
if (statvfs(current_dir.utf8().get_data(), &vfs) != 0) {
return 0;
- };
+ }
return (uint64_t)vfs.f_bavail * (uint64_t)vfs.f_frsize;
#else
// FIXME: Implement this.
return 0;
#endif
-};
+}
String DirAccessUnix::get_filesystem_type() const {
return ""; //TODO this should be implemented
diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp
index 80ae999ac9..ea442ad8bf 100644
--- a/drivers/unix/file_access_unix.cpp
+++ b/drivers/unix/file_access_unix.cpp
@@ -246,7 +246,7 @@ uint64_t FileAccessUnix::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
uint64_t read = fread(p_dst, 1, p_length, f);
check_errors();
return read;
-};
+}
Error FileAccessUnix::get_error() const {
return last_error;
@@ -285,8 +285,9 @@ bool FileAccessUnix::file_exists(const String &p_path) {
return false;
}
#else
- if (_access(filename.utf8().get_data(), 4) == -1)
+ if (_access(filename.utf8().get_data(), 4) == -1) {
return false;
+ }
#endif
// See if this is a regular file
@@ -309,7 +310,7 @@ uint64_t FileAccessUnix::_get_modified_time(const String &p_file) {
} else {
print_verbose("Failed to get modified time for: " + p_file + "");
return 0;
- };
+ }
}
uint32_t FileAccessUnix::_get_unix_permissions(const String &p_file) {
@@ -321,7 +322,7 @@ uint32_t FileAccessUnix::_get_unix_permissions(const String &p_file) {
return flags.st_mode & 0x7FF; //only permissions
} else {
ERR_FAIL_V_MSG(0, "Failed to get unix permissions for: " + p_file + ".");
- };
+ }
}
Error FileAccessUnix::_set_unix_permissions(const String &p_file, uint32_t p_permissions) {
diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp
index d82dcb8a8d..d442e521bf 100644
--- a/drivers/unix/ip_unix.cpp
+++ b/drivers/unix/ip_unix.cpp
@@ -72,10 +72,10 @@ static IPAddress _sockaddr2ip(struct sockaddr *p_addr) {
} else if (p_addr->sa_family == AF_INET6) {
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr;
ip.set_ipv6(addr6->sin6_addr.s6_addr);
- };
+ }
return ip;
-};
+}
void IPUnix::_resolve_hostname(List<IPAddress> &r_addresses, const String &p_hostname, Type p_type) const {
struct addrinfo hints;
@@ -90,14 +90,14 @@ void IPUnix::_resolve_hostname(List<IPAddress> &r_addresses, const String &p_hos
} else {
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_ADDRCONFIG;
- };
+ }
hints.ai_flags &= ~AI_NUMERICHOST;
int s = getaddrinfo(p_hostname.utf8().get_data(), nullptr, &hints, &result);
if (s != 0) {
ERR_PRINT("getaddrinfo failed! Cannot resolve hostname.");
return;
- };
+ }
if (result == nullptr || result->ai_addr == nullptr) {
ERR_PRINT("Invalid response from getaddrinfo");
@@ -105,7 +105,7 @@ void IPUnix::_resolve_hostname(List<IPAddress> &r_addresses, const String &p_hos
freeaddrinfo(result);
}
return;
- };
+ }
struct addrinfo *next = result;
@@ -138,8 +138,9 @@ void IPUnix::get_local_interfaces(Map<String, Interface_Info> *r_interfaces) con
for (int i = 0; i < hostnames->Size; i++) {
auto hostname = hostnames->GetAt(i);
- if (hostname->Type != HostNameType::Ipv4 && hostname->Type != HostNameType::Ipv6)
+ if (hostname->Type != HostNameType::Ipv4 && hostname->Type != HostNameType::Ipv6) {
continue;
+ }
String name = hostname->RawName->Data();
Map<String, Interface_Info>::Element *E = r_interfaces->find(name);
@@ -171,14 +172,14 @@ void IPUnix::get_local_interfaces(Map<String, Interface_Info> *r_interfaces) con
nullptr, addrs, &buf_size);
if (err == NO_ERROR) {
break;
- };
+ }
memfree(addrs);
if (err == ERROR_BUFFER_OVERFLOW) {
continue; // will go back and alloc the right size
- };
+ }
ERR_FAIL_MSG("Call to GetAdaptersAddresses failed with error " + itos(err) + ".");
- };
+ }
IP_ADAPTER_ADDRESSES *adapter = addrs;
@@ -191,19 +192,21 @@ void IPUnix::get_local_interfaces(Map<String, Interface_Info> *r_interfaces) con
IP_ADAPTER_UNICAST_ADDRESS *address = adapter->FirstUnicastAddress;
while (address != nullptr) {
int family = address->Address.lpSockaddr->sa_family;
- if (family != AF_INET && family != AF_INET6)
+ if (family != AF_INET && family != AF_INET6) {
continue;
+ }
info.ip_addresses.push_front(_sockaddr2ip(address->Address.lpSockaddr));
address = address->Next;
}
adapter = adapter->Next;
// Only add interface if it has at least one IP
- if (info.ip_addresses.size() > 0)
+ if (info.ip_addresses.size() > 0) {
r_interfaces->insert(info.name, info);
- };
+ }
+ }
memfree(addrs);
-};
+}
#endif
diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp
index bdfd264a0c..3130d5cae2 100644
--- a/drivers/unix/net_socket_posix.cpp
+++ b/drivers/unix/net_socket_posix.cpp
@@ -147,7 +147,7 @@ void NetSocketPosix::_set_ip_port(struct sockaddr_storage *p_addr, IPAddress *r_
if (r_port) {
*r_port = ntohs(addr6->sin6_port);
}
- };
+ }
}
NetSocket *NetSocketPosix::_create_func() {
@@ -325,8 +325,9 @@ Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) {
#if defined(__OpenBSD__)
// OpenBSD does not support dual stacking, fallback to IPv4 only.
- if (ip_type == IP::TYPE_ANY)
+ if (ip_type == IP::TYPE_ANY) {
ip_type = IP::TYPE_IPV4;
+ }
#endif
int family = ip_type == IP::TYPE_IPV4 ? AF_INET : AF_INET6;
@@ -420,7 +421,7 @@ Error NetSocketPosix::listen(int p_max_pending) {
print_verbose("Failed to listen from socket.");
close();
return FAILED;
- };
+ }
return OK;
}
@@ -494,8 +495,9 @@ Error NetSocketPosix::poll(PollType p_type, int p_timeout) const {
return FAILED;
}
- if (ret == 0)
+ if (ret == 0) {
return ERR_BUSY;
+ }
if (FD_ISSET(_sock, &ex)) {
_get_socket_error();
@@ -503,10 +505,12 @@ Error NetSocketPosix::poll(PollType p_type, int p_timeout) const {
return FAILED;
}
- if (rdp && FD_ISSET(_sock, rdp))
+ if (rdp && FD_ISSET(_sock, rdp)) {
ready = true;
- if (wrp && FD_ISSET(_sock, wrp))
+ }
+ if (wrp && FD_ISSET(_sock, wrp)) {
ready = true;
+ }
return ready ? OK : ERR_BUSY;
#else
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 7d57926757..088525647c 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -106,7 +106,7 @@ static void _setup_clock() {
void OS_Unix::debug_break() {
assert(false);
-};
+}
static void handle_interrupt(int sig) {
if (!EngineDebugger::is_active()) {
@@ -198,7 +198,7 @@ double OS_Unix::get_unix_time() const {
struct timeval tv_now;
gettimeofday(&tv_now, nullptr);
return (double)tv_now.tv_sec + double(tv_now.tv_usec) / 1000000;
-};
+}
OS::Date OS_Unix::get_date(bool p_utc) const {
time_t t = time(nullptr);
@@ -410,7 +410,7 @@ Error OS_Unix::kill(const ProcessID &p_pid) {
int OS_Unix::get_process_id() const {
return getpid();
-};
+}
bool OS_Unix::has_environment(const String &p_var) const {
return getenv(p_var.utf8().get_data()) != nullptr;
@@ -555,8 +555,9 @@ String OS_Unix::get_executable_path() const {
char *resolved_path = new char[buff_size + 1];
- if (_NSGetExecutablePath(resolved_path, &buff_size) == 1)
+ if (_NSGetExecutablePath(resolved_path, &buff_size) == 1) {
WARN_PRINT("MAXPATHLEN is too small");
+ }
String path(resolved_path);
delete[] resolved_path;
diff --git a/drivers/unix/syslog_logger.cpp b/drivers/unix/syslog_logger.cpp
index 0e1a1a89a3..6189d645c6 100644
--- a/drivers/unix/syslog_logger.cpp
+++ b/drivers/unix/syslog_logger.cpp
@@ -31,7 +31,9 @@
#ifdef UNIX_ENABLED
#include "syslog_logger.h"
+
#include "core/string/print_string.h"
+
#include <syslog.h>
void SyslogLogger::logv(const char *p_format, va_list p_list, bool p_err) {
diff --git a/drivers/vulkan/SCsub b/drivers/vulkan/SCsub
index 8fe75367a8..b6ceb1cdea 100644
--- a/drivers/vulkan/SCsub
+++ b/drivers/vulkan/SCsub
@@ -40,6 +40,9 @@ elif env["platform"] == "android":
# Our current NDK version only provides old Vulkan headers,
# so we have to limit VMA.
env_thirdparty_vma.AppendUnique(CPPDEFINES=["VMA_VULKAN_VERSION=1000000"])
+elif env["platform"] == "osx" or env["platform"] == "iphone":
+ # MoltenVK supports only Vulkan 1.1 API, limit VMA to the same version.
+ env_thirdparty_vma.AppendUnique(CPPDEFINES=["VMA_VULKAN_VERSION=1001000"])
env_thirdparty_vma.add_source_files(thirdparty_obj, thirdparty_sources_vma)
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp
index 1d6d9d56e8..9cc505cff1 100644
--- a/drivers/vulkan/rendering_device_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_vulkan.cpp
@@ -1200,7 +1200,7 @@ uint32_t RenderingDeviceVulkan::get_image_required_mipmaps(uint32_t p_width, uin
d = MAX(1, d >> 1);
mipmaps++;
- };
+ }
return mipmaps;
}
@@ -1335,8 +1335,13 @@ Error RenderingDeviceVulkan::_buffer_allocate(Buffer *p_buffer, uint32_t p_size,
allocInfo.requiredFlags = 0;
allocInfo.preferredFlags = 0;
allocInfo.memoryTypeBits = 0;
- allocInfo.pool = p_size <= SMALL_ALLOCATION_MAX_SIZE ? small_allocs_pool : nullptr;
+ allocInfo.pool = nullptr;
allocInfo.pUserData = nullptr;
+ if (p_size <= SMALL_ALLOCATION_MAX_SIZE) {
+ uint32_t mem_type_index = 0;
+ vmaFindMemoryTypeIndexForBufferInfo(allocator, &bufferInfo, &allocInfo, &mem_type_index);
+ allocInfo.pool = _find_or_create_small_allocs_pool(mem_type_index);
+ }
VkResult err = vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &p_buffer->buffer, &p_buffer->allocation, nullptr);
ERR_FAIL_COND_V_MSG(err, ERR_CANT_CREATE, "Can't create buffer of size: " + itos(p_size) + ", error " + itos(err) + ".");
@@ -1843,12 +1848,17 @@ RID RenderingDeviceVulkan::texture_create(const TextureFormat &p_format, const T
VmaAllocationCreateInfo allocInfo;
allocInfo.flags = 0;
- allocInfo.pool = image_size <= SMALL_ALLOCATION_MAX_SIZE ? small_allocs_pool : nullptr;
+ allocInfo.pool = nullptr;
allocInfo.usage = p_format.usage_bits & TEXTURE_USAGE_CPU_READ_BIT ? VMA_MEMORY_USAGE_CPU_ONLY : VMA_MEMORY_USAGE_GPU_ONLY;
allocInfo.requiredFlags = 0;
allocInfo.preferredFlags = 0;
allocInfo.memoryTypeBits = 0;
allocInfo.pUserData = nullptr;
+ if (image_size <= SMALL_ALLOCATION_MAX_SIZE) {
+ uint32_t mem_type_index = 0;
+ vmaFindMemoryTypeIndexForImageInfo(allocator, &image_create_info, &allocInfo, &mem_type_index);
+ allocInfo.pool = _find_or_create_small_allocs_pool(mem_type_index);
+ }
Texture texture;
@@ -2118,6 +2128,124 @@ RID RenderingDeviceVulkan::texture_create_shared(const TextureView &p_view, RID
return id;
}
+RID RenderingDeviceVulkan::texture_create_from_extension(TextureType p_type, DataFormat p_format, TextureSamples p_samples, uint64_t p_flags, uint64_t p_image, uint64_t p_width, uint64_t p_height, uint64_t p_depth, uint64_t p_layers) {
+ _THREAD_SAFE_METHOD_
+ // This method creates a texture object using a VkImage created by an extension, module or other external source (OpenXR uses this).
+ VkImage image = (VkImage)p_image;
+
+ Texture texture;
+ texture.image = image;
+ // if we leave texture.allocation as a nullptr, would that be enough to detect we don't "own" the image?
+ // also leave texture.allocation_info alone
+ // we'll set texture.view later on
+ texture.type = p_type;
+ texture.format = p_format;
+ texture.samples = p_samples;
+ texture.width = p_width;
+ texture.height = p_height;
+ texture.depth = p_depth;
+ texture.layers = p_layers;
+ texture.mipmaps = 0; // maybe make this settable too?
+ texture.usage_flags = p_flags;
+ texture.base_mipmap = 0;
+ texture.base_layer = 0;
+ texture.allowed_shared_formats.push_back(RD::DATA_FORMAT_R8G8B8A8_UNORM);
+ texture.allowed_shared_formats.push_back(RD::DATA_FORMAT_R8G8B8A8_SRGB);
+
+ // Do we need to do something with texture.layout ?
+
+ if (texture.usage_flags & TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
+ texture.read_aspect_mask = VK_IMAGE_ASPECT_DEPTH_BIT;
+ texture.barrier_aspect_mask = VK_IMAGE_ASPECT_DEPTH_BIT;
+
+ // if (format_has_stencil(p_format.format)) {
+ // texture.barrier_aspect_mask |= VK_IMAGE_ASPECT_STENCIL_BIT;
+ // }
+ } else {
+ texture.read_aspect_mask = VK_IMAGE_ASPECT_COLOR_BIT;
+ texture.barrier_aspect_mask = VK_IMAGE_ASPECT_COLOR_BIT;
+ }
+
+ // Create a view for us to use
+
+ VkImageViewCreateInfo image_view_create_info;
+ image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
+ image_view_create_info.pNext = nullptr;
+ image_view_create_info.flags = 0;
+ image_view_create_info.image = texture.image;
+
+ static const VkImageViewType view_types[TEXTURE_TYPE_MAX] = {
+ VK_IMAGE_VIEW_TYPE_1D,
+ VK_IMAGE_VIEW_TYPE_2D,
+ VK_IMAGE_VIEW_TYPE_3D,
+ VK_IMAGE_VIEW_TYPE_CUBE,
+ VK_IMAGE_VIEW_TYPE_1D_ARRAY,
+ VK_IMAGE_VIEW_TYPE_2D_ARRAY,
+ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
+ };
+
+ image_view_create_info.viewType = view_types[texture.type];
+ image_view_create_info.format = vulkan_formats[texture.format];
+
+ static const VkComponentSwizzle component_swizzles[TEXTURE_SWIZZLE_MAX] = {
+ VK_COMPONENT_SWIZZLE_IDENTITY,
+ VK_COMPONENT_SWIZZLE_ZERO,
+ VK_COMPONENT_SWIZZLE_ONE,
+ VK_COMPONENT_SWIZZLE_R,
+ VK_COMPONENT_SWIZZLE_G,
+ VK_COMPONENT_SWIZZLE_B,
+ VK_COMPONENT_SWIZZLE_A
+ };
+
+ // hardcode for now, maybe make this settable from outside..
+ image_view_create_info.components.r = component_swizzles[TEXTURE_SWIZZLE_R];
+ image_view_create_info.components.g = component_swizzles[TEXTURE_SWIZZLE_G];
+ image_view_create_info.components.b = component_swizzles[TEXTURE_SWIZZLE_B];
+ image_view_create_info.components.a = component_swizzles[TEXTURE_SWIZZLE_A];
+
+ image_view_create_info.subresourceRange.baseMipLevel = 0;
+ image_view_create_info.subresourceRange.levelCount = texture.mipmaps;
+ image_view_create_info.subresourceRange.baseArrayLayer = 0;
+ image_view_create_info.subresourceRange.layerCount = texture.layers;
+ if (texture.usage_flags & TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {
+ image_view_create_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
+ } else {
+ image_view_create_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ }
+
+ VkResult err = vkCreateImageView(device, &image_view_create_info, nullptr, &texture.view);
+
+ if (err) {
+ // vmaDestroyImage(allocator, texture.image, texture.allocation);
+ ERR_FAIL_V_MSG(RID(), "vkCreateImageView failed with error " + itos(err) + ".");
+ }
+
+ //barrier to set layout
+ {
+ VkImageMemoryBarrier image_memory_barrier;
+ image_memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+ image_memory_barrier.pNext = nullptr;
+ image_memory_barrier.srcAccessMask = 0;
+ image_memory_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
+ image_memory_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+ image_memory_barrier.newLayout = texture.layout;
+ image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ image_memory_barrier.image = texture.image;
+ image_memory_barrier.subresourceRange.aspectMask = texture.barrier_aspect_mask;
+ image_memory_barrier.subresourceRange.baseMipLevel = 0;
+ image_memory_barrier.subresourceRange.levelCount = texture.mipmaps;
+ image_memory_barrier.subresourceRange.baseArrayLayer = 0;
+ image_memory_barrier.subresourceRange.layerCount = texture.layers;
+
+ vkCmdPipelineBarrier(frames[frame].setup_command_buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, 0, nullptr, 0, nullptr, 1, &image_memory_barrier);
+ }
+
+ RID id = texture_owner.make_rid(texture);
+
+ return id;
+}
+
RID RenderingDeviceVulkan::texture_create_shared_from_slice(const TextureView &p_view, RID p_with_texture, uint32_t p_layer, uint32_t p_mipmap, uint32_t p_mipmaps, TextureSliceType p_slice_type) {
_THREAD_SAFE_METHOD_
@@ -3679,7 +3807,7 @@ VkRenderPass RenderingDeviceVulkan::_render_pass_create(const Vector<AttachmentF
// Set view masks for each subpass
for (uint32_t i = 0; i < subpasses.size(); i++) {
view_masks.push_back(view_mask);
- };
+ }
render_pass_multiview_create_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO;
render_pass_multiview_create_info.pNext = nullptr;
@@ -4635,19 +4763,22 @@ Vector<uint8_t> RenderingDeviceVulkan::shader_compile_binary_from_spirv(const Ve
for (uint32_t j = 0; j < sc_count; j++) {
int32_t existing = -1;
RenderingDeviceVulkanShaderBinarySpecializationConstant sconst;
- sconst.constant_id = spec_constants[j]->constant_id;
- switch (spec_constants[j]->constant_type) {
+ SpvReflectSpecializationConstant *spc = spec_constants[j];
+
+ sconst.constant_id = spc->constant_id;
+ sconst.int_value = 0.0; // clear previous value JIC
+ switch (spc->constant_type) {
case SPV_REFLECT_SPECIALIZATION_CONSTANT_BOOL: {
sconst.type = PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
- sconst.bool_value = spec_constants[j]->default_value.int_bool_value != 0;
+ sconst.bool_value = spc->default_value.int_bool_value != 0;
} break;
case SPV_REFLECT_SPECIALIZATION_CONSTANT_INT: {
sconst.type = PIPELINE_SPECIALIZATION_CONSTANT_TYPE_INT;
- sconst.int_value = spec_constants[j]->default_value.int_bool_value;
+ sconst.int_value = spc->default_value.int_bool_value;
} break;
case SPV_REFLECT_SPECIALIZATION_CONSTANT_FLOAT: {
sconst.type = PIPELINE_SPECIALIZATION_CONSTANT_TYPE_FLOAT;
- sconst.float_value = spec_constants[j]->default_value.float_value;
+ sconst.float_value = spc->default_value.float_value;
} break;
}
sconst.stage_flags = 1 << p_spirv[i].shader_stage;
@@ -6326,7 +6457,7 @@ RID RenderingDeviceVulkan::render_pipeline_create(RID p_shader, FramebufferForma
attachment_states.push_back(state);
idx++;
- };
+ }
}
ERR_FAIL_COND_V(attachment_states.size() != p_blend_state.attachments.size(), RID());
@@ -6652,6 +6783,10 @@ RenderingDevice::DrawListID RenderingDeviceVulkan::draw_list_begin_for_screen(Di
VkCommandBuffer command_buffer = frames[frame].draw_command_buffer;
+ if (!context->window_is_valid_swapchain(p_screen)) {
+ return INVALID_ID;
+ }
+
Size2i size = Size2i(context->window_get_width(p_screen), context->window_get_height(p_screen));
_draw_list_allocate(Rect2i(Vector2i(), size), 0, 0);
@@ -8592,6 +8727,30 @@ void RenderingDeviceVulkan::sync() {
local_device_processing = false;
}
+VmaPool RenderingDeviceVulkan::_find_or_create_small_allocs_pool(uint32_t p_mem_type_index) {
+ if (small_allocs_pools.has(p_mem_type_index)) {
+ return small_allocs_pools[p_mem_type_index];
+ }
+
+ print_verbose("Creating VMA small objects pool for memory type index " + itos(p_mem_type_index));
+
+ VmaPoolCreateInfo pci;
+ pci.memoryTypeIndex = p_mem_type_index;
+ pci.flags = 0;
+ pci.blockSize = 0;
+ pci.minBlockCount = 0;
+ pci.maxBlockCount = SIZE_MAX;
+ pci.priority = 0.5f;
+ pci.minAllocationAlignment = 0;
+ pci.pMemoryAllocateNext = nullptr;
+ VmaPool pool = VK_NULL_HANDLE;
+ VkResult res = vmaCreatePool(allocator, &pci, &pool);
+ small_allocs_pools[p_mem_type_index] = pool; // Don't try to create it again if failed the first time
+ ERR_FAIL_COND_V_MSG(res, pool, "vmaCreatePool failed with error " + itos(res) + ".");
+
+ return pool;
+}
+
void RenderingDeviceVulkan::_free_pending_resources(int p_frame) {
//free in dependency usage order, so nothing weird happens
//pipelines
@@ -8712,9 +8871,9 @@ uint64_t RenderingDeviceVulkan::get_memory_usage(MemoryType p_type) const {
} else if (p_type == MEMORY_TEXTURES) {
return image_memory;
} else {
- VmaStats stats;
- vmaCalculateStats(allocator, &stats);
- return stats.total.usedBytes;
+ VmaTotalStatistics stats;
+ vmaCalculateStatistics(allocator, &stats);
+ return stats.total.statistics.allocationBytes;
}
}
@@ -8813,18 +8972,6 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
vmaCreateAllocator(&allocatorInfo, &allocator);
}
- { //create pool for small objects
- VmaPoolCreateInfo pci;
- pci.flags = VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT;
- pci.blockSize = 0;
- pci.minBlockCount = 0;
- pci.maxBlockCount = SIZE_MAX;
- pci.priority = 0.5f;
- pci.minAllocationAlignment = 0;
- pci.pMemoryAllocateNext = nullptr;
- vmaCreatePool(allocator, &pci, &small_allocs_pool);
- }
-
frames = memnew_arr(Frame, frame_count);
frame = 0;
//create setup and frame buffers
@@ -9013,49 +9160,49 @@ uint64_t RenderingDeviceVulkan::get_driver_resource(DriverResource p_resource, R
switch (p_resource) {
case DRIVER_RESOURCE_VULKAN_DEVICE: {
return (uint64_t)context->get_device();
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_PHYSICAL_DEVICE: {
return (uint64_t)context->get_physical_device();
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_INSTANCE: {
return (uint64_t)context->get_instance();
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_QUEUE: {
return (uint64_t)context->get_graphics_queue();
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_QUEUE_FAMILY_INDEX: {
return context->get_graphics_queue_family_index();
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_IMAGE: {
Texture *tex = texture_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(tex, 0);
return (uint64_t)tex->image;
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_IMAGE_VIEW: {
Texture *tex = texture_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(tex, 0);
return (uint64_t)tex->view;
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_IMAGE_NATIVE_TEXTURE_FORMAT: {
Texture *tex = texture_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(tex, 0);
return vulkan_formats[tex->format];
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_SAMPLER: {
VkSampler *sampler = sampler_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(sampler, 0);
return uint64_t(*sampler);
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_DESCRIPTOR_SET: {
UniformSet *uniform_set = uniform_set_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(uniform_set, 0);
return uint64_t(uniform_set->descriptor_set);
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_BUFFER: {
Buffer *buffer = nullptr;
if (vertex_buffer_owner.owns(p_rid)) {
@@ -9073,23 +9220,23 @@ uint64_t RenderingDeviceVulkan::get_driver_resource(DriverResource p_resource, R
ERR_FAIL_NULL_V(buffer, 0);
return uint64_t(buffer->buffer);
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_COMPUTE_PIPELINE: {
ComputePipeline *compute_pipeline = compute_pipeline_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(compute_pipeline, 0);
return uint64_t(compute_pipeline->pipeline);
- }; break;
+ } break;
case DRIVER_RESOURCE_VULKAN_RENDER_PIPELINE: {
RenderPipeline *render_pipeline = render_pipeline_owner.get_or_null(p_rid);
ERR_FAIL_NULL_V(render_pipeline, 0);
return uint64_t(render_pipeline->pipeline);
- }; break;
+ } break;
default: {
// not supported for this driver
return 0;
- }; break;
+ } break;
}
}
@@ -9293,7 +9440,11 @@ void RenderingDeviceVulkan::finalize() {
for (int i = 0; i < staging_buffer_blocks.size(); i++) {
vmaDestroyBuffer(allocator, staging_buffer_blocks[i].buffer, staging_buffer_blocks[i].allocation);
}
- vmaDestroyPool(allocator, small_allocs_pool);
+ while (small_allocs_pools.size()) {
+ Map<uint32_t, VmaPool>::Element *E = small_allocs_pools.front();
+ vmaDestroyPool(allocator, E->get());
+ small_allocs_pools.erase(E);
+ }
vmaDestroyAllocator(allocator);
while (vertex_formats.size()) {
diff --git a/drivers/vulkan/rendering_device_vulkan.h b/drivers/vulkan/rendering_device_vulkan.h
index 6510893196..126f6f8ad0 100644
--- a/drivers/vulkan/rendering_device_vulkan.h
+++ b/drivers/vulkan/rendering_device_vulkan.h
@@ -1016,7 +1016,8 @@ class RenderingDeviceVulkan : public RenderingDevice {
void _free_pending_resources(int p_frame);
VmaAllocator allocator = nullptr;
- VmaPool small_allocs_pool = nullptr;
+ Map<uint32_t, VmaPool> small_allocs_pools;
+ VmaPool _find_or_create_small_allocs_pool(uint32_t p_mem_type_index);
VulkanContext *context = nullptr;
@@ -1037,6 +1038,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
public:
virtual RID texture_create(const TextureFormat &p_format, const TextureView &p_view, const Vector<Vector<uint8_t>> &p_data = Vector<Vector<uint8_t>>());
virtual RID texture_create_shared(const TextureView &p_view, RID p_with_texture);
+ virtual RID texture_create_from_extension(TextureType p_type, DataFormat p_format, TextureSamples p_samples, uint64_t p_flags, uint64_t p_image, uint64_t p_width, uint64_t p_height, uint64_t p_depth, uint64_t p_layers);
virtual RID texture_create_shared_from_slice(const TextureView &p_view, RID p_with_texture, uint32_t p_layer, uint32_t p_mipmap, uint32_t p_mipmaps = 1, TextureSliceType p_slice_type = TEXTURE_SLICE_2D);
virtual Error texture_update(RID p_texture, uint32_t p_layer, const Vector<uint8_t> &p_data, uint32_t p_post_barrier = BARRIER_MASK_ALL);
diff --git a/drivers/vulkan/vulkan_context.cpp b/drivers/vulkan/vulkan_context.cpp
index 1aa1bfddc8..3551b5d6c4 100644
--- a/drivers/vulkan/vulkan_context.cpp
+++ b/drivers/vulkan/vulkan_context.cpp
@@ -46,6 +46,8 @@
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define APP_SHORT_NAME "GodotEngine"
+VulkanHooks *VulkanContext::vulkan_hooks = nullptr;
+
VKAPI_ATTR VkBool32 VKAPI_CALL VulkanContext::_debug_messenger_callback(
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageTypeFlagsEXT messageType,
@@ -514,45 +516,62 @@ Error VulkanContext::_check_capabilities() {
subgroup_capabilities.supportedStages = 0;
subgroup_capabilities.supportedOperations = 0;
subgroup_capabilities.quadOperationsInAllStages = false;
+ shader_capabilities.shader_float16_is_supported = false;
+ shader_capabilities.shader_int8_is_supported = false;
+ storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported = false;
+ storage_buffer_capabilities.uniform_and_storage_buffer_16_bit_access_is_supported = false;
+ storage_buffer_capabilities.storage_push_constant_16_is_supported = false;
+ storage_buffer_capabilities.storage_input_output_16 = false;
// check for extended features
- PFN_vkGetPhysicalDeviceFeatures2 device_features_func = (PFN_vkGetPhysicalDeviceFeatures2)vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceFeatures2");
- if (device_features_func == nullptr) {
+ PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2_func = (PFN_vkGetPhysicalDeviceFeatures2)vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceFeatures2");
+ if (vkGetPhysicalDeviceFeatures2_func == nullptr) {
// In Vulkan 1.0 might be accessible under its original extension name
- device_features_func = (PFN_vkGetPhysicalDeviceFeatures2)vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceFeatures2KHR");
+ vkGetPhysicalDeviceFeatures2_func = (PFN_vkGetPhysicalDeviceFeatures2)vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceFeatures2KHR");
}
- if (device_features_func != nullptr) {
+ if (vkGetPhysicalDeviceFeatures2_func != nullptr) {
// check our extended features
- VkPhysicalDeviceMultiviewFeatures multiview_features;
- multiview_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
- multiview_features.pNext = nullptr;
+ VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_features = {
+ /*sType*/ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR,
+ /*pNext*/ nullptr,
+ /*shaderFloat16*/ false,
+ /*shaderInt8*/ false,
+ };
+
+ VkPhysicalDevice16BitStorageFeaturesKHR storage_feature = {
+ /*sType*/ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR,
+ /*pNext*/ &shader_features,
+ /*storageBuffer16BitAccess*/ false,
+ /*uniformAndStorageBuffer16BitAccess*/ false,
+ /*storagePushConstant16*/ false,
+ /*storageInputOutput16*/ false,
+ };
+
+ VkPhysicalDeviceMultiviewFeatures multiview_features = {
+ /*sType*/ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
+ /*pNext*/ &storage_feature,
+ /*multiview*/ false,
+ /*multiviewGeometryShader*/ false,
+ /*multiviewTessellationShader*/ false,
+ };
VkPhysicalDeviceFeatures2 device_features;
device_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
device_features.pNext = &multiview_features;
- device_features_func(gpu, &device_features);
+ vkGetPhysicalDeviceFeatures2_func(gpu, &device_features);
+
multiview_capabilities.is_supported = multiview_features.multiview;
multiview_capabilities.geometry_shader_is_supported = multiview_features.multiviewGeometryShader;
multiview_capabilities.tessellation_shader_is_supported = multiview_features.multiviewTessellationShader;
- VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_features;
- shader_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR;
- shader_features.pNext = nullptr;
-
- device_features.pNext = &shader_features;
-
- device_features_func(gpu, &device_features);
shader_capabilities.shader_float16_is_supported = shader_features.shaderFloat16;
+ shader_capabilities.shader_int8_is_supported = shader_features.shaderInt8;
- VkPhysicalDevice16BitStorageFeaturesKHR storage_feature;
- storage_feature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR;
- storage_feature.pNext = nullptr;
-
- device_features.pNext = &storage_feature;
-
- device_features_func(gpu, &device_features);
storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported = storage_feature.storageBuffer16BitAccess;
+ storage_buffer_capabilities.uniform_and_storage_buffer_16_bit_access_is_supported = storage_feature.uniformAndStorageBuffer16BitAccess;
+ storage_buffer_capabilities.storage_push_constant_16_is_supported = storage_feature.storagePushConstant16;
+ storage_buffer_capabilities.storage_input_output_16 = storage_feature.storageInputOutput16;
}
// check extended properties
@@ -678,19 +697,27 @@ Error VulkanContext::_create_instance() {
inst_info.pNext = &dbg_report_callback_create_info;
}
- VkResult err = vkCreateInstance(&inst_info, nullptr, &inst);
- ERR_FAIL_COND_V_MSG(err == VK_ERROR_INCOMPATIBLE_DRIVER, ERR_CANT_CREATE,
- "Cannot find a compatible Vulkan installable client driver (ICD).\n\n"
- "vkCreateInstance Failure");
- ERR_FAIL_COND_V_MSG(err == VK_ERROR_EXTENSION_NOT_PRESENT, ERR_CANT_CREATE,
- "Cannot find a specified extension library.\n"
- "Make sure your layers path is set appropriately.\n"
- "vkCreateInstance Failure");
- ERR_FAIL_COND_V_MSG(err, ERR_CANT_CREATE,
- "vkCreateInstance failed.\n\n"
- "Do you have a compatible Vulkan installable client driver (ICD) installed?\n"
- "Please look at the Getting Started guide for additional information.\n"
- "vkCreateInstance Failure");
+ VkResult err;
+
+ if (vulkan_hooks) {
+ if (!vulkan_hooks->create_vulkan_instance(&inst_info, &inst)) {
+ return ERR_CANT_CREATE;
+ }
+ } else {
+ err = vkCreateInstance(&inst_info, nullptr, &inst);
+ ERR_FAIL_COND_V_MSG(err == VK_ERROR_INCOMPATIBLE_DRIVER, ERR_CANT_CREATE,
+ "Cannot find a compatible Vulkan installable client driver (ICD).\n\n"
+ "vkCreateInstance Failure");
+ ERR_FAIL_COND_V_MSG(err == VK_ERROR_EXTENSION_NOT_PRESENT, ERR_CANT_CREATE,
+ "Cannot find a specified extension library.\n"
+ "Make sure your layers path is set appropriately.\n"
+ "vkCreateInstance Failure");
+ ERR_FAIL_COND_V_MSG(err, ERR_CANT_CREATE,
+ "vkCreateInstance failed.\n\n"
+ "Do you have a compatible Vulkan installable client driver (ICD) installed?\n"
+ "Please look at the Getting Started guide for additional information.\n"
+ "vkCreateInstance Failure");
+ }
inst_initialized = true;
@@ -803,107 +830,122 @@ Error VulkanContext::_create_physical_device(VkSurfaceKHR p_surface) {
{ 0, nullptr },
};
- // TODO: At least on Linux Laptops integrated GPUs fail with Vulkan in many instances.
- // The device should really be a preference, but for now choosing a discrete GPU over the
- // integrated one is better than the default.
-
int32_t device_index = -1;
- int type_selected = -1;
- print_verbose("Vulkan devices:");
- for (uint32_t i = 0; i < gpu_count; ++i) {
- VkPhysicalDeviceProperties props;
- vkGetPhysicalDeviceProperties(physical_devices[i], &props);
-
- bool present_supported = false;
-
- uint32_t device_queue_family_count = 0;
- vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &device_queue_family_count, nullptr);
- VkQueueFamilyProperties *device_queue_props = (VkQueueFamilyProperties *)malloc(device_queue_family_count * sizeof(VkQueueFamilyProperties));
- vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &device_queue_family_count, device_queue_props);
- for (uint32_t j = 0; j < device_queue_family_count; j++) {
- VkBool32 supports;
- vkGetPhysicalDeviceSurfaceSupportKHR(physical_devices[i], j, p_surface, &supports);
- if (supports && ((device_queue_props[j].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0)) {
- present_supported = true;
- } else {
- continue;
- }
+ if (vulkan_hooks) {
+ if (!vulkan_hooks->get_physical_device(&gpu)) {
+ return ERR_CANT_CREATE;
}
- String name = props.deviceName;
- String vendor = "Unknown";
- String dev_type;
- switch (props.deviceType) {
- case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: {
- dev_type = "Discrete";
- } break;
- case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: {
- dev_type = "Integrated";
- } break;
- case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: {
- dev_type = "Virtual";
- } break;
- case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_CPU: {
- dev_type = "CPU";
- } break;
- default: {
- dev_type = "Other";
- } break;
- }
- uint32_t vendor_idx = 0;
- while (vendor_names[vendor_idx].name != nullptr) {
- if (props.vendorID == vendor_names[vendor_idx].id) {
- vendor = vendor_names[vendor_idx].name;
+
+ // not really needed but nice to print the correct entry
+ for (uint32_t i = 0; i < gpu_count; ++i) {
+ if (physical_devices[i] == gpu) {
+ device_index = i;
break;
}
- vendor_idx++;
}
- free(device_queue_props);
- print_verbose(" #" + itos(i) + ": " + vendor + " " + name + " - " + (present_supported ? "Supported" : "Unsupported") + ", " + dev_type);
-
- if (present_supported) { // Select first supported device of preferred type: Discrete > Integrated > Virtual > CPU > Other.
+ } else {
+ // TODO: At least on Linux Laptops integrated GPUs fail with Vulkan in many instances.
+ // The device should really be a preference, but for now choosing a discrete GPU over the
+ // integrated one is better than the default.
+
+ int type_selected = -1;
+ print_verbose("Vulkan devices:");
+ for (uint32_t i = 0; i < gpu_count; ++i) {
+ VkPhysicalDeviceProperties props;
+ vkGetPhysicalDeviceProperties(physical_devices[i], &props);
+
+ bool present_supported = false;
+
+ uint32_t device_queue_family_count = 0;
+ vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &device_queue_family_count, nullptr);
+ VkQueueFamilyProperties *device_queue_props = (VkQueueFamilyProperties *)malloc(device_queue_family_count * sizeof(VkQueueFamilyProperties));
+ vkGetPhysicalDeviceQueueFamilyProperties(physical_devices[i], &device_queue_family_count, device_queue_props);
+ for (uint32_t j = 0; j < device_queue_family_count; j++) {
+ VkBool32 supports;
+ vkGetPhysicalDeviceSurfaceSupportKHR(physical_devices[i], j, p_surface, &supports);
+ if (supports && ((device_queue_props[j].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0)) {
+ present_supported = true;
+ } else {
+ continue;
+ }
+ }
+ String name = props.deviceName;
+ String vendor = "Unknown";
+ String dev_type;
switch (props.deviceType) {
case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: {
- if (type_selected < 4) {
- type_selected = 4;
- device_index = i;
- }
+ dev_type = "Discrete";
} break;
case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: {
- if (type_selected < 3) {
- type_selected = 3;
- device_index = i;
- }
+ dev_type = "Integrated";
} break;
case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: {
- if (type_selected < 2) {
- type_selected = 2;
- device_index = i;
- }
+ dev_type = "Virtual";
} break;
case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_CPU: {
- if (type_selected < 1) {
- type_selected = 1;
- device_index = i;
- }
+ dev_type = "CPU";
} break;
default: {
- if (type_selected < 0) {
- type_selected = 0;
- device_index = i;
- }
+ dev_type = "Other";
} break;
}
+ uint32_t vendor_idx = 0;
+ while (vendor_names[vendor_idx].name != nullptr) {
+ if (props.vendorID == vendor_names[vendor_idx].id) {
+ vendor = vendor_names[vendor_idx].name;
+ break;
+ }
+ vendor_idx++;
+ }
+ free(device_queue_props);
+ print_verbose(" #" + itos(i) + ": " + vendor + " " + name + " - " + (present_supported ? "Supported" : "Unsupported") + ", " + dev_type);
+
+ if (present_supported) { // Select first supported device of preffered type: Discrete > Integrated > Virtual > CPU > Other.
+ switch (props.deviceType) {
+ case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: {
+ if (type_selected < 4) {
+ type_selected = 4;
+ device_index = i;
+ }
+ } break;
+ case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: {
+ if (type_selected < 3) {
+ type_selected = 3;
+ device_index = i;
+ }
+ } break;
+ case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: {
+ if (type_selected < 2) {
+ type_selected = 2;
+ device_index = i;
+ }
+ } break;
+ case VkPhysicalDeviceType::VK_PHYSICAL_DEVICE_TYPE_CPU: {
+ if (type_selected < 1) {
+ type_selected = 1;
+ device_index = i;
+ }
+ } break;
+ default: {
+ if (type_selected < 0) {
+ type_selected = 0;
+ device_index = i;
+ }
+ } break;
+ }
+ }
}
- }
- int32_t user_device_index = Engine::get_singleton()->get_gpu_index(); // Force user selected GPU.
- if (user_device_index >= 0 && user_device_index < (int32_t)gpu_count) {
- device_index = user_device_index;
- }
+ int32_t user_device_index = Engine::get_singleton()->get_gpu_index(); // Force user selected GPU.
+ if (user_device_index >= 0 && user_device_index < (int32_t)gpu_count) {
+ device_index = user_device_index;
+ }
+
+ ERR_FAIL_COND_V_MSG(device_index == -1, ERR_CANT_CREATE, "None of Vulkan devices supports both graphics and present queues.");
- ERR_FAIL_COND_V_MSG(device_index == -1, ERR_CANT_CREATE, "None of Vulkan devices supports both graphics and present queues.");
+ gpu = physical_devices[device_index];
+ }
- gpu = physical_devices[device_index];
free(physical_devices);
/* Look for device extensions */
@@ -1057,9 +1099,61 @@ Error VulkanContext::_create_device() {
queues[0].pQueuePriorities = queue_priorities;
queues[0].flags = 0;
+ // Before we retrieved what is supported, here we tell Vulkan we want to enable these features using the same structs.
+ void *nextptr = nullptr;
+
+ VkPhysicalDeviceShaderFloat16Int8FeaturesKHR shader_features = {
+ /*sType*/ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR,
+ /*pNext*/ nextptr,
+ /*shaderFloat16*/ shader_capabilities.shader_float16_is_supported,
+ /*shaderInt8*/ shader_capabilities.shader_int8_is_supported,
+ };
+ nextptr = &shader_features;
+
+ VkPhysicalDeviceVulkan11Features vulkan11features;
+ VkPhysicalDevice16BitStorageFeaturesKHR storage_feature;
+ VkPhysicalDeviceMultiviewFeatures multiview_features;
+ if (vulkan_major > 1 || vulkan_minor >= 2) {
+ // In Vulkan 1.2 and newer we use a newer struct to enable various features
+
+ vulkan11features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
+ vulkan11features.pNext = nextptr;
+ vulkan11features.storageBuffer16BitAccess = storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported;
+ vulkan11features.uniformAndStorageBuffer16BitAccess = storage_buffer_capabilities.uniform_and_storage_buffer_16_bit_access_is_supported;
+ vulkan11features.storagePushConstant16 = storage_buffer_capabilities.storage_push_constant_16_is_supported;
+ vulkan11features.storageInputOutput16 = storage_buffer_capabilities.storage_input_output_16;
+ vulkan11features.multiview = multiview_capabilities.is_supported;
+ vulkan11features.multiviewGeometryShader = multiview_capabilities.geometry_shader_is_supported;
+ vulkan11features.multiviewTessellationShader = multiview_capabilities.tessellation_shader_is_supported;
+ vulkan11features.variablePointersStorageBuffer = 0;
+ vulkan11features.variablePointers = 0;
+ vulkan11features.protectedMemory = 0;
+ vulkan11features.samplerYcbcrConversion = 0;
+ vulkan11features.shaderDrawParameters = 0;
+ nextptr = &vulkan11features;
+ } else {
+ // On Vulkan 1.0 and 1.1 we use our older structs to initialise these features
+ storage_feature.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR;
+ storage_feature.pNext = nextptr;
+ storage_feature.storageBuffer16BitAccess = storage_buffer_capabilities.storage_buffer_16_bit_access_is_supported;
+ storage_feature.uniformAndStorageBuffer16BitAccess = storage_buffer_capabilities.uniform_and_storage_buffer_16_bit_access_is_supported;
+ storage_feature.storagePushConstant16 = storage_buffer_capabilities.storage_push_constant_16_is_supported;
+ storage_feature.storageInputOutput16 = storage_buffer_capabilities.storage_input_output_16;
+ nextptr = &storage_feature;
+
+ if (vulkan_major == 1 && vulkan_minor == 1) {
+ multiview_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
+ multiview_features.pNext = nextptr;
+ multiview_features.multiview = multiview_capabilities.is_supported;
+ multiview_features.multiviewGeometryShader = multiview_capabilities.geometry_shader_is_supported;
+ multiview_features.multiviewTessellationShader = multiview_capabilities.tessellation_shader_is_supported;
+ nextptr = &multiview_features;
+ }
+ }
+
VkDeviceCreateInfo sdevice = {
/*sType*/ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
- /*pNext*/ nullptr,
+ /*pNext*/ nextptr,
/*flags*/ 0,
/*queueCreateInfoCount*/ 1,
/*pQueueCreateInfos*/ queues,
@@ -1068,7 +1162,6 @@ Error VulkanContext::_create_device() {
/*enabledExtensionCount*/ enabled_extension_count,
/*ppEnabledExtensionNames*/ (const char *const *)extension_names,
/*pEnabledFeatures*/ &physical_device_features, // If specific features are required, pass them in here
-
};
if (separate_present_queue) {
queues[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
@@ -1080,39 +1173,15 @@ Error VulkanContext::_create_device() {
sdevice.queueCreateInfoCount = 2;
}
- VkPhysicalDeviceVulkan11Features vulkan11features;
- VkPhysicalDeviceMultiviewFeatures multiview_features;
- if (vulkan_major > 1 || vulkan_minor >= 2) {
- vulkan11features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
- vulkan11features.pNext = nullptr;
- // !BAS! Need to figure out which ones of these we want enabled...
- vulkan11features.storageBuffer16BitAccess = 0;
- vulkan11features.uniformAndStorageBuffer16BitAccess = 0;
- vulkan11features.storagePushConstant16 = 0;
- vulkan11features.storageInputOutput16 = 0;
- vulkan11features.multiview = multiview_capabilities.is_supported;
- vulkan11features.multiviewGeometryShader = multiview_capabilities.geometry_shader_is_supported;
- vulkan11features.multiviewTessellationShader = multiview_capabilities.tessellation_shader_is_supported;
- vulkan11features.variablePointersStorageBuffer = 0;
- vulkan11features.variablePointers = 0;
- vulkan11features.protectedMemory = 0;
- vulkan11features.samplerYcbcrConversion = 0;
- vulkan11features.shaderDrawParameters = 0;
-
- sdevice.pNext = &vulkan11features;
- } else if (vulkan_major == 1 && vulkan_minor == 1) {
- multiview_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
- multiview_features.pNext = nullptr;
- multiview_features.multiview = multiview_capabilities.is_supported;
- multiview_features.multiviewGeometryShader = multiview_capabilities.geometry_shader_is_supported;
- multiview_features.multiviewTessellationShader = multiview_capabilities.tessellation_shader_is_supported;
-
- sdevice.pNext = &multiview_features;
+ if (vulkan_hooks) {
+ if (!vulkan_hooks->create_vulkan_device(&sdevice, &device)) {
+ return ERR_CANT_CREATE;
+ }
+ } else {
+ err = vkCreateDevice(gpu, &sdevice, nullptr, &device);
+ ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
}
- err = vkCreateDevice(gpu, &sdevice, nullptr, &device);
- ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
-
return OK;
}
@@ -1348,6 +1417,12 @@ int VulkanContext::window_get_height(DisplayServer::WindowID p_window) {
return windows[p_window].height;
}
+bool VulkanContext::window_is_valid_swapchain(DisplayServer::WindowID p_window) {
+ ERR_FAIL_COND_V(!windows.has(p_window), false);
+ Window *w = &windows[p_window];
+ return w->swapchain_image_resources != VK_NULL_HANDLE;
+}
+
VkRenderPass VulkanContext::window_get_render_pass(DisplayServer::WindowID p_window) {
ERR_FAIL_COND_V(!windows.has(p_window), VK_NULL_HANDLE);
Window *w = &windows[p_window];
@@ -1360,7 +1435,11 @@ VkFramebuffer VulkanContext::window_get_framebuffer(DisplayServer::WindowID p_wi
ERR_FAIL_COND_V(!buffers_prepared, VK_NULL_HANDLE);
Window *w = &windows[p_window];
//vulkan use of currentbuffer
- return w->swapchain_image_resources[w->current_buffer].framebuffer;
+ if (w->swapchain_image_resources != VK_NULL_HANDLE) {
+ return w->swapchain_image_resources[w->current_buffer].framebuffer;
+ } else {
+ return VK_NULL_HANDLE;
+ }
}
void VulkanContext::window_destroy(DisplayServer::WindowID p_window_id) {
@@ -1930,24 +2009,25 @@ Error VulkanContext::swap_buffers() {
}
VkSemaphore *semaphores_to_acquire = (VkSemaphore *)alloca(windows.size() * sizeof(VkSemaphore));
+ VkPipelineStageFlags *pipe_stage_flags = (VkPipelineStageFlags *)alloca(windows.size() * sizeof(VkPipelineStageFlags));
uint32_t semaphores_to_acquire_count = 0;
for (KeyValue<int, Window> &E : windows) {
Window *w = &E.value;
if (w->semaphore_acquired) {
- semaphores_to_acquire[semaphores_to_acquire_count++] = w->image_acquired_semaphores[frame_index];
+ semaphores_to_acquire[semaphores_to_acquire_count] = w->image_acquired_semaphores[frame_index];
+ pipe_stage_flags[semaphores_to_acquire_count] = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+ semaphores_to_acquire_count++;
}
}
- VkPipelineStageFlags pipe_stage_flags;
VkSubmitInfo submit_info;
submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submit_info.pNext = nullptr;
- submit_info.pWaitDstStageMask = &pipe_stage_flags;
- pipe_stage_flags = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
submit_info.waitSemaphoreCount = semaphores_to_acquire_count;
submit_info.pWaitSemaphores = semaphores_to_acquire;
+ submit_info.pWaitDstStageMask = pipe_stage_flags;
submit_info.commandBufferCount = commands_to_submit;
submit_info.pCommandBuffers = commands_ptr;
submit_info.signalSemaphoreCount = 1;
@@ -1963,7 +2043,7 @@ Error VulkanContext::swap_buffers() {
// present queue before presenting, waiting for the draw complete
// semaphore and signalling the ownership released semaphore when finished
VkFence nullFence = VK_NULL_HANDLE;
- pipe_stage_flags = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
+ pipe_stage_flags[0] = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
submit_info.waitSemaphoreCount = 1;
submit_info.pWaitSemaphores = &draw_complete_semaphores[frame_index];
submit_info.commandBufferCount = 0;
diff --git a/drivers/vulkan/vulkan_context.h b/drivers/vulkan/vulkan_context.h
index 67a675f6c6..8c0111714c 100644
--- a/drivers/vulkan/vulkan_context.h
+++ b/drivers/vulkan/vulkan_context.h
@@ -45,6 +45,8 @@
#include <vulkan/vulkan.h>
#endif
+#include "vulkan_hooks.h"
+
class VulkanContext {
public:
struct SubgroupCapabilities {
@@ -69,10 +71,14 @@ public:
struct ShaderCapabilities {
bool shader_float16_is_supported;
+ bool shader_int8_is_supported;
};
struct StorageBufferCapabilities {
bool storage_buffer_16_bit_access_is_supported;
+ bool uniform_and_storage_buffer_16_bit_access_is_supported;
+ bool storage_push_constant_16_is_supported;
+ bool storage_input_output_16;
};
private:
@@ -82,6 +88,7 @@ private:
FRAME_LAG = 2
};
+ static VulkanHooks *vulkan_hooks;
VkInstance inst = VK_NULL_HANDLE;
VkPhysicalDevice gpu = VK_NULL_HANDLE;
VkPhysicalDeviceProperties gpu_props;
@@ -263,9 +270,12 @@ public:
VkQueue get_graphics_queue() const;
uint32_t get_graphics_queue_family_index() const;
+ static void set_vulkan_hooks(VulkanHooks *p_vulkan_hooks) { vulkan_hooks = p_vulkan_hooks; };
+
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
int window_get_width(DisplayServer::WindowID p_window = 0);
int window_get_height(DisplayServer::WindowID p_window = 0);
+ bool window_is_valid_swapchain(DisplayServer::WindowID p_window = 0);
void window_destroy(DisplayServer::WindowID p_window_id);
VkFramebuffer window_get_framebuffer(DisplayServer::WindowID p_window = 0);
VkRenderPass window_get_render_pass(DisplayServer::WindowID p_window = 0);
diff --git a/drivers/vulkan/vulkan_hooks.h b/drivers/vulkan/vulkan_hooks.h
new file mode 100644
index 0000000000..3f244b4d45
--- /dev/null
+++ b/drivers/vulkan/vulkan_hooks.h
@@ -0,0 +1,48 @@
+/*************************************************************************/
+/* vulkan_hooks.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef VULKAN_HOOKS_H
+#define VULKAN_HOOKS_H
+
+#ifdef USE_VOLK
+#include <volk.h>
+#else
+#include <vulkan/vulkan.h>
+#endif
+
+class VulkanHooks {
+public:
+ virtual bool create_vulkan_instance(const VkInstanceCreateInfo *p_vulkan_create_info, VkInstance *r_instance) { return false; };
+ virtual bool get_physical_device(VkPhysicalDevice *r_device) { return false; };
+ virtual bool create_vulkan_device(const VkDeviceCreateInfo *p_device_create_info, VkDevice *r_device) { return false; };
+ virtual ~VulkanHooks(){};
+};
+
+#endif
diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp
index c7a2d04436..c9609b469a 100644
--- a/drivers/wasapi/audio_driver_wasapi.cpp
+++ b/drivers/wasapi/audio_driver_wasapi.cpp
@@ -454,8 +454,9 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c
Error AudioDriverWASAPI::init_render_device(bool reinit) {
Error err = audio_device_init(&audio_output, false, reinit);
- if (err != OK)
+ if (err != OK) {
return err;
+ }
switch (audio_output.channels) {
case 2: // Stereo
@@ -485,8 +486,9 @@ Error AudioDriverWASAPI::init_render_device(bool reinit) {
Error AudioDriverWASAPI::init_capture_device(bool reinit) {
Error err = audio_device_init(&audio_input, true, reinit);
- if (err != OK)
+ if (err != OK) {
return err;
+ }
// Get the max frames
UINT32 max_frames;
diff --git a/drivers/windows/file_access_windows.cpp b/drivers/windows/file_access_windows.cpp
index cfd5d65f60..59dc1d8e77 100644
--- a/drivers/windows/file_access_windows.cpp
+++ b/drivers/windows/file_access_windows.cpp
@@ -87,7 +87,7 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) {
if (!S_ISREG(st.st_mode)) {
return ERR_FILE_CANT_OPEN;
}
- };
+ }
#ifdef TOOLS_ENABLED
// Windows is case insensitive, but all other platforms are sensitive to it
@@ -269,7 +269,7 @@ uint64_t FileAccessWindows::get_buffer(uint8_t *p_dst, uint64_t p_length) const
uint64_t read = fread(p_dst, 1, p_length, f);
check_errors();
return read;
-};
+}
Error FileAccessWindows::get_error() const {
return last_error;
@@ -326,8 +326,9 @@ bool FileAccessWindows::file_exists(const String &p_name) {
uint64_t FileAccessWindows::_get_modified_time(const String &p_file) {
String file = fix_path(p_file);
- if (file.ends_with("/") && file != "/")
+ if (file.ends_with("/") && file != "/") {
file = file.substr(0, file.length() - 1);
+ }
struct _stat st;
int rv = _wstat((LPCWSTR)(file.utf16().get_data()), &st);
diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp
index 6fd0132ab1..3eab494761 100644
--- a/editor/action_map_editor.cpp
+++ b/editor/action_map_editor.cpp
@@ -562,8 +562,6 @@ void InputEventConfigurationDialog::_notification(int p_what) {
_update_input_list();
} break;
- default:
- break;
}
}
@@ -1014,8 +1012,6 @@ void ActionMapEditor::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
action_list_search->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
} break;
- default:
- break;
}
}
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp
index 40b5de2ec7..c8c8c7d891 100644
--- a/editor/animation_bezier_editor.cpp
+++ b/editor/animation_bezier_editor.cpp
@@ -220,415 +220,423 @@ void AnimationBezierTrackEdit::_draw_line_clipped(const Vector2 &p_from, const V
}
void AnimationBezierTrackEdit::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- }
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- bezier_icon = get_theme_icon(SNAME("KeyBezierPoint"), SNAME("EditorIcons"));
- bezier_handle_icon = get_theme_icon(SNAME("KeyBezierHandle"), SNAME("EditorIcons"));
- selected_icon = get_theme_icon(SNAME("KeyBezierSelected"), SNAME("EditorIcons"));
- }
- if (p_what == NOTIFICATION_DRAW) {
- if (animation.is_null()) {
- return;
+ switch (p_what) {
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ } break;
+
+ case NOTIFICATION_ENTER_TREE: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ [[fallthrough]];
}
+ case NOTIFICATION_THEME_CHANGED: {
+ bezier_icon = get_theme_icon(SNAME("KeyBezierPoint"), SNAME("EditorIcons"));
+ bezier_handle_icon = get_theme_icon(SNAME("KeyBezierHandle"), SNAME("EditorIcons"));
+ selected_icon = get_theme_icon(SNAME("KeyBezierSelected"), SNAME("EditorIcons"));
+ } break;
- int limit = timeline->get_name_limit();
+ case NOTIFICATION_DRAW: {
+ if (animation.is_null()) {
+ return;
+ }
- if (has_focus()) {
- Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- accent.a *= 0.7;
- draw_rect(Rect2(Point2(), get_size()), accent, false, Math::round(EDSCALE));
- }
+ int limit = timeline->get_name_limit();
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
- Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
- int hsep = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
- int vsep = get_theme_constant(SNAME("vseparation"), SNAME("ItemList"));
- Color linecolor = color;
- linecolor.a = 0.2;
+ if (has_focus()) {
+ Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ accent.a *= 0.7;
+ draw_rect(Rect2(Point2(), get_size()), accent, false, Math::round(EDSCALE));
+ }
- draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE));
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
+ Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
+ int hsep = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
+ int vsep = get_theme_constant(SNAME("vseparation"), SNAME("ItemList"));
+ Color linecolor = color;
+ linecolor.a = 0.2;
- int right_limit = get_size().width;
+ draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE));
- int vofs = vsep;
- int margin = 0;
+ int right_limit = get_size().width;
- Map<int, Color> subtrack_colors;
- Color selected_track_color;
- subtracks.clear();
- subtrack_icons.clear();
+ int vofs = vsep;
+ int margin = 0;
- Map<String, Vector<int>> track_indices;
- int track_count = animation->get_track_count();
- for (int i = 0; i < track_count; ++i) {
- if (animation->track_get_type(i) != Animation::TrackType::TYPE_BEZIER) {
- continue;
- }
+ Map<int, Color> subtrack_colors;
+ Color selected_track_color;
+ subtracks.clear();
+ subtrack_icons.clear();
- String base_path = animation->track_get_path(i);
- if (is_filtered) {
- if (root && root->has_node(base_path)) {
- Node *node = root->get_node(base_path);
- if (!node) {
- continue; // No node, no filter.
- }
- if (!EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
- continue; // Skip track due to not selected.
+ Map<String, Vector<int>> track_indices;
+ int track_count = animation->get_track_count();
+ for (int i = 0; i < track_count; ++i) {
+ if (animation->track_get_type(i) != Animation::TrackType::TYPE_BEZIER) {
+ continue;
+ }
+
+ String base_path = animation->track_get_path(i);
+ if (is_filtered) {
+ if (root && root->has_node(base_path)) {
+ Node *node = root->get_node(base_path);
+ if (!node) {
+ continue; // No node, no filter.
+ }
+ if (!EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
+ continue; // Skip track due to not selected.
+ }
}
}
- }
- int end = base_path.find(":");
- if (end != -1) {
- base_path = base_path.substr(0, end + 1);
+ int end = base_path.find(":");
+ if (end != -1) {
+ base_path = base_path.substr(0, end + 1);
+ }
+ Vector<int> indices = track_indices.has(base_path) ? track_indices[base_path] : Vector<int>();
+ indices.push_back(i);
+ track_indices[base_path] = indices;
}
- Vector<int> indices = track_indices.has(base_path) ? track_indices[base_path] : Vector<int>();
- indices.push_back(i);
- track_indices[base_path] = indices;
- }
- for (const KeyValue<String, Vector<int>> &E : track_indices) {
- String base_path = E.key;
+ for (const KeyValue<String, Vector<int>> &E : track_indices) {
+ String base_path = E.key;
- Vector<int> tracks = E.value;
+ Vector<int> tracks = E.value;
- // NAMES AND ICON
- {
- NodePath path = animation->track_get_path(tracks[0]);
+ // NAMES AND ICON
+ {
+ NodePath path = animation->track_get_path(tracks[0]);
- Node *node = nullptr;
+ Node *node = nullptr;
- if (root && root->has_node(path)) {
- node = root->get_node(path);
- }
+ if (root && root->has_node(path)) {
+ node = root->get_node(path);
+ }
- String text;
+ String text;
- if (node) {
- int ofs = 0;
+ if (node) {
+ int ofs = 0;
- Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node");
+ Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node");
- text = node->get_name();
- ofs += hsep;
+ text = node->get_name();
+ ofs += hsep;
- TextLine text_buf = TextLine(text, font, font_size);
- text_buf.set_width(limit - ofs - icon->get_width() - hsep);
+ TextLine text_buf = TextLine(text, font, font_size);
+ text_buf.set_width(limit - ofs - icon->get_width() - hsep);
- int h = MAX(text_buf.get_size().y, icon->get_height());
+ int h = MAX(text_buf.get_size().y, icon->get_height());
- draw_texture(icon, Point2(ofs, vofs + int(h - icon->get_height()) / 2));
- ofs += icon->get_width();
+ draw_texture(icon, Point2(ofs, vofs + int(h - icon->get_height()) / 2));
+ ofs += icon->get_width();
- margin = icon->get_width();
+ margin = icon->get_width();
- Vector2 string_pos = Point2(ofs, vofs);
- string_pos = string_pos.floor();
- text_buf.draw(get_canvas_item(), string_pos, color);
+ Vector2 string_pos = Point2(ofs, vofs);
+ string_pos = string_pos.floor();
+ text_buf.draw(get_canvas_item(), string_pos, color);
- vofs += h + vsep;
+ vofs += h + vsep;
+ }
}
- }
- Ref<Texture2D> remove = get_theme_icon(SNAME("Remove"), SNAME("EditorIcons"));
- float remove_hpos = limit - hsep - remove->get_width();
+ Ref<Texture2D> remove = get_theme_icon(SNAME("Remove"), SNAME("EditorIcons"));
+ float remove_hpos = limit - hsep - remove->get_width();
- Ref<Texture2D> lock = get_theme_icon(SNAME("Lock"), SNAME("EditorIcons"));
- Ref<Texture2D> unlock = get_theme_icon(SNAME("Unlock"), SNAME("EditorIcons"));
- float lock_hpos = remove_hpos - hsep - lock->get_width();
+ Ref<Texture2D> lock = get_theme_icon(SNAME("Lock"), SNAME("EditorIcons"));
+ Ref<Texture2D> unlock = get_theme_icon(SNAME("Unlock"), SNAME("EditorIcons"));
+ float lock_hpos = remove_hpos - hsep - lock->get_width();
- Ref<Texture2D> visible = get_theme_icon(SNAME("GuiVisibilityVisible"), SNAME("EditorIcons"));
- Ref<Texture2D> hidden = get_theme_icon(SNAME("GuiVisibilityHidden"), SNAME("EditorIcons"));
- float visibility_hpos = lock_hpos - hsep - visible->get_width();
+ Ref<Texture2D> visible = get_theme_icon(SNAME("GuiVisibilityVisible"), SNAME("EditorIcons"));
+ Ref<Texture2D> hidden = get_theme_icon(SNAME("GuiVisibilityHidden"), SNAME("EditorIcons"));
+ float visibility_hpos = lock_hpos - hsep - visible->get_width();
- Ref<Texture2D> solo = get_theme_icon(SNAME("AudioBusSolo"), SNAME("EditorIcons"));
- float solo_hpos = visibility_hpos - hsep - solo->get_width();
+ Ref<Texture2D> solo = get_theme_icon(SNAME("AudioBusSolo"), SNAME("EditorIcons"));
+ float solo_hpos = visibility_hpos - hsep - solo->get_width();
- float buttons_width = remove->get_width() + lock->get_width() + visible->get_width() + solo->get_width() + hsep * 3;
+ float buttons_width = remove->get_width() + lock->get_width() + visible->get_width() + solo->get_width() + hsep * 3;
- for (int i = 0; i < tracks.size(); ++i) {
- // RELATED TRACKS TITLES
+ for (int i = 0; i < tracks.size(); ++i) {
+ // RELATED TRACKS TITLES
- int current_track = tracks[i];
+ int current_track = tracks[i];
- String path = animation->track_get_path(current_track);
- path = path.replace_first(base_path, "");
+ String path = animation->track_get_path(current_track);
+ path = path.replace_first(base_path, "");
- Color cc = color;
- TextLine text_buf = TextLine(path, font, font_size);
- text_buf.set_width(limit - margin - buttons_width);
+ Color cc = color;
+ TextLine text_buf = TextLine(path, font, font_size);
+ text_buf.set_width(limit - margin - buttons_width);
- Rect2 rect = Rect2(margin, vofs, solo_hpos - hsep - solo->get_width(), text_buf.get_size().y + vsep);
+ Rect2 rect = Rect2(margin, vofs, solo_hpos - hsep - solo->get_width(), text_buf.get_size().y + vsep);
- cc.a *= 0.7;
- float h;
- if (path.ends_with(":x")) {
- h = 0;
- } else if (path.ends_with(":y")) {
- h = 0.33f;
- } else if (path.ends_with(":z")) {
- h = 0.66f;
- } else {
- uint32_t hash = path.hash();
- hash = ((hash >> 16) ^ hash) * 0x45d9f3b;
- hash = ((hash >> 16) ^ hash) * 0x45d9f3b;
- hash = (hash >> 16) ^ hash;
- h = (hash % 65535) / 65536.0;
- }
-
- if (current_track != selected_track) {
- Color track_color;
- if (locked_tracks.has(current_track)) {
- track_color.set_hsv(h, 0, 0.4);
+ cc.a *= 0.7;
+ float h;
+ if (path.ends_with(":x")) {
+ h = 0;
+ } else if (path.ends_with(":y")) {
+ h = 0.33f;
+ } else if (path.ends_with(":z")) {
+ h = 0.66f;
} else {
- track_color.set_hsv(h, 0.2, 0.8);
+ uint32_t hash = path.hash();
+ hash = ((hash >> 16) ^ hash) * 0x45d9f3b;
+ hash = ((hash >> 16) ^ hash) * 0x45d9f3b;
+ hash = (hash >> 16) ^ hash;
+ h = (hash % 65535) / 65536.0;
}
- track_color.a = 0.5;
- draw_rect(Rect2(0, vofs, margin - hsep, text_buf.get_size().y * 0.8), track_color);
- subtrack_colors[current_track] = track_color;
-
- subtracks[current_track] = rect;
- } else {
- Color ac = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- ac.a = 0.5;
- draw_rect(rect, ac);
- if (locked_tracks.has(selected_track)) {
- selected_track_color.set_hsv(h, 0.0, 0.4);
+
+ if (current_track != selected_track) {
+ Color track_color;
+ if (locked_tracks.has(current_track)) {
+ track_color.set_hsv(h, 0, 0.4);
+ } else {
+ track_color.set_hsv(h, 0.2, 0.8);
+ }
+ track_color.a = 0.5;
+ draw_rect(Rect2(0, vofs, margin - hsep, text_buf.get_size().y * 0.8), track_color);
+ subtrack_colors[current_track] = track_color;
+
+ subtracks[current_track] = rect;
} else {
- selected_track_color.set_hsv(h, 0.8, 0.8);
+ Color ac = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ ac.a = 0.5;
+ draw_rect(rect, ac);
+ if (locked_tracks.has(selected_track)) {
+ selected_track_color.set_hsv(h, 0.0, 0.4);
+ } else {
+ selected_track_color.set_hsv(h, 0.8, 0.8);
+ }
}
- }
- Vector2 string_pos = Point2(margin, vofs);
- text_buf.draw(get_canvas_item(), string_pos, cc);
+ Vector2 string_pos = Point2(margin, vofs);
+ text_buf.draw(get_canvas_item(), string_pos, cc);
- float icon_start_height = vofs + rect.size.y / 2;
- Rect2 remove_rect = Rect2(remove_hpos, icon_start_height - remove->get_height() / 2, remove->get_width(), remove->get_height());
- draw_texture(remove, remove_rect.position);
+ float icon_start_height = vofs + rect.size.y / 2;
+ Rect2 remove_rect = Rect2(remove_hpos, icon_start_height - remove->get_height() / 2, remove->get_width(), remove->get_height());
+ draw_texture(remove, remove_rect.position);
- Rect2 lock_rect = Rect2(lock_hpos, icon_start_height - lock->get_height() / 2, lock->get_width(), lock->get_height());
- if (locked_tracks.has(current_track)) {
- draw_texture(lock, lock_rect.position);
- } else {
- draw_texture(unlock, lock_rect.position);
- }
+ Rect2 lock_rect = Rect2(lock_hpos, icon_start_height - lock->get_height() / 2, lock->get_width(), lock->get_height());
+ if (locked_tracks.has(current_track)) {
+ draw_texture(lock, lock_rect.position);
+ } else {
+ draw_texture(unlock, lock_rect.position);
+ }
- Rect2 visible_rect = Rect2(visibility_hpos, icon_start_height - visible->get_height() / 2, visible->get_width(), visible->get_height());
- if (hidden_tracks.has(current_track)) {
- draw_texture(hidden, visible_rect.position);
- } else {
- draw_texture(visible, visible_rect.position);
- }
+ Rect2 visible_rect = Rect2(visibility_hpos, icon_start_height - visible->get_height() / 2, visible->get_width(), visible->get_height());
+ if (hidden_tracks.has(current_track)) {
+ draw_texture(hidden, visible_rect.position);
+ } else {
+ draw_texture(visible, visible_rect.position);
+ }
- Rect2 solo_rect = Rect2(solo_hpos, icon_start_height - solo->get_height() / 2, solo->get_width(), solo->get_height());
- draw_texture(solo, solo_rect.position);
+ Rect2 solo_rect = Rect2(solo_hpos, icon_start_height - solo->get_height() / 2, solo->get_width(), solo->get_height());
+ draw_texture(solo, solo_rect.position);
- Map<int, Rect2> track_icons;
- track_icons[REMOVE_ICON] = remove_rect;
- track_icons[LOCK_ICON] = lock_rect;
- track_icons[VISIBILITY_ICON] = visible_rect;
- track_icons[SOLO_ICON] = solo_rect;
+ Map<int, Rect2> track_icons;
+ track_icons[REMOVE_ICON] = remove_rect;
+ track_icons[LOCK_ICON] = lock_rect;
+ track_icons[VISIBILITY_ICON] = visible_rect;
+ track_icons[SOLO_ICON] = solo_rect;
- subtrack_icons[current_track] = track_icons;
+ subtrack_icons[current_track] = track_icons;
- vofs += text_buf.get_size().y + vsep;
+ vofs += text_buf.get_size().y + vsep;
+ }
}
- }
- Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- { //guides
- float min_left_scale = font->get_height(font_size) + vsep;
+ { //guides
+ float min_left_scale = font->get_height(font_size) + vsep;
- float scale = (min_left_scale * 2) * v_zoom;
- float step = Math::pow(10.0, Math::round(Math::log(scale / 5.0) / Math::log(10.0))) * 5.0;
- scale = Math::snapped(scale, step);
+ float scale = (min_left_scale * 2) * v_zoom;
+ float step = Math::pow(10.0, Math::round(Math::log(scale / 5.0) / Math::log(10.0))) * 5.0;
+ scale = Math::snapped(scale, step);
- while (scale / v_zoom < min_left_scale * 2) {
- scale += step;
- }
+ while (scale / v_zoom < min_left_scale * 2) {
+ scale += step;
+ }
- bool first = true;
- int prev_iv = 0;
- for (int i = font->get_height(font_size); i < get_size().height; i++) {
- float ofs = get_size().height / 2 - i;
- ofs *= v_zoom;
- ofs += v_scroll;
+ bool first = true;
+ int prev_iv = 0;
+ for (int i = font->get_height(font_size); i < get_size().height; i++) {
+ float ofs = get_size().height / 2 - i;
+ ofs *= v_zoom;
+ ofs += v_scroll;
- int iv = int(ofs / scale);
- if (ofs < 0) {
- iv -= 1;
- }
- if (!first && iv != prev_iv) {
- Color lc = linecolor;
- lc.a *= 0.5;
- draw_line(Point2(limit, i), Point2(right_limit, i), lc, Math::round(EDSCALE));
- Color c = color;
- c.a *= 0.5;
- draw_string(font, Point2(limit + 8, i - 2), TS->format_number(rtos(Math::snapped((iv + 1) * scale, step))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, c);
- }
+ int iv = int(ofs / scale);
+ if (ofs < 0) {
+ iv -= 1;
+ }
+ if (!first && iv != prev_iv) {
+ Color lc = linecolor;
+ lc.a *= 0.5;
+ draw_line(Point2(limit, i), Point2(right_limit, i), lc, Math::round(EDSCALE));
+ Color c = color;
+ c.a *= 0.5;
+ draw_string(font, Point2(limit + 8, i - 2), TS->format_number(rtos(Math::snapped((iv + 1) * scale, step))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, c);
+ }
- first = false;
- prev_iv = iv;
+ first = false;
+ prev_iv = iv;
+ }
}
- }
- { //draw OTHER curves
+ { //draw OTHER curves
- float scale = timeline->get_zoom_scale();
- Ref<Texture2D> point = get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons"));
- for (const KeyValue<int, Color> &E : subtrack_colors) {
- if (hidden_tracks.has(E.key)) {
- continue;
- }
- _draw_track(E.key, E.value);
+ float scale = timeline->get_zoom_scale();
+ Ref<Texture2D> point = get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons"));
+ for (const KeyValue<int, Color> &E : subtrack_colors) {
+ if (hidden_tracks.has(E.key)) {
+ continue;
+ }
+ _draw_track(E.key, E.value);
- for (int i = 0; i < animation->track_get_key_count(E.key); i++) {
- float offset = animation->track_get_key_time(E.key, i);
- float value = animation->bezier_track_get_key_value(E.key, i);
+ for (int i = 0; i < animation->track_get_key_count(E.key); i++) {
+ float offset = animation->track_get_key_time(E.key, i);
+ float value = animation->bezier_track_get_key_value(E.key, i);
- Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value));
+ Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value));
- if (pos.x >= limit && pos.x <= right_limit) {
- draw_texture(point, pos - point->get_size() / 2, E.value);
+ if (pos.x >= limit && pos.x <= right_limit) {
+ draw_texture(point, pos - point->get_size() / 2, E.value);
+ }
}
}
- }
- if (track_count > 0 && !hidden_tracks.has(selected_track)) {
- //draw edited curve
- _draw_track(selected_track, selected_track_color);
+ if (track_count > 0 && !hidden_tracks.has(selected_track)) {
+ //draw edited curve
+ _draw_track(selected_track, selected_track_color);
+ }
}
- }
- //draw editor handles
- {
- edit_points.clear();
- float scale = timeline->get_zoom_scale();
+ //draw editor handles
+ {
+ edit_points.clear();
+ float scale = timeline->get_zoom_scale();
- for (int i = 0; i < track_count; ++i) {
- if (animation->track_get_type(i) != Animation::TrackType::TYPE_BEZIER || hidden_tracks.has(i)) {
- continue;
- }
+ for (int i = 0; i < track_count; ++i) {
+ if (animation->track_get_type(i) != Animation::TrackType::TYPE_BEZIER || hidden_tracks.has(i)) {
+ continue;
+ }
- if (hidden_tracks.has(i) || locked_tracks.has(i)) {
- continue;
- }
+ if (hidden_tracks.has(i) || locked_tracks.has(i)) {
+ continue;
+ }
- int key_count = animation->track_get_key_count(i);
- String path = animation->track_get_path(i);
+ int key_count = animation->track_get_key_count(i);
+ String path = animation->track_get_path(i);
- if (is_filtered) {
- if (root && root->has_node(path)) {
- Node *node = root->get_node(path);
- if (!node) {
- continue; // No node, no filter.
- }
- if (!EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
- continue; // Skip track due to not selected.
+ if (is_filtered) {
+ if (root && root->has_node(path)) {
+ Node *node = root->get_node(path);
+ if (!node) {
+ continue; // No node, no filter.
+ }
+ if (!EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
+ continue; // Skip track due to not selected.
+ }
}
}
- }
- for (int j = 0; j < key_count; ++j) {
- float offset = animation->track_get_key_time(i, j);
- float value = animation->bezier_track_get_key_value(i, j);
+ for (int j = 0; j < key_count; ++j) {
+ float offset = animation->track_get_key_time(i, j);
+ float value = animation->bezier_track_get_key_value(i, j);
- if (moving_selection && selection.has(IntPair(i, j))) {
- offset += moving_selection_offset.x;
- value += moving_selection_offset.y;
- }
+ if (moving_selection && selection.has(IntPair(i, j))) {
+ offset += moving_selection_offset.x;
+ value += moving_selection_offset.y;
+ }
- Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value));
+ Vector2 pos((offset - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value));
- Vector2 in_vec = animation->bezier_track_get_key_in_handle(i, j);
- if (moving_handle != 0 && moving_handle_track == i && moving_handle_key == j) {
- in_vec = moving_handle_left;
- }
- Vector2 pos_in(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
+ Vector2 in_vec = animation->bezier_track_get_key_in_handle(i, j);
+ if (moving_handle != 0 && moving_handle_track == i && moving_handle_key == j) {
+ in_vec = moving_handle_left;
+ }
+ Vector2 pos_in(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
- Vector2 out_vec = animation->bezier_track_get_key_out_handle(i, j);
+ Vector2 out_vec = animation->bezier_track_get_key_out_handle(i, j);
- if (moving_handle != 0 && moving_handle_track == i && moving_handle_key == j) {
- out_vec = moving_handle_right;
- }
+ if (moving_handle != 0 && moving_handle_track == i && moving_handle_key == j) {
+ out_vec = moving_handle_right;
+ }
- Vector2 pos_out(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
+ Vector2 pos_out(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
- if (i == selected_track || selection.has(IntPair(i, j))) {
- _draw_line_clipped(pos, pos_in, accent, limit, right_limit);
- _draw_line_clipped(pos, pos_out, accent, limit, right_limit);
- }
+ if (i == selected_track || selection.has(IntPair(i, j))) {
+ _draw_line_clipped(pos, pos_in, accent, limit, right_limit);
+ _draw_line_clipped(pos, pos_out, accent, limit, right_limit);
+ }
- EditPoint ep;
- ep.track = i;
- ep.key = j;
- if (pos.x >= limit && pos.x <= right_limit) {
- ep.point_rect.position = (pos - bezier_icon->get_size() / 2).floor();
- ep.point_rect.size = bezier_icon->get_size();
- if (selection.has(IntPair(i, j))) {
- draw_texture(selected_icon, ep.point_rect.position);
- draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height(font_size) - 8), TTR("Time:") + " " + TS->format_number(rtos(Math::snapped(offset, 0.001))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, accent);
- draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + TS->format_number(rtos(Math::snapped(value, 0.001))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, accent);
- } else {
- Color track_color = Color(1, 1, 1, 1);
- if (i != selected_track) {
- track_color = subtrack_colors[i];
+ EditPoint ep;
+ ep.track = i;
+ ep.key = j;
+ if (pos.x >= limit && pos.x <= right_limit) {
+ ep.point_rect.position = (pos - bezier_icon->get_size() / 2).floor();
+ ep.point_rect.size = bezier_icon->get_size();
+ if (selection.has(IntPair(i, j))) {
+ draw_texture(selected_icon, ep.point_rect.position);
+ draw_string(font, ep.point_rect.position + Vector2(8, -font->get_height(font_size) - 8), TTR("Time:") + " " + TS->format_number(rtos(Math::snapped(offset, 0.001))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, accent);
+ draw_string(font, ep.point_rect.position + Vector2(8, -8), TTR("Value:") + " " + TS->format_number(rtos(Math::snapped(value, 0.001))), HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, accent);
+ } else {
+ Color track_color = Color(1, 1, 1, 1);
+ if (i != selected_track) {
+ track_color = subtrack_colors[i];
+ }
+ draw_texture(bezier_icon, ep.point_rect.position, track_color);
}
- draw_texture(bezier_icon, ep.point_rect.position, track_color);
+ ep.point_rect = ep.point_rect.grow(ep.point_rect.size.width * 0.5);
}
- ep.point_rect = ep.point_rect.grow(ep.point_rect.size.width * 0.5);
- }
- if (i == selected_track || selection.has(IntPair(i, j))) {
- if (pos_in.x >= limit && pos_in.x <= right_limit) {
- ep.in_rect.position = (pos_in - bezier_handle_icon->get_size() / 2).floor();
- ep.in_rect.size = bezier_handle_icon->get_size();
- draw_texture(bezier_handle_icon, ep.in_rect.position);
- ep.in_rect = ep.in_rect.grow(ep.in_rect.size.width * 0.5);
+ if (i == selected_track || selection.has(IntPair(i, j))) {
+ if (pos_in.x >= limit && pos_in.x <= right_limit) {
+ ep.in_rect.position = (pos_in - bezier_handle_icon->get_size() / 2).floor();
+ ep.in_rect.size = bezier_handle_icon->get_size();
+ draw_texture(bezier_handle_icon, ep.in_rect.position);
+ ep.in_rect = ep.in_rect.grow(ep.in_rect.size.width * 0.5);
+ }
+ if (pos_out.x >= limit && pos_out.x <= right_limit) {
+ ep.out_rect.position = (pos_out - bezier_handle_icon->get_size() / 2).floor();
+ ep.out_rect.size = bezier_handle_icon->get_size();
+ draw_texture(bezier_handle_icon, ep.out_rect.position);
+ ep.out_rect = ep.out_rect.grow(ep.out_rect.size.width * 0.5);
+ }
}
- if (pos_out.x >= limit && pos_out.x <= right_limit) {
- ep.out_rect.position = (pos_out - bezier_handle_icon->get_size() / 2).floor();
- ep.out_rect.size = bezier_handle_icon->get_size();
- draw_texture(bezier_handle_icon, ep.out_rect.position);
- ep.out_rect = ep.out_rect.grow(ep.out_rect.size.width * 0.5);
+ if (!locked_tracks.has(i)) {
+ edit_points.push_back(ep);
}
}
- if (!locked_tracks.has(i)) {
- edit_points.push_back(ep);
- }
}
- }
- for (int i = 0; i < edit_points.size(); ++i) {
- if (edit_points[i].track == selected_track) {
- EditPoint ep = edit_points[i];
- edit_points.remove_at(i);
- edit_points.insert(0, ep);
+ for (int i = 0; i < edit_points.size(); ++i) {
+ if (edit_points[i].track == selected_track) {
+ EditPoint ep = edit_points[i];
+ edit_points.remove_at(i);
+ edit_points.insert(0, ep);
+ }
}
}
- }
- if (box_selecting) {
- Vector2 bs_from = box_selection_from;
- Vector2 bs_to = box_selection_to;
- if (bs_from.x > bs_to.x) {
- SWAP(bs_from.x, bs_to.x);
- }
- if (bs_from.y > bs_to.y) {
- SWAP(bs_from.y, bs_to.y);
+ if (box_selecting) {
+ Vector2 bs_from = box_selection_from;
+ Vector2 bs_to = box_selection_to;
+ if (bs_from.x > bs_to.x) {
+ SWAP(bs_from.x, bs_to.x);
+ }
+ if (bs_from.y > bs_to.y) {
+ SWAP(bs_from.y, bs_to.y);
+ }
+ draw_rect(
+ Rect2(bs_from, bs_to - bs_from),
+ get_theme_color(SNAME("box_selection_fill_color"), SNAME("Editor")));
+ draw_rect(
+ Rect2(bs_from, bs_to - bs_from),
+ get_theme_color(SNAME("box_selection_stroke_color"), SNAME("Editor")),
+ false,
+ Math::round(EDSCALE));
}
- draw_rect(
- Rect2(bs_from, bs_to - bs_from),
- get_theme_color(SNAME("box_selection_fill_color"), SNAME("Editor")));
- draw_rect(
- Rect2(bs_from, bs_to - bs_from),
- get_theme_color(SNAME("box_selection_stroke_color"), SNAME("Editor")),
- false,
- Math::round(EDSCALE));
- }
+ } break;
}
}
@@ -1281,10 +1289,6 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
// 3-move the keys (re insert them)
for (SelectionSet::Element *E = selection.back(); E; E = E->prev()) {
float newpos = editor->snap_time(animation->track_get_key_time(E->get().first, E->get().second) + moving_selection_offset.x);
- /*
- if (newpos<0)
- continue; //no add at the beginning
- */
Array key = animation->track_get_key_value(E->get().first, E->get().second);
float h = key[0];
h += moving_selection_offset.y;
@@ -1295,10 +1299,6 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
// 4-(undo) remove inserted keys
for (SelectionSet::Element *E = selection.back(); E; E = E->prev()) {
float newpos = editor->snap_time(animation->track_get_key_time(E->get().first, E->get().second) + moving_selection_offset.x);
- /*
- if (newpos<0)
- continue; //no remove what no inserted
- */
undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_time", E->get().first, newpos);
}
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp
index 113a2cb337..53f585d06b 100644
--- a/editor/animation_track_editor.cpp
+++ b/editor/animation_track_editor.cpp
@@ -1458,198 +1458,201 @@ int AnimationTimelineEdit::get_name_limit() const {
}
void AnimationTimelineEdit::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- }
-
- if (p_what == NOTIFICATION_ENTER_TREE) {
- add_track->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- loop->set_icon(get_theme_icon(SNAME("Loop"), SNAME("EditorIcons")));
- time_icon->set_texture(get_theme_icon(SNAME("Time"), SNAME("EditorIcons")));
-
- add_track->get_popup()->clear();
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons")), TTR("Property Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXPosition"), SNAME("EditorIcons")), TTR("3D Position Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXRotation"), SNAME("EditorIcons")), TTR("3D Rotation Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXScale"), SNAME("EditorIcons")), TTR("3D Scale Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyBlendShape"), SNAME("EditorIcons")), TTR("Blend Shape Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyCall"), SNAME("EditorIcons")), TTR("Call Method Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyBezier"), SNAME("EditorIcons")), TTR("Bezier Curve Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyAudio"), SNAME("EditorIcons")), TTR("Audio Playback Track"));
- add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyAnimation"), SNAME("EditorIcons")), TTR("Animation Playback Track"));
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ add_track->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ loop->set_icon(get_theme_icon(SNAME("Loop"), SNAME("EditorIcons")));
+ time_icon->set_texture(get_theme_icon(SNAME("Time"), SNAME("EditorIcons")));
+
+ add_track->get_popup()->clear();
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons")), TTR("Property Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXPosition"), SNAME("EditorIcons")), TTR("3D Position Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXRotation"), SNAME("EditorIcons")), TTR("3D Rotation Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyXScale"), SNAME("EditorIcons")), TTR("3D Scale Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyBlendShape"), SNAME("EditorIcons")), TTR("Blend Shape Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyCall"), SNAME("EditorIcons")), TTR("Call Method Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyBezier"), SNAME("EditorIcons")), TTR("Bezier Curve Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyAudio"), SNAME("EditorIcons")), TTR("Audio Playback Track"));
+ add_track->get_popup()->add_icon_item(get_theme_icon(SNAME("KeyAnimation"), SNAME("EditorIcons")), TTR("Animation Playback Track"));
+ } break;
- if (p_what == NOTIFICATION_RESIZED) {
- len_hb->set_position(Vector2(get_size().width - get_buttons_width(), 0));
- len_hb->set_size(Size2(get_buttons_width(), get_size().height));
- }
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ } break;
- if (p_what == NOTIFICATION_DRAW) {
- int key_range = get_size().width - get_buttons_width() - get_name_limit();
+ case NOTIFICATION_RESIZED: {
+ len_hb->set_position(Vector2(get_size().width - get_buttons_width(), 0));
+ len_hb->set_size(Size2(get_buttons_width(), get_size().height));
+ } break;
- if (!animation.is_valid()) {
- return;
- }
+ case NOTIFICATION_DRAW: {
+ int key_range = get_size().width - get_buttons_width() - get_name_limit();
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
- Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
+ if (!animation.is_valid()) {
+ return;
+ }
- int zoomw = key_range;
- float scale = get_zoom_scale();
- int h = get_size().height;
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
+ Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
- float l = animation->get_length();
- if (l <= 0) {
- l = 0.001; // Avoid crashor.
- }
+ int zoomw = key_range;
+ float scale = get_zoom_scale();
+ int h = get_size().height;
- Ref<Texture2D> hsize_icon = get_theme_icon(SNAME("Hsize"), SNAME("EditorIcons"));
- hsize_rect = Rect2(get_name_limit() - hsize_icon->get_width() - 2 * EDSCALE, (get_size().height - hsize_icon->get_height()) / 2, hsize_icon->get_width(), hsize_icon->get_height());
- draw_texture(hsize_icon, hsize_rect.position);
+ float l = animation->get_length();
+ if (l <= 0) {
+ l = 0.001; // Avoid crashor.
+ }
- {
- float time_min = 0;
- float time_max = animation->get_length();
- for (int i = 0; i < animation->get_track_count(); i++) {
- if (animation->track_get_key_count(i) > 0) {
- float beg = animation->track_get_key_time(i, 0);
+ Ref<Texture2D> hsize_icon = get_theme_icon(SNAME("Hsize"), SNAME("EditorIcons"));
+ hsize_rect = Rect2(get_name_limit() - hsize_icon->get_width() - 2 * EDSCALE, (get_size().height - hsize_icon->get_height()) / 2, hsize_icon->get_width(), hsize_icon->get_height());
+ draw_texture(hsize_icon, hsize_rect.position);
- if (beg < time_min) {
- time_min = beg;
- }
+ {
+ float time_min = 0;
+ float time_max = animation->get_length();
+ for (int i = 0; i < animation->get_track_count(); i++) {
+ if (animation->track_get_key_count(i) > 0) {
+ float beg = animation->track_get_key_time(i, 0);
+
+ if (beg < time_min) {
+ time_min = beg;
+ }
- float end = animation->track_get_key_time(i, animation->track_get_key_count(i) - 1);
+ float end = animation->track_get_key_time(i, animation->track_get_key_count(i) - 1);
- if (end > time_max) {
- time_max = end;
+ if (end > time_max) {
+ time_max = end;
+ }
}
}
- }
- float extra = (zoomw / scale) * 0.5;
+ float extra = (zoomw / scale) * 0.5;
- time_max += extra;
- set_min(time_min);
- set_max(time_max);
+ time_max += extra;
+ set_min(time_min);
+ set_max(time_max);
- if (zoomw / scale < (time_max - time_min)) {
- hscroll->show();
+ if (zoomw / scale < (time_max - time_min)) {
+ hscroll->show();
- } else {
- hscroll->hide();
+ } else {
+ hscroll->hide();
+ }
}
- }
- set_page(zoomw / scale);
+ set_page(zoomw / scale);
- int end_px = (l - get_value()) * scale;
- int begin_px = -get_value() * scale;
- Color notimecol = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
- Color timecolor = color;
- timecolor.a = 0.2;
- Color linecolor = color;
- linecolor.a = 0.2;
+ int end_px = (l - get_value()) * scale;
+ int begin_px = -get_value() * scale;
+ Color notimecol = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
+ Color timecolor = color;
+ timecolor.a = 0.2;
+ Color linecolor = color;
+ linecolor.a = 0.2;
- {
- draw_rect(Rect2(Point2(get_name_limit(), 0), Point2(zoomw - 1, h)), notimecol);
+ {
+ draw_rect(Rect2(Point2(get_name_limit(), 0), Point2(zoomw - 1, h)), notimecol);
- if (begin_px < zoomw && end_px > 0) {
- if (begin_px < 0) {
- begin_px = 0;
- }
- if (end_px > zoomw) {
- end_px = zoomw;
- }
+ if (begin_px < zoomw && end_px > 0) {
+ if (begin_px < 0) {
+ begin_px = 0;
+ }
+ if (end_px > zoomw) {
+ end_px = zoomw;
+ }
- draw_rect(Rect2(Point2(get_name_limit() + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor);
+ draw_rect(Rect2(Point2(get_name_limit() + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor);
+ }
}
- }
- Color color_time_sec = color;
- Color color_time_dec = color;
- color_time_dec.a *= 0.5;
+ Color color_time_sec = color;
+ Color color_time_dec = color;
+ color_time_dec.a *= 0.5;
#define SC_ADJ 100
- int min = 30;
- int dec = 1;
- int step = 1;
- int decimals = 2;
- bool step_found = false;
-
- const float period_width = font->get_char_size('.', 0, font_size).width;
- float max_digit_width = font->get_char_size('0', 0, font_size).width;
- for (int i = 1; i <= 9; i++) {
- const float digit_width = font->get_char_size('0' + i, 0, font_size).width;
- max_digit_width = MAX(digit_width, max_digit_width);
- }
- const int max_sc = int(Math::ceil(zoomw / scale));
- const int max_sc_width = String::num(max_sc).length() * max_digit_width;
-
- while (!step_found) {
- min = max_sc_width;
- if (decimals > 0) {
- min += period_width + max_digit_width * decimals;
+ int min = 30;
+ int dec = 1;
+ int step = 1;
+ int decimals = 2;
+ bool step_found = false;
+
+ const float period_width = font->get_char_size('.', 0, font_size).width;
+ float max_digit_width = font->get_char_size('0', 0, font_size).width;
+ for (int i = 1; i <= 9; i++) {
+ const float digit_width = font->get_char_size('0' + i, 0, font_size).width;
+ max_digit_width = MAX(digit_width, max_digit_width);
}
+ const int max_sc = int(Math::ceil(zoomw / scale));
+ const int max_sc_width = String::num(max_sc).length() * max_digit_width;
+
+ while (!step_found) {
+ min = max_sc_width;
+ if (decimals > 0) {
+ min += period_width + max_digit_width * decimals;
+ }
- static const int _multp[3] = { 1, 2, 5 };
- for (int i = 0; i < 3; i++) {
- step = (_multp[i] * dec);
- if (step * scale / SC_ADJ > min) {
- step_found = true;
+ static const int _multp[3] = { 1, 2, 5 };
+ for (int i = 0; i < 3; i++) {
+ step = (_multp[i] * dec);
+ if (step * scale / SC_ADJ > min) {
+ step_found = true;
+ break;
+ }
+ }
+ if (step_found) {
break;
}
+ dec *= 10;
+ decimals--;
+ if (decimals < 0) {
+ decimals = 0;
+ }
}
- if (step_found) {
- break;
- }
- dec *= 10;
- decimals--;
- if (decimals < 0) {
- decimals = 0;
- }
- }
- if (use_fps) {
- float step_size = animation->get_step();
- if (step_size > 0) {
- int prev_frame_ofs = -10000000;
+ if (use_fps) {
+ float step_size = animation->get_step();
+ if (step_size > 0) {
+ int prev_frame_ofs = -10000000;
- for (int i = 0; i < zoomw; i++) {
- float pos = get_value() + double(i) / scale;
- float prev = get_value() + (double(i) - 1.0) / scale;
+ for (int i = 0; i < zoomw; i++) {
+ float pos = get_value() + double(i) / scale;
+ float prev = get_value() + (double(i) - 1.0) / scale;
- int frame = pos / step_size;
- int prev_frame = prev / step_size;
+ int frame = pos / step_size;
+ int prev_frame = prev / step_size;
- bool sub = Math::floor(prev) == Math::floor(pos);
+ bool sub = Math::floor(prev) == Math::floor(pos);
- if (frame != prev_frame && i >= prev_frame_ofs) {
- draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE));
+ if (frame != prev_frame && i >= prev_frame_ofs) {
+ draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE));
- draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), itos(frame), HORIZONTAL_ALIGNMENT_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec);
- prev_frame_ofs = i + font->get_string_size(itos(frame), font_size).x + 5 * EDSCALE;
+ draw_string(font, Point2(get_name_limit() + i + 3 * EDSCALE, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), itos(frame), HORIZONTAL_ALIGNMENT_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec);
+ prev_frame_ofs = i + font->get_string_size(itos(frame), font_size).x + 5 * EDSCALE;
+ }
}
}
- }
- } else {
- for (int i = 0; i < zoomw; i++) {
- float pos = get_value() + double(i) / scale;
- float prev = get_value() + (double(i) - 1.0) / scale;
-
- int sc = int(Math::floor(pos * SC_ADJ));
- int prev_sc = int(Math::floor(prev * SC_ADJ));
- bool sub = (sc % SC_ADJ);
-
- if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) {
- int scd = sc < 0 ? prev_sc : sc;
- draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE));
- draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), HORIZONTAL_ALIGNMENT_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec);
+ } else {
+ for (int i = 0; i < zoomw; i++) {
+ float pos = get_value() + double(i) / scale;
+ float prev = get_value() + (double(i) - 1.0) / scale;
+
+ int sc = int(Math::floor(pos * SC_ADJ));
+ int prev_sc = int(Math::floor(prev * SC_ADJ));
+ bool sub = (sc % SC_ADJ);
+
+ if ((sc / step) != (prev_sc / step) || (prev_sc < 0 && sc >= 0)) {
+ int scd = sc < 0 ? prev_sc : sc;
+ draw_line(Point2(get_name_limit() + i, 0), Point2(get_name_limit() + i, h), linecolor, Math::round(EDSCALE));
+ draw_string(font, Point2(get_name_limit() + i + 3, (h - font->get_height(font_size)) / 2 + font->get_ascent(font_size)).floor(), String::num((scd - (scd % step)) / double(SC_ADJ), decimals), HORIZONTAL_ALIGNMENT_LEFT, zoomw - i, font_size, sub ? color_time_dec : color_time_sec);
+ }
}
}
- }
- draw_line(Vector2(0, get_size().height), get_size(), linecolor, Math::round(EDSCALE));
+ draw_line(Vector2(0, get_size().height), get_size(), linecolor, Math::round(EDSCALE));
+ } break;
}
}
@@ -1942,302 +1945,305 @@ AnimationTimelineEdit::AnimationTimelineEdit() {
////////////////////////////////////
void AnimationTrackEdit::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- if (animation.is_null()) {
- return;
- }
- ERR_FAIL_INDEX(track, animation->get_track_count());
-
- int limit = timeline->get_name_limit();
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ if (animation.is_null()) {
+ return;
+ }
+ ERR_FAIL_INDEX(track, animation->get_track_count());
- if (has_focus()) {
- Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- accent.a *= 0.7;
- // Offside so the horizontal sides aren't cutoff.
- draw_rect(Rect2(Point2(1 * EDSCALE, 0), get_size() - Size2(1 * EDSCALE, 0)), accent, false);
- }
+ int limit = timeline->get_name_limit();
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
- Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
- Ref<Texture2D> type_icons[9] = {
- get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyTrackPosition"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyTrackRotation"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyTrackScale"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyTrackBlendShape"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyCall"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyBezier"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyAudio"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("KeyAnimation"), SNAME("EditorIcons"))
- };
- int hsep = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
- Color linecolor = color;
- linecolor.a = 0.2;
+ if (has_focus()) {
+ Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ accent.a *= 0.7;
+ // Offside so the horizontal sides aren't cutoff.
+ draw_rect(Rect2(Point2(1 * EDSCALE, 0), get_size() - Size2(1 * EDSCALE, 0)), accent, false);
+ }
- // NAMES AND ICONS //
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
+ Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
+ Ref<Texture2D> type_icons[9] = {
+ get_theme_icon(SNAME("KeyValue"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyTrackPosition"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyTrackRotation"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyTrackScale"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyTrackBlendShape"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyCall"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyBezier"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyAudio"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("KeyAnimation"), SNAME("EditorIcons"))
+ };
+ int hsep = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
+ Color linecolor = color;
+ linecolor.a = 0.2;
- {
- Ref<Texture2D> check = animation->track_is_enabled(track) ? get_theme_icon(SNAME("checked"), SNAME("CheckBox")) : get_theme_icon(SNAME("unchecked"), SNAME("CheckBox"));
+ // NAMES AND ICONS //
- int ofs = in_group ? check->get_width() : 0; // Not the best reference for margin but..
+ {
+ Ref<Texture2D> check = animation->track_is_enabled(track) ? get_theme_icon(SNAME("checked"), SNAME("CheckBox")) : get_theme_icon(SNAME("unchecked"), SNAME("CheckBox"));
- check_rect = Rect2(Point2(ofs, int(get_size().height - check->get_height()) / 2), check->get_size());
- draw_texture(check, check_rect.position);
- ofs += check->get_width() + hsep;
+ int ofs = in_group ? check->get_width() : 0; // Not the best reference for margin but..
- Ref<Texture2D> type_icon = type_icons[animation->track_get_type(track)];
- draw_texture(type_icon, Point2(ofs, int(get_size().height - type_icon->get_height()) / 2));
- ofs += type_icon->get_width() + hsep;
+ check_rect = Rect2(Point2(ofs, int(get_size().height - check->get_height()) / 2), check->get_size());
+ draw_texture(check, check_rect.position);
+ ofs += check->get_width() + hsep;
- NodePath path = animation->track_get_path(track);
- Node *node = nullptr;
- if (root && root->has_node(path)) {
- node = root->get_node(path);
- }
+ Ref<Texture2D> type_icon = type_icons[animation->track_get_type(track)];
+ draw_texture(type_icon, Point2(ofs, int(get_size().height - type_icon->get_height()) / 2));
+ ofs += type_icon->get_width() + hsep;
- String text;
- Color text_color = color;
- if (node && EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
- text_color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- }
+ NodePath path = animation->track_get_path(track);
+ Node *node = nullptr;
+ if (root && root->has_node(path)) {
+ node = root->get_node(path);
+ }
- if (in_group) {
- if (animation->track_get_type(track) == Animation::TYPE_METHOD) {
- text = TTR("Functions:");
- } else if (animation->track_get_type(track) == Animation::TYPE_AUDIO) {
- text = TTR("Audio Clips:");
- } else if (animation->track_get_type(track) == Animation::TYPE_ANIMATION) {
- text = TTR("Anim Clips:");
- } else {
- text += path.get_concatenated_subnames();
+ String text;
+ Color text_color = color;
+ if (node && EditorNode::get_singleton()->get_editor_selection()->is_selected(node)) {
+ text_color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
}
- text_color.a *= 0.7;
- } else if (node) {
- Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node");
- draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2));
- icon_cache = icon;
+ if (in_group) {
+ if (animation->track_get_type(track) == Animation::TYPE_METHOD) {
+ text = TTR("Functions:");
+ } else if (animation->track_get_type(track) == Animation::TYPE_AUDIO) {
+ text = TTR("Audio Clips:");
+ } else if (animation->track_get_type(track) == Animation::TYPE_ANIMATION) {
+ text = TTR("Anim Clips:");
+ } else {
+ text += path.get_concatenated_subnames();
+ }
+ text_color.a *= 0.7;
+ } else if (node) {
+ Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(node, "Node");
- text = String() + node->get_name() + ":" + path.get_concatenated_subnames();
- ofs += hsep;
- ofs += icon->get_width();
+ draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2));
+ icon_cache = icon;
- } else {
- icon_cache = type_icon;
+ text = String() + node->get_name() + ":" + path.get_concatenated_subnames();
+ ofs += hsep;
+ ofs += icon->get_width();
- text = path;
- }
+ } else {
+ icon_cache = type_icon;
- path_cache = text;
+ text = path;
+ }
- path_rect = Rect2(ofs, 0, limit - ofs - hsep, get_size().height);
+ path_cache = text;
- Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size));
- string_pos = string_pos.floor();
- draw_string(font, string_pos, text, HORIZONTAL_ALIGNMENT_LEFT, limit - ofs - hsep, font_size, text_color);
+ path_rect = Rect2(ofs, 0, limit - ofs - hsep, get_size().height);
- draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE));
- }
+ Vector2 string_pos = Point2(ofs, (get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size));
+ string_pos = string_pos.floor();
+ draw_string(font, string_pos, text, HORIZONTAL_ALIGNMENT_LEFT, limit - ofs - hsep, font_size, text_color);
- // KEYFRAMES //
+ draw_line(Point2(limit, 0), Point2(limit, get_size().height), linecolor, Math::round(EDSCALE));
+ }
- draw_bg(limit, get_size().width - timeline->get_buttons_width());
+ // KEYFRAMES //
- {
- float scale = timeline->get_zoom_scale();
- int limit_end = get_size().width - timeline->get_buttons_width();
+ draw_bg(limit, get_size().width - timeline->get_buttons_width());
- for (int i = 0; i < animation->track_get_key_count(track); i++) {
- float offset = animation->track_get_key_time(track, i) - timeline->get_value();
- if (editor->is_key_selected(track, i) && editor->is_moving_selection()) {
- offset = editor->snap_time(offset + editor->get_moving_selection_offset(), true);
- }
- offset = offset * scale + limit;
- if (i < animation->track_get_key_count(track) - 1) {
- float offset_n = animation->track_get_key_time(track, i + 1) - timeline->get_value();
- if (editor->is_key_selected(track, i + 1) && editor->is_moving_selection()) {
- offset_n = editor->snap_time(offset_n + editor->get_moving_selection_offset());
+ {
+ float scale = timeline->get_zoom_scale();
+ int limit_end = get_size().width - timeline->get_buttons_width();
+
+ for (int i = 0; i < animation->track_get_key_count(track); i++) {
+ float offset = animation->track_get_key_time(track, i) - timeline->get_value();
+ if (editor->is_key_selected(track, i) && editor->is_moving_selection()) {
+ offset = editor->snap_time(offset + editor->get_moving_selection_offset(), true);
}
- offset_n = offset_n * scale + limit;
+ offset = offset * scale + limit;
+ if (i < animation->track_get_key_count(track) - 1) {
+ float offset_n = animation->track_get_key_time(track, i + 1) - timeline->get_value();
+ if (editor->is_key_selected(track, i + 1) && editor->is_moving_selection()) {
+ offset_n = editor->snap_time(offset_n + editor->get_moving_selection_offset());
+ }
+ offset_n = offset_n * scale + limit;
- draw_key_link(i, scale, int(offset), int(offset_n), limit, limit_end);
- }
+ draw_key_link(i, scale, int(offset), int(offset_n), limit, limit_end);
+ }
- draw_key(i, scale, int(offset), editor->is_key_selected(track, i), limit, limit_end);
+ draw_key(i, scale, int(offset), editor->is_key_selected(track, i), limit, limit_end);
+ }
}
- }
- draw_fg(limit, get_size().width - timeline->get_buttons_width());
+ draw_fg(limit, get_size().width - timeline->get_buttons_width());
- // BUTTONS //
+ // BUTTONS //
- {
- Ref<Texture2D> wrap_icon[2] = {
- get_theme_icon(SNAME("InterpWrapClamp"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("InterpWrapLoop"), SNAME("EditorIcons")),
- };
+ {
+ Ref<Texture2D> wrap_icon[2] = {
+ get_theme_icon(SNAME("InterpWrapClamp"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("InterpWrapLoop"), SNAME("EditorIcons")),
+ };
- Ref<Texture2D> interp_icon[3] = {
- get_theme_icon(SNAME("InterpRaw"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("InterpLinear"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("InterpCubic"), SNAME("EditorIcons"))
- };
- Ref<Texture2D> cont_icon[4] = {
- get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("TrackTrigger"), SNAME("EditorIcons")),
- get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons"))
- };
+ Ref<Texture2D> interp_icon[3] = {
+ get_theme_icon(SNAME("InterpRaw"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("InterpLinear"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("InterpCubic"), SNAME("EditorIcons"))
+ };
+ Ref<Texture2D> cont_icon[4] = {
+ get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("TrackTrigger"), SNAME("EditorIcons")),
+ get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons"))
+ };
- int ofs = get_size().width - timeline->get_buttons_width();
+ int ofs = get_size().width - timeline->get_buttons_width();
- Ref<Texture2D> down_icon = get_theme_icon(SNAME("select_arrow"), SNAME("Tree"));
+ Ref<Texture2D> down_icon = get_theme_icon(SNAME("select_arrow"), SNAME("Tree"));
- draw_line(Point2(ofs, 0), Point2(ofs, get_size().height), linecolor, Math::round(EDSCALE));
+ draw_line(Point2(ofs, 0), Point2(ofs, get_size().height), linecolor, Math::round(EDSCALE));
- ofs += hsep;
- {
- // Callmode.
+ ofs += hsep;
+ {
+ // Callmode.
- Animation::UpdateMode update_mode;
+ Animation::UpdateMode update_mode;
- if (animation->track_get_type(track) == Animation::TYPE_VALUE) {
- update_mode = animation->value_track_get_update_mode(track);
- } else {
- update_mode = Animation::UPDATE_CONTINUOUS;
- }
+ if (animation->track_get_type(track) == Animation::TYPE_VALUE) {
+ update_mode = animation->value_track_get_update_mode(track);
+ } else {
+ update_mode = Animation::UPDATE_CONTINUOUS;
+ }
- Ref<Texture2D> update_icon = cont_icon[update_mode];
+ Ref<Texture2D> update_icon = cont_icon[update_mode];
- update_mode_rect.position.x = ofs;
- update_mode_rect.position.y = int(get_size().height - update_icon->get_height()) / 2;
- update_mode_rect.size = update_icon->get_size();
+ update_mode_rect.position.x = ofs;
+ update_mode_rect.position.y = int(get_size().height - update_icon->get_height()) / 2;
+ update_mode_rect.size = update_icon->get_size();
- if (!animation->track_is_compressed(track) && animation->track_get_type(track) == Animation::TYPE_VALUE) {
- draw_texture(update_icon, update_mode_rect.position);
- }
- // Make it easier to click.
- update_mode_rect.position.y = 0;
- update_mode_rect.size.y = get_size().height;
+ if (!animation->track_is_compressed(track) && animation->track_get_type(track) == Animation::TYPE_VALUE) {
+ draw_texture(update_icon, update_mode_rect.position);
+ }
+ // Make it easier to click.
+ update_mode_rect.position.y = 0;
+ update_mode_rect.size.y = get_size().height;
- ofs += update_icon->get_width() + hsep / 2;
- update_mode_rect.size.x += hsep / 2;
+ ofs += update_icon->get_width() + hsep / 2;
+ update_mode_rect.size.x += hsep / 2;
- if (animation->track_get_type(track) == Animation::TYPE_VALUE) {
- draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
- update_mode_rect.size.x += down_icon->get_width();
- } else if (animation->track_get_type(track) == Animation::TYPE_BEZIER) {
- Ref<Texture2D> bezier_icon = get_theme_icon(SNAME("EditBezier"), SNAME("EditorIcons"));
- update_mode_rect.size.x += down_icon->get_width();
+ if (animation->track_get_type(track) == Animation::TYPE_VALUE) {
+ draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
+ update_mode_rect.size.x += down_icon->get_width();
+ } else if (animation->track_get_type(track) == Animation::TYPE_BEZIER) {
+ Ref<Texture2D> bezier_icon = get_theme_icon(SNAME("EditBezier"), SNAME("EditorIcons"));
+ update_mode_rect.size.x += down_icon->get_width();
- update_mode_rect = Rect2();
- } else {
- update_mode_rect = Rect2();
+ update_mode_rect = Rect2();
+ } else {
+ update_mode_rect = Rect2();
+ }
+
+ ofs += down_icon->get_width();
+ draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
+ ofs += hsep;
}
- ofs += down_icon->get_width();
- draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
- ofs += hsep;
- }
+ {
+ // Interp.
- {
- // Interp.
+ Animation::InterpolationType interp_mode = animation->track_get_interpolation_type(track);
- Animation::InterpolationType interp_mode = animation->track_get_interpolation_type(track);
+ Ref<Texture2D> icon = interp_icon[interp_mode];
- Ref<Texture2D> icon = interp_icon[interp_mode];
+ interp_mode_rect.position.x = ofs;
+ interp_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2;
+ interp_mode_rect.size = icon->get_size();
- interp_mode_rect.position.x = ofs;
- interp_mode_rect.position.y = int(get_size().height - icon->get_height()) / 2;
- interp_mode_rect.size = icon->get_size();
+ if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
+ draw_texture(icon, interp_mode_rect.position);
+ }
+ // Make it easier to click.
+ interp_mode_rect.position.y = 0;
+ interp_mode_rect.size.y = get_size().height;
- if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
- draw_texture(icon, interp_mode_rect.position);
- }
- // Make it easier to click.
- interp_mode_rect.position.y = 0;
- interp_mode_rect.size.y = get_size().height;
+ ofs += icon->get_width() + hsep / 2;
+ interp_mode_rect.size.x += hsep / 2;
- ofs += icon->get_width() + hsep / 2;
- interp_mode_rect.size.x += hsep / 2;
+ if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
+ draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
+ interp_mode_rect.size.x += down_icon->get_width();
+ } else {
+ interp_mode_rect = Rect2();
+ }
- if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
- draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
- interp_mode_rect.size.x += down_icon->get_width();
- } else {
- interp_mode_rect = Rect2();
+ ofs += down_icon->get_width();
+ draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
+ ofs += hsep;
}
- ofs += down_icon->get_width();
- draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
- ofs += hsep;
- }
+ {
+ // Loop.
- {
- // Loop.
+ bool loop_wrap = animation->track_get_interpolation_loop_wrap(track);
- bool loop_wrap = animation->track_get_interpolation_loop_wrap(track);
+ Ref<Texture2D> icon = wrap_icon[loop_wrap ? 1 : 0];
- Ref<Texture2D> icon = wrap_icon[loop_wrap ? 1 : 0];
+ loop_wrap_rect.position.x = ofs;
+ loop_wrap_rect.position.y = int(get_size().height - icon->get_height()) / 2;
+ loop_wrap_rect.size = icon->get_size();
- loop_wrap_rect.position.x = ofs;
- loop_wrap_rect.position.y = int(get_size().height - icon->get_height()) / 2;
- loop_wrap_rect.size = icon->get_size();
+ if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
+ draw_texture(icon, loop_wrap_rect.position);
+ }
- if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
- draw_texture(icon, loop_wrap_rect.position);
- }
+ loop_wrap_rect.position.y = 0;
+ loop_wrap_rect.size.y = get_size().height;
- loop_wrap_rect.position.y = 0;
- loop_wrap_rect.size.y = get_size().height;
+ ofs += icon->get_width() + hsep / 2;
+ loop_wrap_rect.size.x += hsep / 2;
- ofs += icon->get_width() + hsep / 2;
- loop_wrap_rect.size.x += hsep / 2;
+ if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
+ draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
+ loop_wrap_rect.size.x += down_icon->get_width();
+ } else {
+ loop_wrap_rect = Rect2();
+ }
- if (!animation->track_is_compressed(track) && (animation->track_get_type(track) == Animation::TYPE_VALUE || animation->track_get_type(track) == Animation::TYPE_BLEND_SHAPE || animation->track_get_type(track) == Animation::TYPE_POSITION_3D || animation->track_get_type(track) == Animation::TYPE_SCALE_3D || animation->track_get_type(track) == Animation::TYPE_ROTATION_3D)) {
- draw_texture(down_icon, Vector2(ofs, int(get_size().height - down_icon->get_height()) / 2));
- loop_wrap_rect.size.x += down_icon->get_width();
- } else {
- loop_wrap_rect = Rect2();
+ ofs += down_icon->get_width();
+ draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
+ ofs += hsep;
}
- ofs += down_icon->get_width();
- draw_line(Point2(ofs + hsep * 0.5, 0), Point2(ofs + hsep * 0.5, get_size().height), linecolor, Math::round(EDSCALE));
- ofs += hsep;
- }
-
- {
- // Erase.
+ {
+ // Erase.
- Ref<Texture2D> icon = get_theme_icon(animation->track_is_compressed(track) ? SNAME("Lock") : SNAME("Remove"), SNAME("EditorIcons"));
+ Ref<Texture2D> icon = get_theme_icon(animation->track_is_compressed(track) ? SNAME("Lock") : SNAME("Remove"), SNAME("EditorIcons"));
- remove_rect.position.x = ofs + ((get_size().width - ofs) - icon->get_width());
- remove_rect.position.y = int(get_size().height - icon->get_height()) / 2;
- remove_rect.size = icon->get_size();
+ remove_rect.position.x = ofs + ((get_size().width - ofs) - icon->get_width());
+ remove_rect.position.y = int(get_size().height - icon->get_height()) / 2;
+ remove_rect.size = icon->get_size();
- draw_texture(icon, remove_rect.position);
+ draw_texture(icon, remove_rect.position);
+ }
}
- }
-
- if (in_group) {
- draw_line(Vector2(timeline->get_name_limit(), get_size().height), get_size(), linecolor, Math::round(EDSCALE));
- } else {
- draw_line(Vector2(0, get_size().height), get_size(), linecolor, Math::round(EDSCALE));
- }
- if (dropping_at != 0) {
- Color drop_color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- if (dropping_at < 0) {
- draw_line(Vector2(0, 0), Vector2(get_size().width, 0), drop_color, Math::round(EDSCALE));
+ if (in_group) {
+ draw_line(Vector2(timeline->get_name_limit(), get_size().height), get_size(), linecolor, Math::round(EDSCALE));
} else {
- draw_line(Vector2(0, get_size().height), get_size(), drop_color, Math::round(EDSCALE));
+ draw_line(Vector2(0, get_size().height), get_size(), linecolor, Math::round(EDSCALE));
}
- }
- }
- if (p_what == NOTIFICATION_MOUSE_EXIT || p_what == NOTIFICATION_DRAG_END) {
- cancel_drop();
+ if (dropping_at != 0) {
+ Color drop_color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ if (dropping_at < 0) {
+ draw_line(Vector2(0, 0), Vector2(get_size().width, 0), drop_color, Math::round(EDSCALE));
+ } else {
+ draw_line(Vector2(0, get_size().height), get_size(), drop_color, Math::round(EDSCALE));
+ }
+ }
+ } break;
+
+ case NOTIFICATION_MOUSE_EXIT:
+ case NOTIFICATION_DRAG_END: {
+ cancel_drop();
+ } break;
}
}
@@ -3205,40 +3211,42 @@ AnimationTrackEdit *AnimationTrackEditPlugin::create_animation_track_edit(Object
///////////////////////////////////////
void AnimationTrackEditGroup::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
- int separation = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
- Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
-
- if (root && root->has_node(node)) {
- Node *n = root->get_node(node);
- if (n && EditorNode::get_singleton()->get_editor_selection()->is_selected(n)) {
- color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
+ int separation = get_theme_constant(SNAME("hseparation"), SNAME("ItemList"));
+ Color color = get_theme_color(SNAME("font_color"), SNAME("Label"));
+
+ if (root && root->has_node(node)) {
+ Node *n = root->get_node(node);
+ if (n && EditorNode::get_singleton()->get_editor_selection()->is_selected(n)) {
+ color = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ }
}
- }
- Color bgcol = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
- bgcol.a *= 0.6;
- draw_rect(Rect2(Point2(), get_size()), bgcol);
- Color linecolor = color;
- linecolor.a = 0.2;
+ Color bgcol = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
+ bgcol.a *= 0.6;
+ draw_rect(Rect2(Point2(), get_size()), bgcol);
+ Color linecolor = color;
+ linecolor.a = 0.2;
- draw_line(Point2(), Point2(get_size().width, 0), linecolor, Math::round(EDSCALE));
- draw_line(Point2(timeline->get_name_limit(), 0), Point2(timeline->get_name_limit(), get_size().height), linecolor, Math::round(EDSCALE));
- draw_line(Point2(get_size().width - timeline->get_buttons_width(), 0), Point2(get_size().width - timeline->get_buttons_width(), get_size().height), linecolor, Math::round(EDSCALE));
+ draw_line(Point2(), Point2(get_size().width, 0), linecolor, Math::round(EDSCALE));
+ draw_line(Point2(timeline->get_name_limit(), 0), Point2(timeline->get_name_limit(), get_size().height), linecolor, Math::round(EDSCALE));
+ draw_line(Point2(get_size().width - timeline->get_buttons_width(), 0), Point2(get_size().width - timeline->get_buttons_width(), get_size().height), linecolor, Math::round(EDSCALE));
- int ofs = 0;
- draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2));
- ofs += separation + icon->get_width();
- draw_string(font, Point2(ofs, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), node_name, HORIZONTAL_ALIGNMENT_LEFT, timeline->get_name_limit() - ofs, font_size, color);
+ int ofs = 0;
+ draw_texture(icon, Point2(ofs, int(get_size().height - icon->get_height()) / 2));
+ ofs += separation + icon->get_width();
+ draw_string(font, Point2(ofs, int(get_size().height - font->get_height(font_size)) / 2 + font->get_ascent(font_size)), node_name, HORIZONTAL_ALIGNMENT_LEFT, timeline->get_name_limit() - ofs, font_size, color);
- int px = (-timeline->get_value() + timeline->get_play_position()) * timeline->get_zoom_scale() + timeline->get_name_limit();
+ int px = (-timeline->get_value() + timeline->get_play_position()) * timeline->get_zoom_scale() + timeline->get_name_limit();
- if (px >= timeline->get_name_limit() && px < (get_size().width - timeline->get_buttons_width())) {
- Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
- draw_line(Point2(px, 0), Point2(px, get_size().height), accent, Math::round(2 * EDSCALE));
- }
+ if (px >= timeline->get_name_limit() && px < (get_size().width - timeline->get_buttons_width())) {
+ Color accent = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+ draw_line(Point2(px, 0), Point2(px, get_size().height), accent, Math::round(2 * EDSCALE));
+ }
+ } break;
}
}
@@ -4516,27 +4524,33 @@ MenuButton *AnimationTrackEditor::get_edit_menu() {
}
void AnimationTrackEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- }
+ switch (p_what) {
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ } break;
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- zoom_icon->set_texture(get_theme_icon(SNAME("Zoom"), SNAME("EditorIcons")));
- bezier_edit_icon->set_icon(get_theme_icon(SNAME("EditBezier"), SNAME("EditorIcons")));
- snap->set_icon(get_theme_icon(SNAME("Snap"), SNAME("EditorIcons")));
- view_group->set_icon(get_theme_icon(view_group->is_pressed() ? SNAME("AnimationTrackList") : SNAME("AnimationTrackGroup"), SNAME("EditorIcons")));
- selected_filter->set_icon(get_theme_icon(SNAME("AnimationFilter"), SNAME("EditorIcons")));
- imported_anim_warning->set_icon(get_theme_icon(SNAME("NodeWarning"), SNAME("EditorIcons")));
- main_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- edit->get_popup()->set_item_icon(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")));
- }
+ case NOTIFICATION_ENTER_TREE: {
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/animation_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ [[fallthrough]];
+ }
+ case NOTIFICATION_THEME_CHANGED: {
+ zoom_icon->set_texture(get_theme_icon(SNAME("Zoom"), SNAME("EditorIcons")));
+ bezier_edit_icon->set_icon(get_theme_icon(SNAME("EditBezier"), SNAME("EditorIcons")));
+ snap->set_icon(get_theme_icon(SNAME("Snap"), SNAME("EditorIcons")));
+ view_group->set_icon(get_theme_icon(view_group->is_pressed() ? SNAME("AnimationTrackList") : SNAME("AnimationTrackGroup"), SNAME("EditorIcons")));
+ selected_filter->set_icon(get_theme_icon(SNAME("AnimationFilter"), SNAME("EditorIcons")));
+ imported_anim_warning->set_icon(get_theme_icon(SNAME("NodeWarning"), SNAME("EditorIcons")));
+ main_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ edit->get_popup()->set_item_icon(edit->get_popup()->get_item_index(EDIT_APPLY_RESET), get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")));
+ } break;
- if (p_what == NOTIFICATION_READY) {
- EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", callable_mp(this, &AnimationTrackEditor::_selection_changed));
- }
+ case NOTIFICATION_READY: {
+ EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", callable_mp(this, &AnimationTrackEditor::_selection_changed));
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- update_keying();
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ update_keying();
+ } break;
}
}
diff --git a/editor/audio_stream_preview.cpp b/editor/audio_stream_preview.cpp
index 81a6f78415..f8bf12227a 100644
--- a/editor/audio_stream_preview.cpp
+++ b/editor/audio_stream_preview.cpp
@@ -214,25 +214,27 @@ void AudioStreamPreviewGenerator::_bind_methods() {
AudioStreamPreviewGenerator *AudioStreamPreviewGenerator::singleton = nullptr;
void AudioStreamPreviewGenerator::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- List<ObjectID> to_erase;
- for (KeyValue<ObjectID, Preview> &E : previews) {
- if (!E.value.generating.is_set()) {
- if (E.value.thread) {
- E.value.thread->wait_to_finish();
- memdelete(E.value.thread);
- E.value.thread = nullptr;
- }
- if (!ObjectDB::get_instance(E.key)) { //no longer in use, get rid of preview
- to_erase.push_back(E.key);
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ List<ObjectID> to_erase;
+ for (KeyValue<ObjectID, Preview> &E : previews) {
+ if (!E.value.generating.is_set()) {
+ if (E.value.thread) {
+ E.value.thread->wait_to_finish();
+ memdelete(E.value.thread);
+ E.value.thread = nullptr;
+ }
+ if (!ObjectDB::get_instance(E.key)) { //no longer in use, get rid of preview
+ to_erase.push_back(E.key);
+ }
}
}
- }
- while (to_erase.front()) {
- previews.erase(to_erase.front()->get());
- to_erase.pop_front();
- }
+ while (to_erase.front()) {
+ previews.erase(to_erase.front()->get());
+ to_erase.pop_front();
+ }
+ } break;
}
}
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 56dcd35c64..22d3155159 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -85,29 +85,31 @@ GotoLineDialog::GotoLineDialog() {
}
void FindReplaceBar::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- find_prev->set_icon(get_theme_icon(SNAME("MoveUp"), SNAME("EditorIcons")));
- find_next->set_icon(get_theme_icon(SNAME("MoveDown"), SNAME("EditorIcons")));
- hide_button->set_normal_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_hover_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_pressed_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_custom_minimum_size(hide_button->get_normal_texture()->get_size());
- } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- set_process_unhandled_input(is_visible_in_tree());
- } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- find_prev->set_icon(get_theme_icon(SNAME("MoveUp"), SNAME("EditorIcons")));
- find_next->set_icon(get_theme_icon(SNAME("MoveDown"), SNAME("EditorIcons")));
- hide_button->set_normal_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_hover_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_pressed_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
- hide_button->set_custom_minimum_size(hide_button->get_normal_texture()->get_size());
- } else if (p_what == NOTIFICATION_THEME_CHANGED) {
- matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), SNAME("Editor")));
- } else if (p_what == NOTIFICATION_PREDELETE) {
- if (base_text_editor) {
- base_text_editor->remove_find_replace_bar();
- base_text_editor = nullptr;
- }
+ switch (p_what) {
+ case NOTIFICATION_READY:
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ find_prev->set_icon(get_theme_icon(SNAME("MoveUp"), SNAME("EditorIcons")));
+ find_next->set_icon(get_theme_icon(SNAME("MoveDown"), SNAME("EditorIcons")));
+ hide_button->set_normal_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
+ hide_button->set_hover_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
+ hide_button->set_pressed_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons")));
+ hide_button->set_custom_minimum_size(hide_button->get_normal_texture()->get_size());
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ set_process_unhandled_input(is_visible_in_tree());
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED: {
+ matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ } break;
+
+ case NOTIFICATION_PREDELETE: {
+ if (base_text_editor) {
+ base_text_editor->remove_find_replace_bar();
+ base_text_editor = nullptr;
+ }
+ } break;
}
}
@@ -1658,44 +1660,47 @@ void CodeTextEditor::_error_pressed(const Ref<InputEvent> &p_event) {
}
}
-void CodeTextEditor::_notification(int p_what) {
- switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED: {
- error_button->set_icon(get_theme_icon(SNAME("StatusError"), SNAME("EditorIcons")));
- error_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- error_button->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
- error_button->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
+void CodeTextEditor::_update_status_bar_theme() {
+ error_button->set_icon(get_theme_icon(SNAME("StatusError"), SNAME("EditorIcons")));
+ error_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ error_button->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
+ error_button->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
- warning_button->set_icon(get_theme_icon(SNAME("NodeWarning"), SNAME("EditorIcons")));
- warning_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
- warning_button->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
- warning_button->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
+ warning_button->set_icon(get_theme_icon(SNAME("NodeWarning"), SNAME("EditorIcons")));
+ warning_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ warning_button->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
+ warning_button->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
- line_and_col_txt->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
- line_and_col_txt->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
+ line_and_col_txt->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
+ line_and_col_txt->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
+}
- if (p_what == NOTIFICATION_ENTER_TREE) {
- break;
- }
+void CodeTextEditor::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ _update_status_bar_theme();
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED: {
+ _update_status_bar_theme();
if (toggle_scripts_button->is_visible()) {
update_toggle_scripts_button();
}
_update_text_editor_theme();
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
if (toggle_scripts_button->is_visible()) {
update_toggle_scripts_button();
}
set_process_input(is_visible_in_tree());
} break;
+
case NOTIFICATION_PREDELETE: {
if (find_replace_bar) {
find_replace_bar->set_text_edit(nullptr);
}
} break;
- default:
- break;
}
}
diff --git a/editor/code_editor.h b/editor/code_editor.h
index aebdfe57c0..24316bf8b0 100644
--- a/editor/code_editor.h
+++ b/editor/code_editor.h
@@ -189,6 +189,8 @@ class CodeTextEditor : public VBoxContainer {
void _set_show_warnings_panel(bool p_show);
void _error_pressed(const Ref<InputEvent> &p_event);
+ void _update_status_bar_theme();
+
void _delete_line(int p_line);
void _toggle_scripts_pressed();
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index d4785afcf0..df2a66f182 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -277,8 +277,10 @@ void ConnectDialog::_update_ok_enabled() {
}
void ConnectDialog::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- bind_editor->edit(cdbinds);
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ bind_editor->edit(cdbinds);
+ } break;
}
}
@@ -938,6 +940,7 @@ void ConnectionsDock::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
search_box->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
update_tree();
} break;
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp
index c0c7b68686..7e59fc31c4 100644
--- a/editor/create_dialog.cpp
+++ b/editor/create_dialog.cpp
@@ -235,19 +235,19 @@ void CreateDialog::_add_type(const String &p_type, const TypeCategory p_type_cat
}
} else {
if (ScriptServer::is_global_class(p_type)) {
- inherits = EditorNode::get_editor_data().script_class_get_base(p_type);
- if (inherits.is_empty()) {
- Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(p_type);
- ERR_FAIL_COND(script.is_null());
+ Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(p_type);
+ ERR_FAIL_COND(script.is_null());
- Ref<Script> base = script->get_base_script();
- if (base.is_null()) {
- String extends;
- script->get_language()->get_global_class_name(script->get_path(), &extends);
+ Ref<Script> base = script->get_base_script();
+ if (base.is_null()) {
+ String extends;
+ script->get_language()->get_global_class_name(script->get_path(), &extends);
- inherits = extends;
- inherited_type = TypeCategory::CPP_TYPE;
- } else {
+ inherits = extends;
+ inherited_type = TypeCategory::CPP_TYPE;
+ } else {
+ inherits = script->get_language()->get_global_class_name(base->get_path());
+ if (inherits.is_empty()) {
inherits = base->get_path();
inherited_type = TypeCategory::PATH_TYPE;
}
@@ -429,9 +429,11 @@ void CreateDialog::_notification(int p_what) {
connect("confirmed", callable_mp(this, &CreateDialog::_confirmed));
_update_theme();
} break;
+
case NOTIFICATION_EXIT_TREE: {
disconnect("confirmed", callable_mp(this, &CreateDialog::_confirmed));
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
if (is_visible()) {
search_box->call_deferred(SNAME("grab_focus")); // still not visible
@@ -440,6 +442,7 @@ void CreateDialog::_notification(int p_what) {
EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", Rect2(get_position(), get_size()));
}
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
} break;
diff --git a/editor/debugger/debug_adapter/debug_adapter_server.cpp b/editor/debugger/debug_adapter/debug_adapter_server.cpp
index ffbbf66015..e9fc7ec913 100644
--- a/editor/debugger/debug_adapter/debug_adapter_server.cpp
+++ b/editor/debugger/debug_adapter/debug_adapter_server.cpp
@@ -42,12 +42,14 @@ DebugAdapterServer::DebugAdapterServer() {
void DebugAdapterServer::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_ENTER_TREE: {
start();
- break;
- case NOTIFICATION_EXIT_TREE:
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
stop();
- break;
+ } break;
+
case NOTIFICATION_INTERNAL_PROCESS: {
// The main loop can be run again during request processing, which modifies internal state of the protocol.
// Thus, "polling" is needed to prevent it from parsing other requests while the current one isn't finished.
@@ -57,6 +59,7 @@ void DebugAdapterServer::_notification(int p_what) {
polling = false;
}
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
protocol._request_timeout = EditorSettings::get_singleton()->get("network/debug_adapter/request_timeout");
protocol._sync_breakpoints = EditorSettings::get_singleton()->get("network/debug_adapter/sync_breakpoints");
diff --git a/editor/debugger/editor_debugger_inspector.cpp b/editor/debugger/editor_debugger_inspector.cpp
index ad782c87cb..c111190ca3 100644
--- a/editor/debugger/editor_debugger_inspector.cpp
+++ b/editor/debugger/editor_debugger_inspector.cpp
@@ -107,14 +107,13 @@ void EditorDebuggerInspector::_bind_methods() {
void EditorDebuggerInspector::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_POSTINITIALIZE:
+ case NOTIFICATION_POSTINITIALIZE: {
connect("object_id_selected", callable_mp(this, &EditorDebuggerInspector::_object_selected));
- break;
- case NOTIFICATION_ENTER_TREE:
+ } break;
+
+ case NOTIFICATION_ENTER_TREE: {
edit(variables);
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp
index 26032a9d32..7c9a984b6a 100644
--- a/editor/debugger/editor_debugger_node.cpp
+++ b/editor/debugger/editor_debugger_node.cpp
@@ -240,112 +240,113 @@ void EditorDebuggerNode::_notification(int p_what) {
tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles")));
}
} break;
+
case NOTIFICATION_READY: {
_update_debug_options();
} break;
- default:
- break;
- }
-
- if (p_what != NOTIFICATION_PROCESS || !server.is_valid()) {
- return;
- }
-
- if (!server.is_valid() || !server->is_active()) {
- stop();
- return;
- }
- server->poll();
-
- // Errors and warnings
- int error_count = 0;
- int warning_count = 0;
- _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
- error_count += dbg->get_error_count();
- warning_count += dbg->get_warning_count();
- });
- if (error_count != last_error_count || warning_count != last_warning_count) {
- _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
- dbg->update_tabs();
- });
-
- if (error_count == 0 && warning_count == 0) {
- debugger_button->set_text(TTR("Debugger"));
- debugger_button->remove_theme_color_override("font_color");
- debugger_button->set_icon(Ref<Texture2D>());
- } else {
- debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")");
- if (error_count >= 1 && warning_count >= 1) {
- debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons")));
- // Use error color to represent the highest level of severity reported.
- debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- } else if (error_count >= 1) {
- debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons")));
- debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- } else {
- debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons")));
- debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ case NOTIFICATION_PROCESS: {
+ if (!server.is_valid()) {
+ return;
}
- }
- last_error_count = error_count;
- last_warning_count = warning_count;
- }
- // Remote scene tree update
- remote_scene_tree_timeout -= get_process_delta_time();
- if (remote_scene_tree_timeout < 0) {
- remote_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval");
- if (remote_scene_tree->is_visible_in_tree()) {
- get_current_debugger()->request_remote_tree();
- }
- }
-
- // Remote inspector update
- inspect_edited_object_timeout -= get_process_delta_time();
- if (inspect_edited_object_timeout < 0) {
- inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval");
- if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) {
- get_current_debugger()->request_remote_object(obj->remote_object_id);
- }
- }
-
- // Take connections.
- if (server->is_connection_available()) {
- ScriptEditorDebugger *debugger = nullptr;
- _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
- if (debugger || dbg->is_session_active()) {
+ if (!server->is_active()) {
+ stop();
return;
}
- debugger = dbg;
- });
- if (debugger == nullptr) {
- if (tabs->get_tab_count() <= 4) { // Max 4 debugging sessions active.
- debugger = _add_debugger();
- } else {
- // We already have too many sessions, disconnecting new clients to prevent them from hanging.
- server->take_connection()->close();
- return; // Can't add, stop here.
+ server->poll();
+
+ // Errors and warnings
+ int error_count = 0;
+ int warning_count = 0;
+ _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
+ error_count += dbg->get_error_count();
+ warning_count += dbg->get_warning_count();
+ });
+
+ if (error_count != last_error_count || warning_count != last_warning_count) {
+ _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
+ dbg->update_tabs();
+ });
+
+ if (error_count == 0 && warning_count == 0) {
+ debugger_button->set_text(TTR("Debugger"));
+ debugger_button->remove_theme_color_override("font_color");
+ debugger_button->set_icon(Ref<Texture2D>());
+ } else {
+ debugger_button->set_text(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")");
+ if (error_count >= 1 && warning_count >= 1) {
+ debugger_button->set_icon(get_theme_icon(SNAME("ErrorWarning"), SNAME("EditorIcons")));
+ // Use error color to represent the highest level of severity reported.
+ debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ } else if (error_count >= 1) {
+ debugger_button->set_icon(get_theme_icon(SNAME("Error"), SNAME("EditorIcons")));
+ debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ } else {
+ debugger_button->set_icon(get_theme_icon(SNAME("Warning"), SNAME("EditorIcons")));
+ debugger_button->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ }
+ }
+ last_error_count = error_count;
+ last_warning_count = warning_count;
}
- }
- EditorNode::get_singleton()->get_pause_button()->set_disabled(false);
- // Switch to remote tree view if so desired.
- auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree");
- if (auto_switch_remote_scene_tree) {
- SceneTreeDock::get_singleton()->show_remote_tree();
- }
- // Good to go.
- SceneTreeDock::get_singleton()->show_tab_buttons();
- debugger->set_editor_remote_tree(remote_scene_tree);
- debugger->start(server->take_connection());
- // Send breakpoints.
- for (const KeyValue<Breakpoint, bool> &E : breakpoints) {
- const Breakpoint &bp = E.key;
- debugger->set_breakpoint(bp.source, bp.line, E.value);
- } // Will arrive too late, how does the regular run work?
-
- debugger->update_live_edit_root();
+ // Remote scene tree update
+ remote_scene_tree_timeout -= get_process_delta_time();
+ if (remote_scene_tree_timeout < 0) {
+ remote_scene_tree_timeout = EditorSettings::get_singleton()->get("debugger/remote_scene_tree_refresh_interval");
+ if (remote_scene_tree->is_visible_in_tree()) {
+ get_current_debugger()->request_remote_tree();
+ }
+ }
+
+ // Remote inspector update
+ inspect_edited_object_timeout -= get_process_delta_time();
+ if (inspect_edited_object_timeout < 0) {
+ inspect_edited_object_timeout = EditorSettings::get_singleton()->get("debugger/remote_inspect_refresh_interval");
+ if (EditorDebuggerRemoteObject *obj = get_inspected_remote_object()) {
+ get_current_debugger()->request_remote_object(obj->remote_object_id);
+ }
+ }
+
+ // Take connections.
+ if (server->is_connection_available()) {
+ ScriptEditorDebugger *debugger = nullptr;
+ _for_all(tabs, [&](ScriptEditorDebugger *dbg) {
+ if (debugger || dbg->is_session_active()) {
+ return;
+ }
+ debugger = dbg;
+ });
+ if (debugger == nullptr) {
+ if (tabs->get_tab_count() <= 4) { // Max 4 debugging sessions active.
+ debugger = _add_debugger();
+ } else {
+ // We already have too many sessions, disconnecting new clients to prevent them from hanging.
+ server->take_connection()->close();
+ return; // Can't add, stop here.
+ }
+ }
+
+ EditorNode::get_singleton()->get_pause_button()->set_disabled(false);
+ // Switch to remote tree view if so desired.
+ auto_switch_remote_scene_tree = (bool)EditorSettings::get_singleton()->get("debugger/auto_switch_to_remote_scene_tree");
+ if (auto_switch_remote_scene_tree) {
+ SceneTreeDock::get_singleton()->show_remote_tree();
+ }
+ // Good to go.
+ SceneTreeDock::get_singleton()->show_tab_buttons();
+ debugger->set_editor_remote_tree(remote_scene_tree);
+ debugger->start(server->take_connection());
+ // Send breakpoints.
+ for (const KeyValue<Breakpoint, bool> &E : breakpoints) {
+ const Breakpoint &bp = E.key;
+ debugger->set_breakpoint(bp.source, bp.line, E.value);
+ } // Will arrive too late, how does the regular run work?
+
+ debugger->update_live_edit_root();
+ }
+ } break;
}
}
diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp
index c1fffae404..3a65d015d5 100644
--- a/editor/debugger/editor_debugger_tree.cpp
+++ b/editor/debugger/editor_debugger_tree.cpp
@@ -53,10 +53,12 @@ EditorDebuggerTree::EditorDebuggerTree() {
}
void EditorDebuggerTree::_notification(int p_what) {
- if (p_what == NOTIFICATION_POSTINITIALIZE) {
- connect("cell_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selected));
- connect("item_collapsed", callable_mp(this, &EditorDebuggerTree::_scene_tree_folded));
- connect("item_rmb_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_rmb_selected));
+ switch (p_what) {
+ case NOTIFICATION_POSTINITIALIZE: {
+ connect("cell_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selected));
+ connect("item_collapsed", callable_mp(this, &EditorDebuggerTree::_scene_tree_folded));
+ connect("item_rmb_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_rmb_selected));
+ } break;
}
}
diff --git a/editor/debugger/editor_network_profiler.cpp b/editor/debugger/editor_network_profiler.cpp
index b05134144e..8c18eba71d 100644
--- a/editor/debugger/editor_network_profiler.cpp
+++ b/editor/debugger/editor_network_profiler.cpp
@@ -39,15 +39,18 @@ void EditorNetworkProfiler::_bind_methods() {
}
void EditorNetworkProfiler::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
- clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
- incoming_bandwidth_text->set_right_icon(get_theme_icon(SNAME("ArrowDown"), SNAME("EditorIcons")));
- outgoing_bandwidth_text->set_right_icon(get_theme_icon(SNAME("ArrowUp"), SNAME("EditorIcons")));
-
- // This needs to be done here to set the faded color when the profiler is first opened
- incoming_bandwidth_text->add_theme_color_override("font_uneditable_color", get_theme_color(SNAME("font_color"), SNAME("Editor")) * Color(1, 1, 1, 0.5));
- outgoing_bandwidth_text->add_theme_color_override("font_uneditable_color", get_theme_color(SNAME("font_color"), SNAME("Editor")) * Color(1, 1, 1, 0.5));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
+ clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+ incoming_bandwidth_text->set_right_icon(get_theme_icon(SNAME("ArrowDown"), SNAME("EditorIcons")));
+ outgoing_bandwidth_text->set_right_icon(get_theme_icon(SNAME("ArrowUp"), SNAME("EditorIcons")));
+
+ // This needs to be done here to set the faded color when the profiler is first opened
+ incoming_bandwidth_text->add_theme_color_override("font_uneditable_color", get_theme_color(SNAME("font_color"), SNAME("Editor")) * Color(1, 1, 1, 0.5));
+ outgoing_bandwidth_text->add_theme_color_override("font_uneditable_color", get_theme_color(SNAME("font_color"), SNAME("Editor")) * Color(1, 1, 1, 0.5));
+ } break;
}
}
diff --git a/editor/debugger/editor_profiler.cpp b/editor/debugger/editor_profiler.cpp
index da1d6a54f2..4b263e5152 100644
--- a/editor/debugger/editor_profiler.cpp
+++ b/editor/debugger/editor_profiler.cpp
@@ -393,9 +393,13 @@ void EditorProfiler::_clear_pressed() {
}
void EditorProfiler::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) {
- activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
- clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
+ case NOTIFICATION_TRANSLATION_CHANGED: {
+ activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
+ clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp
index 3cb5d3513d..2a1b0029d4 100644
--- a/editor/debugger/editor_visual_profiler.cpp
+++ b/editor/debugger/editor_visual_profiler.cpp
@@ -41,7 +41,6 @@ void EditorVisualProfiler::add_frame_metric(const Metric &p_metric) {
}
frame_metrics.write[last_metric] = p_metric;
- // _make_metric_ptrs(frame_metrics.write[last_metric]);
List<String> stack;
for (int i = 0; i < frame_metrics[last_metric].areas.size(); i++) {
@@ -423,13 +422,17 @@ void EditorVisualProfiler::_clear_pressed() {
}
void EditorVisualProfiler::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) {
- if (is_layout_rtl()) {
- activate->set_icon(get_theme_icon(SNAME("PlayBackwards"), SNAME("EditorIcons")));
- } else {
- activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
- }
- clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
+ case NOTIFICATION_TRANSLATION_CHANGED: {
+ if (is_layout_rtl()) {
+ activate->set_icon(get_theme_icon(SNAME("PlayBackwards"), SNAME("EditorIcons")));
+ } else {
+ activate->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
+ }
+ clear_button->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+ } break;
}
}
@@ -478,19 +481,6 @@ void EditorVisualProfiler::_graph_tex_draw() {
graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x, font->get_ascent(font_size) + 2), "CPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 0.8));
graph->draw_string(font, Vector2(font->get_string_size("X", font_size).x + graph->get_size().width / 2, font->get_ascent(font_size) + 2), "GPU:", HORIZONTAL_ALIGNMENT_LEFT, -1, font_size, Color(1, 1, 1, 0.8));
-
- /*
- 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)
- frame = 0;
-
- int cur_x = frame * graph->get_size().x / max_frames;
-
- graph->draw_line(Vector2(cur_x, 0), Vector2(cur_x, graph->get_size().y), Color(1, 1, 1, 0.4));
- }
-*/
}
void EditorVisualProfiler::_graph_tex_mouse_exit() {
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index e08ddff816..645d7608f3 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -796,8 +796,8 @@ void ScriptEditorDebugger::_notification(int p_what) {
search->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
reason->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
-
} break;
+
case NOTIFICATION_PROCESS: {
if (is_session_active()) {
peer->poll();
@@ -857,6 +857,7 @@ void ScriptEditorDebugger::_notification(int p_what) {
break;
};
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
if (tabs->has_theme_stylebox_override("panel")) {
tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles")));
diff --git a/editor/doc_tools.cpp b/editor/doc_tools.cpp
index 36ae19cb23..a9d18e9dcc 100644
--- a/editor/doc_tools.cpp
+++ b/editor/doc_tools.cpp
@@ -1375,7 +1375,7 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str
_write_string(f, 1, "<tutorials>");
for (int i = 0; i < c.tutorials.size(); i++) {
DocData::TutorialDoc tutorial = c.tutorials.get(i);
- String title_attribute = (!tutorial.title.is_empty()) ? " title=\"" + tutorial.title.xml_escape() + "\"" : "";
+ String title_attribute = (!tutorial.title.is_empty()) ? " title=\"" + _translate_doc_string(tutorial.title).xml_escape() + "\"" : "";
_write_string(f, 2, "<link" + title_attribute + ">" + tutorial.link.xml_escape() + "</link>");
}
_write_string(f, 1, "</tutorials>");
@@ -1468,7 +1468,8 @@ Error DocTools::save_classes(const String &p_default_path, const Map<String, Str
Error DocTools::load_compressed(const uint8_t *p_data, int p_compressed_size, int p_uncompressed_size) {
Vector<uint8_t> data;
data.resize(p_uncompressed_size);
- Compression::decompress(data.ptrw(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE);
+ int ret = Compression::decompress(data.ptrw(), p_uncompressed_size, p_data, p_compressed_size, Compression::MODE_DEFLATE);
+ ERR_FAIL_COND_V_MSG(ret == -1, ERR_FILE_CORRUPT, "Compressed file is corrupt.");
class_list.clear();
Ref<XMLParser> parser = memnew(XMLParser);
diff --git a/editor/editor_atlas_packer.cpp b/editor/editor_atlas_packer.cpp
index aad32968de..9c6bcd769a 100644
--- a/editor/editor_atlas_packer.cpp
+++ b/editor/editor_atlas_packer.cpp
@@ -30,60 +30,10 @@
#include "editor_atlas_packer.h"
+#include "core/math/geometry_2d.h"
#include "core/math/vector2.h"
#include "core/math/vector2i.h"
-void EditorAtlasPacker::_plot_triangle(Ref<BitMap> p_bitmap, Vector2i *vertices) {
- int width = p_bitmap->get_size().width;
- int height = p_bitmap->get_size().height;
- int x[3];
- int y[3];
-
- for (int j = 0; j < 3; j++) {
- x[j] = vertices[j].x;
- y[j] = vertices[j].y;
- }
-
- // sort the points vertically
- if (y[1] > y[2]) {
- SWAP(x[1], x[2]);
- SWAP(y[1], y[2]);
- }
- if (y[0] > y[1]) {
- SWAP(x[0], x[1]);
- SWAP(y[0], y[1]);
- }
- if (y[1] > y[2]) {
- SWAP(x[1], x[2]);
- SWAP(y[1], y[2]);
- }
-
- double dx_far = double(x[2] - x[0]) / (y[2] - y[0] + 1);
- double dx_upper = double(x[1] - x[0]) / (y[1] - y[0] + 1);
- double dx_low = double(x[2] - x[1]) / (y[2] - y[1] + 1);
- double xf = x[0];
- double xt = x[0] + dx_upper; // if y[0] == y[1], special case
- for (int yi = y[0]; yi <= (y[2] > height - 1 ? height - 1 : y[2]); yi++) {
- if (yi >= 0) {
- for (int xi = (xf > 0 ? int(xf) : 0); xi <= (xt < width ? xt : width - 1); xi++) {
- //pixels[int(x + y * width)] = color;
-
- p_bitmap->set_bit(Point2(xi, yi), true);
- }
-
- for (int xi = (xf < width ? int(xf) : width - 1); xi >= (xt > 0 ? xt : 0); xi--) {
- p_bitmap->set_bit(Point2(xi, yi), true);
- }
- }
- xf += dx_far;
- if (yi < y[1]) {
- xt += dx_upper;
- } else {
- xt += dx_low;
- }
- }
-}
-
void EditorAtlasPacker::chart_pack(Vector<Chart> &charts, int &r_width, int &r_height, int p_atlas_max_size, int p_cell_resolution) {
int divide_by = MIN(64, p_cell_resolution);
Vector<PlottedBitmap> bitmaps;
@@ -122,10 +72,18 @@ void EditorAtlasPacker::chart_pack(Vector<Chart> &charts, int &r_width, int &r_h
Vector2 vtx = chart.vertices[chart.faces[j].vertex[k]];
vtx -= aabb.position;
vtx /= divide_by;
+ vtx.x = MIN(vtx.x, w - 1);
+ vtx.y = MIN(vtx.y, h - 1);
v[k] = vtx;
}
- _plot_triangle(src_bitmap, v);
+ for (int k = 0; k < 3; k++) {
+ int l = k == 0 ? 2 : k - 1;
+ Vector<Point2i> points = Geometry2D::bresenham_line(v[k], v[l]);
+ for (Point2i point : points) {
+ src_bitmap->set_bit(point, true);
+ }
+ }
}
//src_bitmap->convert_to_image()->save_png("bitmap" + itos(i) + ".png");
diff --git a/editor/editor_atlas_packer.h b/editor/editor_atlas_packer.h
index 169a6bead8..7b7692011f 100644
--- a/editor/editor_atlas_packer.h
+++ b/editor/editor_atlas_packer.h
@@ -67,8 +67,6 @@ private:
}
};
- static void _plot_triangle(Ref<BitMap> p_bitmap, Vector2i *vertices);
-
public:
static void chart_pack(Vector<Chart> &charts, int &r_width, int &r_height, int p_atlas_max_size = 2048, int p_cell_resolution = 4);
};
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index d091ca5056..9685ff4b70 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -98,6 +98,7 @@ void EditorAudioBus::_notification(int p_what) {
update_bus();
set_process(true);
} break;
+
case NOTIFICATION_DRAW: {
if (is_master) {
draw_style_box(get_theme_stylebox(SNAME("disabled"), SNAME("Button")), Rect2(Vector2(), get_size()));
@@ -113,6 +114,7 @@ void EditorAudioBus::_notification(int p_what) {
draw_rect(Rect2(Point2(), get_size()), accent, false);
}
} break;
+
case NOTIFICATION_PROCESS: {
if (cc != AudioServer::get_singleton()->get_bus_channels(get_index())) {
cc = AudioServer::get_singleton()->get_bus_channels(get_index());
@@ -157,6 +159,7 @@ void EditorAudioBus::_notification(int p_what) {
}
}
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
for (int i = 0; i < CHANNELS_MAX; i++) {
channel[i].peak_l = -100;
@@ -952,12 +955,14 @@ void EditorAudioBusDrop::_notification(int p_what) {
draw_rect(Rect2(Point2(), get_size()), accent, false);
}
} break;
+
case NOTIFICATION_MOUSE_ENTER: {
if (!hovering_drop) {
hovering_drop = true;
update();
}
} break;
+
case NOTIFICATION_MOUSE_EXIT:
case NOTIFICATION_DRAG_END: {
if (hovering_drop) {
@@ -1017,15 +1022,18 @@ void EditorAudioBuses::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
bus_scroll->add_theme_style_override("bg", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
} break;
+
case NOTIFICATION_READY: {
_update_buses();
} break;
+
case NOTIFICATION_DRAG_END: {
if (drop_end) {
drop_end->queue_delete();
drop_end = nullptr;
}
} break;
+
case NOTIFICATION_PROCESS: {
// Check if anything was edited.
bool edited = AudioServer::get_singleton()->is_edited();
@@ -1401,6 +1409,7 @@ void EditorAudioMeterNotches::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
notch_color = get_theme_color(SNAME("font_color"), SNAME("Editor"));
} break;
+
case NOTIFICATION_DRAW: {
_draw_audio_notches();
} break;
diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp
index a1250ef9f4..281d614ea9 100644
--- a/editor/editor_autoload_settings.cpp
+++ b/editor/editor_autoload_settings.cpp
@@ -42,23 +42,27 @@
#define PREVIEW_LIST_MAX_SIZE 10
void EditorAutoloadSettings::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- List<String> afn;
- ResourceLoader::get_recognized_extensions_for_type("Script", &afn);
- ResourceLoader::get_recognized_extensions_for_type("PackedScene", &afn);
-
- for (const String &E : afn) {
- file_dialog->add_filter("*." + E);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ List<String> afn;
+ ResourceLoader::get_recognized_extensions_for_type("Script", &afn);
+ ResourceLoader::get_recognized_extensions_for_type("PackedScene", &afn);
+
+ for (const String &E : afn) {
+ file_dialog->add_filter("*." + E);
+ }
- for (const AutoLoadInfo &info : autoload_cache) {
- if (info.node && info.in_editor) {
- get_tree()->get_root()->call_deferred(SNAME("add_child"), info.node);
+ for (const AutoLoadInfo &info : autoload_cache) {
+ if (info.node && info.in_editor) {
+ get_tree()->get_root()->call_deferred(SNAME("add_child"), info.node);
+ }
}
- }
- browse_button->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
- } else if (p_what == NOTIFICATION_THEME_CHANGED) {
- browse_button->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ browse_button->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED: {
+ browse_button->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp
index 91bd89b201..69c7e9d52c 100644
--- a/editor/editor_data.cpp
+++ b/editor/editor_data.cpp
@@ -589,11 +589,6 @@ void EditorData::remove_scene(int p_idx) {
}
bool EditorData::_find_updated_instances(Node *p_root, Node *p_node, Set<String> &checked_paths) {
- /*
- if (p_root!=p_node && p_node->get_owner()!=p_root && !p_root->is_editable_instance(p_node->get_owner()))
- return false;
- */
-
Ref<SceneState> ss;
if (p_node == p_root) {
diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp
index 5f5e4f37fd..f181c04004 100644
--- a/editor/editor_dir_dialog.cpp
+++ b/editor/editor_dir_dialog.cpp
@@ -79,29 +79,31 @@ void EditorDirDialog::reload(const String &p_path) {
}
void EditorDirDialog::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &EditorDirDialog::reload), make_binds(""));
- reload();
-
- if (!tree->is_connected("item_collapsed", callable_mp(this, &EditorDirDialog::_item_collapsed))) {
- tree->connect("item_collapsed", callable_mp(this, &EditorDirDialog::_item_collapsed), varray(), CONNECT_DEFERRED);
- }
-
- if (!EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &EditorDirDialog::reload))) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &EditorDirDialog::reload), make_binds(""));
- }
- }
-
- if (p_what == NOTIFICATION_EXIT_TREE) {
- if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &EditorDirDialog::reload))) {
- EditorFileSystem::get_singleton()->disconnect("filesystem_changed", callable_mp(this, &EditorDirDialog::reload));
- }
- }
-
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (must_reload && is_visible()) {
reload();
- }
+
+ if (!tree->is_connected("item_collapsed", callable_mp(this, &EditorDirDialog::_item_collapsed))) {
+ tree->connect("item_collapsed", callable_mp(this, &EditorDirDialog::_item_collapsed), varray(), CONNECT_DEFERRED);
+ }
+
+ if (!EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &EditorDirDialog::reload))) {
+ EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &EditorDirDialog::reload), make_binds(""));
+ }
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
+ if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &EditorDirDialog::reload))) {
+ EditorFileSystem::get_singleton()->disconnect("filesystem_changed", callable_mp(this, &EditorDirDialog::reload));
+ }
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (must_reload && is_visible()) {
+ reload();
+ }
+ } break;
}
}
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 98ae459c76..295b477080 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -1544,6 +1544,7 @@ void EditorExport::_notification(int p_what) {
case NOTIFICATION_ENTER_TREE: {
load_config();
} break;
+
case NOTIFICATION_PROCESS: {
update_export_presets();
} break;
diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp
index 976c9043d2..008c42b3a7 100644
--- a/editor/editor_feature_profile.cpp
+++ b/editor/editor_feature_profile.cpp
@@ -309,18 +309,20 @@ EditorFeatureProfile::EditorFeatureProfile() {}
//////////////////////////
void EditorFeatureProfileManager::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- current_profile = EDITOR_GET("_default_feature_profile");
- if (!current_profile.is_empty()) {
- current.instantiate();
- Error err = current->load_from_file(EditorSettings::get_singleton()->get_feature_profiles_dir().plus_file(current_profile + ".profile"));
- if (err != OK) {
- ERR_PRINT("Error loading default feature profile: " + current_profile);
- current_profile = String();
- current.unref();
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ current_profile = EDITOR_GET("_default_feature_profile");
+ if (!current_profile.is_empty()) {
+ current.instantiate();
+ Error err = current->load_from_file(EditorSettings::get_singleton()->get_feature_profiles_dir().plus_file(current_profile + ".profile"));
+ if (err != OK) {
+ ERR_PRINT("Error loading default feature profile: " + current_profile);
+ current_profile = String();
+ current.unref();
+ }
}
- }
- _update_profile_list(current_profile);
+ _update_profile_list(current_profile);
+ } break;
}
}
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index bda026e16c..e6343100df 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -69,48 +69,60 @@ VBoxContainer *EditorFileDialog::get_vbox() {
}
void EditorFileDialog::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY || p_what == NOTIFICATION_THEME_CHANGED || p_what == Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) {
- _update_icons();
- } else if (p_what == NOTIFICATION_PROCESS) {
- if (preview_waiting) {
- preview_wheel_timeout -= get_process_delta_time();
- if (preview_wheel_timeout <= 0) {
- preview_wheel_index++;
- if (preview_wheel_index >= 8) {
- preview_wheel_index = 0;
+ switch (p_what) {
+ case NOTIFICATION_READY:
+ case NOTIFICATION_THEME_CHANGED:
+ case Control::NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
+ case NOTIFICATION_TRANSLATION_CHANGED: {
+ _update_icons();
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ if (preview_waiting) {
+ preview_wheel_timeout -= get_process_delta_time();
+ if (preview_wheel_timeout <= 0) {
+ preview_wheel_index++;
+ if (preview_wheel_index >= 8) {
+ preview_wheel_index = 0;
+ }
+ Ref<Texture2D> frame = item_list->get_theme_icon("Progress" + itos(preview_wheel_index + 1), SNAME("EditorIcons"));
+ preview->set_texture(frame);
+ preview_wheel_timeout = 0.1;
}
- Ref<Texture2D> frame = item_list->get_theme_icon("Progress" + itos(preview_wheel_index + 1), SNAME("EditorIcons"));
- preview->set_texture(frame);
- preview_wheel_timeout = 0.1;
}
- }
+ } break;
- } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- bool is_showing_hidden = EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files");
- if (show_hidden_files != is_showing_hidden) {
- set_show_hidden_files(is_showing_hidden);
- }
- set_display_mode((DisplayMode)EditorSettings::get_singleton()->get("filesystem/file_dialog/display_mode").operator int());
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ bool is_showing_hidden = EditorSettings::get_singleton()->get("filesystem/file_dialog/show_hidden_files");
+ if (show_hidden_files != is_showing_hidden) {
+ set_show_hidden_files(is_showing_hidden);
+ }
+ set_display_mode((DisplayMode)EditorSettings::get_singleton()->get("filesystem/file_dialog/display_mode").operator int());
- _update_icons();
- // DO NOT CALL UPDATE FILE LIST HERE, ALL HUNDREDS OF HIDDEN DIALOGS WILL RESPOND, CALL INVALIDATE INSTEAD
- invalidate();
- } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (!is_visible()) {
- set_process_unhandled_input(false);
- }
- } else if (p_what == NOTIFICATION_WM_WINDOW_FOCUS_IN) {
- // Check if the current directory was removed externally (much less likely to happen while editor window is focused).
- String previous_dir = get_current_dir();
- while (!dir_access->dir_exists(get_current_dir())) {
- _go_up();
-
- // In case we can't go further up, use some fallback and break.
- if (get_current_dir() == previous_dir) {
- _dir_submitted(OS::get_singleton()->get_user_data_dir());
- break;
+ _update_icons();
+ // DO NOT CALL UPDATE FILE LIST HERE, ALL HUNDREDS OF HIDDEN DIALOGS WILL RESPOND, CALL INVALIDATE INSTEAD
+ invalidate();
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (!is_visible()) {
+ set_process_unhandled_input(false);
}
- }
+ } break;
+
+ case NOTIFICATION_WM_WINDOW_FOCUS_IN: {
+ // Check if the current directory was removed externally (much less likely to happen while editor window is focused).
+ String previous_dir = get_current_dir();
+ while (!dir_access->dir_exists(get_current_dir())) {
+ _go_up();
+
+ // In case we can't go further up, use some fallback and break.
+ if (get_current_dir() == previous_dir) {
+ _dir_submitted(OS::get_singleton()->get_user_data_dir());
+ break;
+ }
+ }
+ } break;
}
}
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index 34a21c90fe..0c46cebec0 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -1163,6 +1163,7 @@ void EditorFileSystem::_notification(int p_what) {
call_deferred(SNAME("scan")); //this should happen after every editor node entered the tree
} break;
+
case NOTIFICATION_EXIT_TREE: {
Thread &active_thread = thread.is_started() ? thread : thread_sources;
if (use_threads && active_thread.is_started()) {
@@ -1184,8 +1185,8 @@ void EditorFileSystem::_notification(int p_what) {
}
filesystem = nullptr;
new_filesystem = nullptr;
-
} break;
+
case NOTIFICATION_PROCESS: {
if (use_threads) {
if (scanning_changes) {
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index 7d88b94a37..fe39f7acc9 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -1770,17 +1770,17 @@ void EditorHelp::_notification(int p_what) {
_wait_for_thread();
_update_doc();
} break;
+
case NOTIFICATION_THEME_CHANGED: {
if (is_inside_tree()) {
_class_desc_resized(true);
}
update_toggle_scripts_button();
} break;
- case NOTIFICATION_VISIBILITY_CHANGED:
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
update_toggle_scripts_button();
- break;
- default:
- break;
+ } break;
}
}
@@ -2041,6 +2041,7 @@ void FindBar::_notification(int p_what) {
hide_button->set_custom_minimum_size(hide_button->get_normal_texture()->get_size());
matches_label->add_theme_color_override("font_color", results_count > 0 ? get_theme_color(SNAME("font_color"), SNAME("Label")) : get_theme_color(SNAME("error_color"), SNAME("Editor")));
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
set_process_unhandled_input(is_visible_in_tree());
} break;
diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp
index aa4688452c..dd4969cdd2 100644
--- a/editor/editor_help_search.cpp
+++ b/editor/editor_help_search.cpp
@@ -111,9 +111,11 @@ void EditorHelpSearch::_notification(int p_what) {
EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "search_help", Rect2(get_position(), get_size()));
}
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
_update_icons();
} break;
+
case NOTIFICATION_ENTER_TREE: {
connect("confirmed", callable_mp(this, &EditorHelpSearch::_confirmed));
_update_icons();
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index d5cd61d792..675ef808e1 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -103,22 +103,96 @@ void EditorProperty::emit_changed(const StringName &p_property, const Variant &p
}
void EditorProperty::_notification(int p_what) {
- if (p_what == NOTIFICATION_SORT_CHILDREN) {
- Size2 size = get_size();
- Rect2 rect;
- Rect2 bottom_rect;
+ switch (p_what) {
+ case NOTIFICATION_SORT_CHILDREN: {
+ Size2 size = get_size();
+ Rect2 rect;
+ Rect2 bottom_rect;
+
+ right_child_rect = Rect2();
+ bottom_child_rect = Rect2();
+
+ {
+ int child_room = size.width * (1.0 - split_ratio);
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
+ int height = font->get_height(font_size);
+ bool no_children = true;
+
+ //compute room needed
+ for (int i = 0; i < get_child_count(); i++) {
+ Control *c = Object::cast_to<Control>(get_child(i));
+ if (!c) {
+ continue;
+ }
+ if (c->is_set_as_top_level()) {
+ continue;
+ }
+ if (c == bottom_editor) {
+ continue;
+ }
- right_child_rect = Rect2();
- bottom_child_rect = Rect2();
+ Size2 minsize = c->get_combined_minimum_size();
+ child_room = MAX(child_room, minsize.width);
+ height = MAX(height, minsize.height);
+ no_children = false;
+ }
- {
- int child_room = size.width * (1.0 - split_ratio);
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
- int height = font->get_height(font_size);
- bool no_children = true;
+ if (no_children) {
+ text_size = size.width;
+ rect = Rect2(size.width - 1, 0, 1, height);
+ } else {
+ text_size = MAX(0, size.width - (child_room + 4 * EDSCALE));
+ if (is_layout_rtl()) {
+ rect = Rect2(1, 0, child_room, height);
+ } else {
+ rect = Rect2(size.width - child_room, 0, child_room, height);
+ }
+ }
+
+ if (bottom_editor) {
+ int m = 0; //get_constant("item_margin", "Tree");
+
+ bottom_rect = Rect2(m, rect.size.height + get_theme_constant(SNAME("vseparation")), size.width - m, bottom_editor->get_combined_minimum_size().height);
+ }
+
+ if (keying) {
+ Ref<Texture2D> key;
+
+ if (use_keying_next()) {
+ key = get_theme_icon(SNAME("KeyNext"), SNAME("EditorIcons"));
+ } else {
+ key = get_theme_icon(SNAME("Key"), SNAME("EditorIcons"));
+ }
+
+ rect.size.x -= key->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ if (is_layout_rtl()) {
+ rect.position.x += key->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ }
+
+ if (no_children) {
+ text_size -= key->get_width() + 4 * EDSCALE;
+ }
+ }
+
+ if (deletable) {
+ Ref<Texture2D> close;
+
+ close = get_theme_icon(SNAME("Close"), SNAME("EditorIcons"));
+
+ rect.size.x -= close->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+
+ if (is_layout_rtl()) {
+ rect.position.x += close->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ }
- //compute room needed
+ if (no_children) {
+ text_size -= close->get_width() + 4 * EDSCALE;
+ }
+ }
+ }
+
+ //set children
for (int i = 0; i < get_child_count(); i++) {
Control *c = Object::cast_to<Control>(get_child(i));
if (!c) {
@@ -131,253 +205,181 @@ void EditorProperty::_notification(int p_what) {
continue;
}
- Size2 minsize = c->get_combined_minimum_size();
- child_room = MAX(child_room, minsize.width);
- height = MAX(height, minsize.height);
- no_children = false;
- }
-
- if (no_children) {
- text_size = size.width;
- rect = Rect2(size.width - 1, 0, 1, height);
- } else {
- text_size = MAX(0, size.width - (child_room + 4 * EDSCALE));
- if (is_layout_rtl()) {
- rect = Rect2(1, 0, child_room, height);
- } else {
- rect = Rect2(size.width - child_room, 0, child_room, height);
- }
+ fit_child_in_rect(c, rect);
+ right_child_rect = rect;
}
if (bottom_editor) {
- int m = 0; //get_constant("item_margin", "Tree");
-
- bottom_rect = Rect2(m, rect.size.height + get_theme_constant(SNAME("vseparation")), size.width - m, bottom_editor->get_combined_minimum_size().height);
+ fit_child_in_rect(bottom_editor, bottom_rect);
+ bottom_child_rect = bottom_rect;
}
- if (keying) {
- Ref<Texture2D> key;
-
- if (use_keying_next()) {
- key = get_theme_icon(SNAME("KeyNext"), SNAME("EditorIcons"));
- } else {
- key = get_theme_icon(SNAME("Key"), SNAME("EditorIcons"));
- }
+ update(); //need to redraw text
+ } break;
- rect.size.x -= key->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
- if (is_layout_rtl()) {
- rect.position.x += key->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
- }
+ case NOTIFICATION_DRAW: {
+ Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree"));
+ int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
+ Color dark_color = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
+ bool rtl = is_layout_rtl();
- if (no_children) {
- text_size -= key->get_width() + 4 * EDSCALE;
- }
+ Size2 size = get_size();
+ if (bottom_editor) {
+ size.height = bottom_editor->get_offset(SIDE_TOP);
+ } else if (label_reference) {
+ size.height = label_reference->get_size().height;
}
- if (deletable) {
- Ref<Texture2D> close;
-
- close = get_theme_icon(SNAME("Close"), SNAME("EditorIcons"));
+ Ref<StyleBox> sb;
+ if (selected) {
+ sb = get_theme_stylebox(SNAME("bg_selected"));
+ } else {
+ sb = get_theme_stylebox(SNAME("bg"));
+ }
- rect.size.x -= close->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ draw_style_box(sb, Rect2(Vector2(), size));
- if (is_layout_rtl()) {
- rect.position.x += close->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
- }
-
- if (no_children) {
- text_size -= close->get_width() + 4 * EDSCALE;
- }
+ if (draw_top_bg && right_child_rect != Rect2()) {
+ draw_rect(right_child_rect, dark_color);
}
- }
-
- //set children
- for (int i = 0; i < get_child_count(); i++) {
- Control *c = Object::cast_to<Control>(get_child(i));
- if (!c) {
- continue;
+ if (bottom_child_rect != Rect2()) {
+ draw_rect(bottom_child_rect, dark_color);
}
- if (c->is_set_as_top_level()) {
- continue;
+
+ Color color;
+ if (draw_warning) {
+ color = get_theme_color(is_read_only() ? SNAME("readonly_warning_color") : SNAME("warning_color"));
+ } else {
+ color = get_theme_color(is_read_only() ? SNAME("readonly_color") : SNAME("property_color"));
}
- if (c == bottom_editor) {
- continue;
+ if (label.contains(".")) {
+ // FIXME: Move this to the project settings editor, as this is only used
+ // for project settings feature tag overrides.
+ color.a = 0.5;
}
- fit_child_in_rect(c, rect);
- right_child_rect = rect;
- }
-
- if (bottom_editor) {
- fit_child_in_rect(bottom_editor, bottom_rect);
- bottom_child_rect = bottom_rect;
- }
-
- update(); //need to redraw text
- }
-
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Tree"));
- int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Tree"));
- Color dark_color = get_theme_color(SNAME("dark_color_2"), SNAME("Editor"));
- bool rtl = is_layout_rtl();
-
- Size2 size = get_size();
- if (bottom_editor) {
- size.height = bottom_editor->get_offset(SIDE_TOP);
- } else if (label_reference) {
- size.height = label_reference->get_size().height;
- }
-
- Ref<StyleBox> sb;
- if (selected) {
- sb = get_theme_stylebox(SNAME("bg_selected"));
- } else {
- sb = get_theme_stylebox(SNAME("bg"));
- }
-
- draw_style_box(sb, Rect2(Vector2(), size));
-
- if (draw_top_bg && right_child_rect != Rect2()) {
- draw_rect(right_child_rect, dark_color);
- }
- if (bottom_child_rect != Rect2()) {
- draw_rect(bottom_child_rect, dark_color);
- }
+ int ofs = get_theme_constant(SNAME("font_offset"));
+ int text_limit = text_size - ofs;
- Color color;
- if (draw_warning) {
- color = get_theme_color(is_read_only() ? SNAME("readonly_warning_color") : SNAME("warning_color"));
- } else {
- color = get_theme_color(is_read_only() ? SNAME("readonly_color") : SNAME("property_color"));
- }
- if (label.contains(".")) {
- // FIXME: Move this to the project settings editor, as this is only used
- // for project settings feature tag overrides.
- color.a = 0.5;
- }
-
- int ofs = get_theme_constant(SNAME("font_offset"));
- int text_limit = text_size - ofs;
+ if (checkable) {
+ Ref<Texture2D> checkbox;
+ if (checked) {
+ checkbox = get_theme_icon(SNAME("GuiChecked"), SNAME("EditorIcons"));
+ } else {
+ checkbox = get_theme_icon(SNAME("GuiUnchecked"), SNAME("EditorIcons"));
+ }
- if (checkable) {
- Ref<Texture2D> checkbox;
- if (checked) {
- checkbox = get_theme_icon(SNAME("GuiChecked"), SNAME("EditorIcons"));
+ Color color2(1, 1, 1);
+ if (check_hover) {
+ color2.r *= 1.2;
+ color2.g *= 1.2;
+ color2.b *= 1.2;
+ }
+ check_rect = Rect2(ofs, ((size.height - checkbox->get_height()) / 2), checkbox->get_width(), checkbox->get_height());
+ if (rtl) {
+ draw_texture(checkbox, Vector2(size.width - check_rect.position.x - checkbox->get_width(), check_rect.position.y), color2);
+ } else {
+ draw_texture(checkbox, check_rect.position, color2);
+ }
+ int check_ofs = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) + checkbox->get_width() + get_theme_constant(SNAME("hseparation"), SNAME("CheckBox"));
+ ofs += check_ofs;
+ text_limit -= check_ofs;
} else {
- checkbox = get_theme_icon(SNAME("GuiUnchecked"), SNAME("EditorIcons"));
+ check_rect = Rect2();
}
- Color color2(1, 1, 1);
- if (check_hover) {
- color2.r *= 1.2;
- color2.g *= 1.2;
- color2.b *= 1.2;
- }
- check_rect = Rect2(ofs, ((size.height - checkbox->get_height()) / 2), checkbox->get_width(), checkbox->get_height());
- if (rtl) {
- draw_texture(checkbox, Vector2(size.width - check_rect.position.x - checkbox->get_width(), check_rect.position.y), color2);
+ if (can_revert && !is_read_only()) {
+ Ref<Texture2D> reload_icon = get_theme_icon(SNAME("ReloadSmall"), SNAME("EditorIcons"));
+ text_limit -= reload_icon->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
+ revert_rect = Rect2(ofs + text_limit, (size.height - reload_icon->get_height()) / 2, reload_icon->get_width(), reload_icon->get_height());
+
+ Color color2(1, 1, 1);
+ if (revert_hover) {
+ color2.r *= 1.2;
+ color2.g *= 1.2;
+ color2.b *= 1.2;
+ }
+ if (rtl) {
+ draw_texture(reload_icon, Vector2(size.width - revert_rect.position.x - reload_icon->get_width(), revert_rect.position.y), color2);
+ } else {
+ draw_texture(reload_icon, revert_rect.position, color2);
+ }
} else {
- draw_texture(checkbox, check_rect.position, color2);
+ revert_rect = Rect2();
}
- int check_ofs = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) + checkbox->get_width() + get_theme_constant(SNAME("hseparation"), SNAME("CheckBox"));
- ofs += check_ofs;
- text_limit -= check_ofs;
- } else {
- check_rect = Rect2();
- }
-
- if (can_revert && !is_read_only()) {
- Ref<Texture2D> reload_icon = get_theme_icon(SNAME("ReloadSmall"), SNAME("EditorIcons"));
- text_limit -= reload_icon->get_width() + get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
- revert_rect = Rect2(ofs + text_limit, (size.height - reload_icon->get_height()) / 2, reload_icon->get_width(), reload_icon->get_height());
- Color color2(1, 1, 1);
- if (revert_hover) {
- color2.r *= 1.2;
- color2.g *= 1.2;
- color2.b *= 1.2;
- }
- if (rtl) {
- draw_texture(reload_icon, Vector2(size.width - revert_rect.position.x - reload_icon->get_width(), revert_rect.position.y), color2);
- } else {
- draw_texture(reload_icon, revert_rect.position, color2);
+ if (!pin_hidden && pinned) {
+ Ref<Texture2D> pinned_icon = get_theme_icon(SNAME("Pin"), SNAME("EditorIcons"));
+ int margin_w = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
+ int total_icon_w = margin_w + pinned_icon->get_width();
+ int text_w = font->get_string_size(label, font_size, rtl ? HORIZONTAL_ALIGNMENT_RIGHT : HORIZONTAL_ALIGNMENT_LEFT, text_limit - total_icon_w).x;
+ int y = (size.height - pinned_icon->get_height()) / 2;
+ if (rtl) {
+ draw_texture(pinned_icon, Vector2(size.width - ofs - text_w - total_icon_w, y), color);
+ } else {
+ draw_texture(pinned_icon, Vector2(ofs + text_w + margin_w, y), color);
+ }
+ text_limit -= total_icon_w;
}
- } else {
- revert_rect = Rect2();
- }
- if (!pin_hidden && pinned) {
- Ref<Texture2D> pinned_icon = get_theme_icon(SNAME("Pin"), SNAME("EditorIcons"));
- int margin_w = get_theme_constant(SNAME("hseparator"), SNAME("Tree")) * 2;
- int total_icon_w = margin_w + pinned_icon->get_width();
- int text_w = font->get_string_size(label, font_size, rtl ? HORIZONTAL_ALIGNMENT_RIGHT : HORIZONTAL_ALIGNMENT_LEFT, text_limit - total_icon_w).x;
- int y = (size.height - pinned_icon->get_height()) / 2;
+ int v_ofs = (size.height - font->get_height(font_size)) / 2;
if (rtl) {
- draw_texture(pinned_icon, Vector2(size.width - ofs - text_w - total_icon_w, y), color);
+ draw_string(font, Point2(size.width - ofs - text_limit, v_ofs + font->get_ascent(font_size)), label, HORIZONTAL_ALIGNMENT_RIGHT, text_limit, font_size, color);
} else {
- draw_texture(pinned_icon, Vector2(ofs + text_w + margin_w, y), color);
+ draw_string(font, Point2(ofs, v_ofs + font->get_ascent(font_size)), label, HORIZONTAL_ALIGNMENT_LEFT, text_limit, font_size, color);
}
- text_limit -= total_icon_w;
- }
- int v_ofs = (size.height - font->get_height(font_size)) / 2;
- if (rtl) {
- draw_string(font, Point2(size.width - ofs - text_limit, v_ofs + font->get_ascent(font_size)), label, HORIZONTAL_ALIGNMENT_RIGHT, text_limit, font_size, color);
- } else {
- draw_string(font, Point2(ofs, v_ofs + font->get_ascent(font_size)), label, HORIZONTAL_ALIGNMENT_LEFT, text_limit, font_size, color);
- }
+ if (keying) {
+ Ref<Texture2D> key;
- if (keying) {
- Ref<Texture2D> key;
+ if (use_keying_next()) {
+ key = get_theme_icon(SNAME("KeyNext"), SNAME("EditorIcons"));
+ } else {
+ key = get_theme_icon(SNAME("Key"), SNAME("EditorIcons"));
+ }
- if (use_keying_next()) {
- key = get_theme_icon(SNAME("KeyNext"), SNAME("EditorIcons"));
- } else {
- key = get_theme_icon(SNAME("Key"), SNAME("EditorIcons"));
- }
+ ofs = size.width - key->get_width() - get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
- ofs = size.width - key->get_width() - get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ Color color2(1, 1, 1);
+ if (keying_hover) {
+ color2.r *= 1.2;
+ color2.g *= 1.2;
+ color2.b *= 1.2;
+ }
+ keying_rect = Rect2(ofs, ((size.height - key->get_height()) / 2), key->get_width(), key->get_height());
+ if (rtl) {
+ draw_texture(key, Vector2(size.width - keying_rect.position.x - key->get_width(), keying_rect.position.y), color2);
+ } else {
+ draw_texture(key, keying_rect.position, color2);
+ }
- Color color2(1, 1, 1);
- if (keying_hover) {
- color2.r *= 1.2;
- color2.g *= 1.2;
- color2.b *= 1.2;
- }
- keying_rect = Rect2(ofs, ((size.height - key->get_height()) / 2), key->get_width(), key->get_height());
- if (rtl) {
- draw_texture(key, Vector2(size.width - keying_rect.position.x - key->get_width(), keying_rect.position.y), color2);
} else {
- draw_texture(key, keying_rect.position, color2);
+ keying_rect = Rect2();
}
- } else {
- keying_rect = Rect2();
- }
-
- if (deletable) {
- Ref<Texture2D> close;
+ if (deletable) {
+ Ref<Texture2D> close;
- close = get_theme_icon(SNAME("Close"), SNAME("EditorIcons"));
+ close = get_theme_icon(SNAME("Close"), SNAME("EditorIcons"));
- ofs = size.width - close->get_width() - get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
+ ofs = size.width - close->get_width() - get_theme_constant(SNAME("hseparator"), SNAME("Tree"));
- Color color2(1, 1, 1);
- if (delete_hover) {
- color2.r *= 1.2;
- color2.g *= 1.2;
- color2.b *= 1.2;
- }
- delete_rect = Rect2(ofs, ((size.height - close->get_height()) / 2), close->get_width(), close->get_height());
- if (rtl) {
- draw_texture(close, Vector2(size.width - delete_rect.position.x - close->get_width(), delete_rect.position.y), color2);
+ Color color2(1, 1, 1);
+ if (delete_hover) {
+ color2.r *= 1.2;
+ color2.g *= 1.2;
+ color2.b *= 1.2;
+ }
+ delete_rect = Rect2(ofs, ((size.height - close->get_height()) / 2), close->get_width(), close->get_height());
+ if (rtl) {
+ draw_texture(close, Vector2(size.width - delete_rect.position.x - close->get_width(), delete_rect.position.y), color2);
+ } else {
+ draw_texture(close, delete_rect.position, color2);
+ }
} else {
- draw_texture(close, delete_rect.position, color2);
+ delete_rect = Rect2();
}
- } else {
- delete_rect = Rect2();
- }
+ } break;
}
}
@@ -1078,30 +1080,32 @@ void EditorInspectorPlugin::_bind_methods() {
////////////////////////////////////////////////
void EditorInspectorCategory::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- Ref<StyleBox> sb = get_theme_stylebox(SNAME("prop_category_style"), SNAME("Editor"));
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ Ref<StyleBox> sb = get_theme_stylebox(SNAME("prop_category_style"), SNAME("Editor"));
- draw_style_box(sb, Rect2(Vector2(), get_size()));
+ draw_style_box(sb, Rect2(Vector2(), get_size()));
- Ref<Font> font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
- int font_size = get_theme_font_size(SNAME("bold_size"), SNAME("EditorFonts"));
+ Ref<Font> font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
+ int font_size = get_theme_font_size(SNAME("bold_size"), SNAME("EditorFonts"));
- int hs = get_theme_constant(SNAME("hseparation"), SNAME("Tree"));
+ int hs = get_theme_constant(SNAME("hseparation"), SNAME("Tree"));
- int w = font->get_string_size(label, font_size).width;
- if (icon.is_valid()) {
- w += hs + icon->get_width();
- }
+ int w = font->get_string_size(label, font_size).width;
+ if (icon.is_valid()) {
+ w += hs + icon->get_width();
+ }
- int ofs = (get_size().width - w) / 2;
+ int ofs = (get_size().width - w) / 2;
- if (icon.is_valid()) {
- draw_texture(icon, Point2(ofs, (get_size().height - icon->get_height()) / 2).floor());
- ofs += hs + icon->get_width();
- }
+ if (icon.is_valid()) {
+ draw_texture(icon, Point2(ofs, (get_size().height - icon->get_height()) / 2).floor());
+ ofs += hs + icon->get_width();
+ }
- Color color = get_theme_color(SNAME("font_color"), SNAME("Tree"));
- draw_string(font, Point2(ofs, font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2).floor(), label, HORIZONTAL_ALIGNMENT_LEFT, get_size().width, font_size, color);
+ Color color = get_theme_color(SNAME("font_color"), SNAME("Tree"));
+ draw_string(font, Point2(ofs, font->get_ascent(font_size) + (get_size().height - font->get_height(font_size)) / 2).floor(), label, HORIZONTAL_ALIGNMENT_LEFT, get_size().width, font_size, color);
+ } break;
}
}
@@ -1152,6 +1156,7 @@ void EditorInspectorSection::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: {
update_minimum_size();
} break;
+
case NOTIFICATION_SORT_CHILDREN: {
if (!vbox_added) {
return;
@@ -1205,6 +1210,7 @@ void EditorInspectorSection::_notification(int p_what) {
fit_child_in_rect(c, Rect2(offset, size));
}
} break;
+
case NOTIFICATION_DRAW: {
// Get the section header font.
Ref<Font> font = get_theme_font(SNAME("bold"), SNAME("EditorFonts"));
@@ -1299,6 +1305,7 @@ void EditorInspectorSection::_notification(int p_what) {
draw_style_box(section_indent_style, indent_rect);
}
} break;
+
case NOTIFICATION_DRAG_BEGIN: {
Dictionary dd = get_viewport()->gui_get_drag_data();
@@ -1317,10 +1324,12 @@ void EditorInspectorSection::_notification(int p_what) {
dropping = children_can_drop;
update();
} break;
+
case NOTIFICATION_DRAG_END: {
dropping = false;
update();
} break;
+
case NOTIFICATION_MOUSE_ENTER: {
if (dropping) {
dropping_unfold_timer->start();
@@ -1858,7 +1867,6 @@ int EditorInspectorArray::_drop_position() const {
void EditorInspectorArray::_new_size_line_edit_text_changed(String p_text) {
bool valid = false;
- ;
if (p_text.is_valid_int()) {
int val = p_text.to_int();
if (val > 0 && val != count) {
@@ -1870,7 +1878,6 @@ void EditorInspectorArray::_new_size_line_edit_text_changed(String p_text) {
void EditorInspectorArray::_new_size_line_edit_text_submitted(String p_text) {
bool valid = false;
- ;
if (p_text.is_valid_int()) {
int val = p_text.to_int();
if (val > 0 && val != count) {
@@ -2025,6 +2032,7 @@ void EditorInspectorArray::_notification(int p_what) {
add_button->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
update_minimum_size();
} break;
+
case NOTIFICATION_DRAG_BEGIN: {
Dictionary dict = get_viewport()->gui_get_drag_data();
if (dict.has("type") && dict["type"] == "property_array_element" && String(dict["property_array_prefix"]) == array_element_prefix) {
@@ -2032,6 +2040,7 @@ void EditorInspectorArray::_notification(int p_what) {
control_dropping->update();
}
} break;
+
case NOTIFICATION_DRAG_END: {
if (dropping) {
dropping = false;
@@ -2183,11 +2192,14 @@ void EditorPaginator::update(int p_page, int p_max_page) {
}
void EditorPaginator::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- first_page_button->set_icon(get_theme_icon(SNAME("PageFirst"), SNAME("EditorIcons")));
- prev_page_button->set_icon(get_theme_icon(SNAME("PagePrevious"), SNAME("EditorIcons")));
- next_page_button->set_icon(get_theme_icon(SNAME("PageNext"), SNAME("EditorIcons")));
- last_page_button->set_icon(get_theme_icon(SNAME("PageLast"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ first_page_button->set_icon(get_theme_icon(SNAME("PageFirst"), SNAME("EditorIcons")));
+ prev_page_button->set_icon(get_theme_icon(SNAME("PagePrevious"), SNAME("EditorIcons")));
+ next_page_button->set_icon(get_theme_icon(SNAME("PageNext"), SNAME("EditorIcons")));
+ last_page_button->set_icon(get_theme_icon(SNAME("PageLast"), SNAME("EditorIcons")));
+ } break;
}
}
@@ -3426,80 +3438,84 @@ void EditorInspector::_node_removed(Node *p_node) {
}
void EditorInspector::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", callable_mp(this, &EditorInspector::_feature_profile_changed));
- set_process(is_visible_in_tree());
- _update_inspector_bg();
- }
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ EditorFeatureProfileManager::get_singleton()->connect("current_feature_profile_changed", callable_mp(this, &EditorInspector::_feature_profile_changed));
+ set_process(is_visible_in_tree());
+ _update_inspector_bg();
+ } break;
- if (p_what == NOTIFICATION_ENTER_TREE) {
- if (!sub_inspector) {
- get_tree()->connect("node_removed", callable_mp(this, &EditorInspector::_node_removed));
- }
- }
- if (p_what == NOTIFICATION_PREDELETE) {
- edit(nullptr); //just in case
- }
- if (p_what == NOTIFICATION_EXIT_TREE) {
- if (!sub_inspector) {
- get_tree()->disconnect("node_removed", callable_mp(this, &EditorInspector::_node_removed));
- }
- edit(nullptr);
- }
+ case NOTIFICATION_ENTER_TREE: {
+ if (!sub_inspector) {
+ get_tree()->connect("node_removed", callable_mp(this, &EditorInspector::_node_removed));
+ }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- set_process(is_visible_in_tree());
- }
+ case NOTIFICATION_PREDELETE: {
+ edit(nullptr); //just in case
+ } break;
- if (p_what == NOTIFICATION_PROCESS) {
- if (update_scroll_request >= 0) {
- get_v_scroll_bar()->call_deferred(SNAME("set_value"), update_scroll_request);
- update_scroll_request = -1;
- }
- if (refresh_countdown > 0) {
- refresh_countdown -= get_process_delta_time();
- if (refresh_countdown <= 0) {
- for (const KeyValue<StringName, List<EditorProperty *>> &F : editor_property_map) {
- for (EditorProperty *E : F.value) {
- if (!E->is_cache_valid()) {
- E->update_property();
- E->update_revert_and_pin_status();
- E->update_cache();
+ case NOTIFICATION_EXIT_TREE: {
+ if (!sub_inspector) {
+ get_tree()->disconnect("node_removed", callable_mp(this, &EditorInspector::_node_removed));
+ }
+ edit(nullptr);
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ set_process(is_visible_in_tree());
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ if (update_scroll_request >= 0) {
+ get_v_scroll_bar()->call_deferred(SNAME("set_value"), update_scroll_request);
+ update_scroll_request = -1;
+ }
+ if (refresh_countdown > 0) {
+ refresh_countdown -= get_process_delta_time();
+ if (refresh_countdown <= 0) {
+ for (const KeyValue<StringName, List<EditorProperty *>> &F : editor_property_map) {
+ for (EditorProperty *E : F.value) {
+ if (!E->is_cache_valid()) {
+ E->update_property();
+ E->update_revert_and_pin_status();
+ E->update_cache();
+ }
}
}
+ refresh_countdown = float(EditorSettings::get_singleton()->get("docks/property_editor/auto_refresh_interval"));
}
- refresh_countdown = float(EditorSettings::get_singleton()->get("docks/property_editor/auto_refresh_interval"));
}
- }
- changing++;
+ changing++;
- if (update_tree_pending) {
- update_tree();
- update_tree_pending = false;
- pending.clear();
+ if (update_tree_pending) {
+ update_tree();
+ update_tree_pending = false;
+ pending.clear();
- } else {
- while (pending.size()) {
- StringName prop = pending.front()->get();
- if (editor_property_map.has(prop)) {
- for (EditorProperty *E : editor_property_map[prop]) {
- E->update_property();
- E->update_revert_and_pin_status();
- E->update_cache();
+ } else {
+ while (pending.size()) {
+ StringName prop = pending.front()->get();
+ if (editor_property_map.has(prop)) {
+ for (EditorProperty *E : editor_property_map[prop]) {
+ E->update_property();
+ E->update_revert_and_pin_status();
+ E->update_cache();
+ }
}
+ pending.erase(pending.front());
}
- pending.erase(pending.front());
}
- }
- changing--;
- }
+ changing--;
+ } break;
- if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- _update_inspector_bg();
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ _update_inspector_bg();
- update_tree();
+ update_tree();
+ } break;
}
}
diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp
index 45d7f8d697..d9ba4139c2 100644
--- a/editor/editor_log.cpp
+++ b/editor/editor_log.cpp
@@ -93,12 +93,11 @@ void EditorLog::_notification(int p_what) {
_update_theme();
_load_state();
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
_rebuild_log();
} break;
- default:
- break;
}
}
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 208640a2e3..cda5e6b537 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -2908,7 +2908,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
command_palette->open_popup();
} break;
case HELP_DOCS: {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/");
+ OS::get_singleton()->shell_open(VERSION_DOCS_URL "/");
} break;
case HELP_QA: {
OS::get_singleton()->shell_open("https://godotengine.org/qa/");
@@ -3916,8 +3916,9 @@ Ref<Script> EditorNode::get_object_custom_type_base(const Object *p_object) cons
if (script.is_valid()) {
// Uncommenting would break things! Consider adding a parameter if you need it.
// StringName name = EditorNode::get_editor_data().script_class_get_name(base_script->get_path());
- // if (name != StringName())
+ // if (name != StringName()) {
// return name;
+ // }
// should probably be deprecated in 4.x
StringName base = script->get_instance_base_type();
@@ -5745,7 +5746,6 @@ static void _execute_thread(void *p_ud) {
}
eta->done.set();
- ;
}
int EditorNode::execute_and_show_output(const String &p_title, const String &p_path, const List<String> &p_arguments, bool p_close_on_ok, bool p_close_on_errors) {
diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp
index 10a2af0cb0..5166200ee3 100644
--- a/editor/editor_plugin.cpp
+++ b/editor/editor_plugin.cpp
@@ -849,11 +849,14 @@ void EditorPlugin::_editor_project_settings_changed() {
emit_signal(SNAME("project_settings_changed"));
}
void EditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
- }
- if (p_what == NOTIFICATION_EXIT_TREE) {
- EditorNode::get_singleton()->disconnect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
+ EditorNode::get_singleton()->disconnect("project_settings_changed", callable_mp(this, &EditorPlugin::_editor_project_settings_changed));
+ } break;
}
}
diff --git a/editor/editor_plugin_settings.cpp b/editor/editor_plugin_settings.cpp
index aa59337ac0..401414ae50 100644
--- a/editor/editor_plugin_settings.cpp
+++ b/editor/editor_plugin_settings.cpp
@@ -39,11 +39,15 @@
#include "scene/gui/margin_container.h"
void EditorPluginSettings::_notification(int p_what) {
- if (p_what == NOTIFICATION_WM_WINDOW_FOCUS_IN) {
- update_plugins();
- } else if (p_what == Node::NOTIFICATION_READY) {
- plugin_config_dialog->connect("plugin_ready", Callable(EditorNode::get_singleton(), "_on_plugin_ready"));
- plugin_list->connect("button_pressed", callable_mp(this, &EditorPluginSettings::_cell_button_pressed));
+ switch (p_what) {
+ case NOTIFICATION_WM_WINDOW_FOCUS_IN: {
+ update_plugins();
+ } break;
+
+ case Node::NOTIFICATION_READY: {
+ plugin_config_dialog->connect("plugin_ready", Callable(EditorNode::get_singleton(), "_on_plugin_ready"));
+ plugin_list->connect("button_pressed", callable_mp(this, &EditorPluginSettings::_cell_button_pressed));
+ } break;
}
}
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index 65c4ace468..68a3fabe1e 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -166,7 +166,6 @@ void EditorPropertyMultilineText::_notification(int p_what) {
Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
text->set_custom_minimum_size(Vector2(0, font->get_height(font_size) * 6));
-
} break;
}
}
@@ -294,11 +293,11 @@ void EditorPropertyTextEnum::_bind_methods() {
void EditorPropertyTextEnum::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
edit_button->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
accept_button->set_icon(get_theme_icon(SNAME("ImportCheck"), SNAME("EditorIcons")));
cancel_button->set_icon(get_theme_icon(SNAME("ImportFail"), SNAME("EditorIcons")));
- break;
+ } break;
}
}
@@ -374,8 +373,11 @@ void EditorPropertyLocale::setup(const String &p_hint_text) {
}
void EditorPropertyLocale::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- locale_edit->set_icon(get_theme_icon(SNAME("Translation"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ locale_edit->set_icon(get_theme_icon(SNAME("Translation"), SNAME("EditorIcons")));
+ } break;
}
}
@@ -467,8 +469,11 @@ void EditorPropertyPath::set_save_mode() {
}
void EditorPropertyPath::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- path_edit->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ path_edit->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ } break;
}
}
@@ -1065,9 +1070,6 @@ void EditorPropertyLayersGrid::_notification(int p_what) {
update();
}
} break;
-
- default:
- break;
}
}
@@ -1619,11 +1621,14 @@ void EditorPropertyVector2::update_property() {
}
void EditorPropertyVector2::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 2; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 2; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -1710,11 +1715,14 @@ void EditorPropertyRect2::update_property() {
}
void EditorPropertyRect2::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 4; i++) {
- spin[i]->set_custom_label_color(true, colors[i % 2]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 4; i++) {
+ spin[i]->set_custom_label_color(true, colors[i % 2]);
+ }
+ } break;
}
}
@@ -1836,11 +1844,14 @@ Vector3 EditorPropertyVector3::get_vector() {
}
void EditorPropertyVector3::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 3; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 3; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -1923,11 +1934,14 @@ void EditorPropertyVector2i::update_property() {
}
void EditorPropertyVector2i::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 2; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 2; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -2014,11 +2028,14 @@ void EditorPropertyRect2i::update_property() {
}
void EditorPropertyRect2i::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 4; i++) {
- spin[i]->set_custom_label_color(true, colors[i % 2]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 4; i++) {
+ spin[i]->set_custom_label_color(true, colors[i % 2]);
+ }
+ } break;
}
}
@@ -2113,11 +2130,14 @@ void EditorPropertyVector3i::update_property() {
}
void EditorPropertyVector3i::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 3; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 3; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -2203,11 +2223,14 @@ void EditorPropertyPlane::update_property() {
}
void EditorPropertyPlane::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 4; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 4; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -2294,11 +2317,14 @@ void EditorPropertyQuaternion::update_property() {
}
void EditorPropertyQuaternion::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 4; i++) {
- spin[i]->set_custom_label_color(true, colors[i]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 4; i++) {
+ spin[i]->set_custom_label_color(true, colors[i]);
+ }
+ } break;
}
}
@@ -2388,11 +2414,14 @@ void EditorPropertyAABB::update_property() {
}
void EditorPropertyAABB::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 6; i++) {
- spin[i]->set_custom_label_color(true, colors[i % 3]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 6; i++) {
+ spin[i]->set_custom_label_color(true, colors[i % 3]);
+ }
+ } break;
}
}
@@ -2469,16 +2498,19 @@ void EditorPropertyTransform2D::update_property() {
}
void EditorPropertyTransform2D::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 6; i++) {
- // For Transform2D, use the 4th color (cyan) for the origin vector.
- if (i % 3 == 2) {
- spin[i]->set_custom_label_color(true, colors[3]);
- } else {
- spin[i]->set_custom_label_color(true, colors[i % 3]);
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 6; i++) {
+ // For Transform2D, use the 4th color (cyan) for the origin vector.
+ if (i % 3 == 2) {
+ spin[i]->set_custom_label_color(true, colors[3]);
+ } else {
+ spin[i]->set_custom_label_color(true, colors[i % 3]);
+ }
}
- }
+ } break;
}
}
@@ -2562,11 +2594,14 @@ void EditorPropertyBasis::update_property() {
}
void EditorPropertyBasis::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 9; i++) {
- spin[i]->set_custom_label_color(true, colors[i % 3]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 9; i++) {
+ spin[i]->set_custom_label_color(true, colors[i % 3]);
+ }
+ } break;
}
}
@@ -2656,11 +2691,14 @@ void EditorPropertyTransform3D::update_using_transform(Transform3D p_transform)
}
void EditorPropertyTransform3D::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- const Color *colors = _get_property_colors();
- for (int i = 0; i < 12; i++) {
- spin[i]->set_custom_label_color(true, colors[i % 4]);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ const Color *colors = _get_property_colors();
+ for (int i = 0; i < 12; i++) {
+ spin[i]->set_custom_label_color(true, colors[i % 4]);
+ }
+ } break;
}
}
@@ -2902,9 +2940,12 @@ void EditorPropertyNodePath::setup(const NodePath &p_base_hint, Vector<StringNam
}
void EditorPropertyNodePath::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- Ref<Texture2D> t = get_theme_icon(SNAME("Clear"), SNAME("EditorIcons"));
- clear->set_icon(t);
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ Ref<Texture2D> t = get_theme_icon(SNAME("Clear"), SNAME("EditorIcons"));
+ clear->set_icon(t);
+ } break;
}
}
diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp
index 3bd5abb296..61261af608 100644
--- a/editor/editor_properties_array_dict.cpp
+++ b/editor/editor_properties_array_dict.cpp
@@ -504,34 +504,37 @@ void EditorPropertyArray::drop_data_fw(const Point2 &p_point, const Variant &p_d
}
void EditorPropertyArray::_notification(int p_what) {
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- change_type->clear();
- for (int i = 0; i < Variant::VARIANT_MAX; i++) {
- String type = Variant::get_type_name(Variant::Type(i));
- change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
- }
- change_type->add_separator();
- change_type->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Remove Item"), Variant::VARIANT_MAX);
+ switch (p_what) {
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_ENTER_TREE: {
+ change_type->clear();
+ for (int i = 0; i < Variant::VARIANT_MAX; i++) {
+ String type = Variant::get_type_name(Variant::Type(i));
+ change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
+ }
+ change_type->add_separator();
+ change_type->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Remove Item"), Variant::VARIANT_MAX);
- if (Object::cast_to<Button>(button_add_item)) {
- button_add_item->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- }
- }
+ if (Object::cast_to<Button>(button_add_item)) {
+ button_add_item->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ }
+ } break;
- if (p_what == NOTIFICATION_DRAG_BEGIN) {
- if (is_visible_in_tree()) {
- if (_is_drop_valid(get_viewport()->gui_get_drag_data())) {
- dropping = true;
- edit->update();
+ case NOTIFICATION_DRAG_BEGIN: {
+ if (is_visible_in_tree()) {
+ if (_is_drop_valid(get_viewport()->gui_get_drag_data())) {
+ dropping = true;
+ edit->update();
+ }
}
- }
- }
+ } break;
- if (p_what == NOTIFICATION_DRAG_END) {
- if (dropping) {
- dropping = false;
- edit->update();
- }
+ case NOTIFICATION_DRAG_END: {
+ if (dropping) {
+ dropping = false;
+ edit->update();
+ }
+ } break;
}
}
@@ -1151,18 +1154,21 @@ void EditorPropertyDictionary::_object_id_selected(const StringName &p_property,
}
void EditorPropertyDictionary::_notification(int p_what) {
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- change_type->clear();
- for (int i = 0; i < Variant::VARIANT_MAX; i++) {
- String type = Variant::get_type_name(Variant::Type(i));
- change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
- }
- change_type->add_separator();
- change_type->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Remove Item"), Variant::VARIANT_MAX);
+ switch (p_what) {
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_ENTER_TREE: {
+ change_type->clear();
+ for (int i = 0; i < Variant::VARIANT_MAX; i++) {
+ String type = Variant::get_type_name(Variant::Type(i));
+ change_type->add_icon_item(get_theme_icon(type, SNAME("EditorIcons")), type, i);
+ }
+ change_type->add_separator();
+ change_type->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Remove Item"), Variant::VARIANT_MAX);
- if (Object::cast_to<Button>(button_add_item)) {
- button_add_item->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- }
+ if (Object::cast_to<Button>(button_add_item)) {
+ button_add_item->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ }
+ } break;
}
}
diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp
index 98f315f0db..85d304ec5d 100644
--- a/editor/editor_run_native.cpp
+++ b/editor/editor_run_native.cpp
@@ -35,61 +35,63 @@
#include "editor/editor_scale.h"
void EditorRunNative::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) {
- Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(i);
- if (eep.is_null()) {
- continue;
- }
- Ref<ImageTexture> icon = eep->get_run_icon();
- if (!icon.is_null()) {
- Ref<Image> im = icon->get_image();
- im = im->duplicate();
- im->clear_mipmaps();
- if (!im->is_empty()) {
- im->resize(16 * EDSCALE, 16 * EDSCALE);
- Ref<ImageTexture> small_icon;
- small_icon.instantiate();
- small_icon->create_from_image(im);
- MenuButton *mb = memnew(MenuButton);
- mb->get_popup()->connect("id_pressed", callable_mp(this, &EditorRunNative::run_native), varray(i));
- mb->connect("pressed", callable_mp(this, &EditorRunNative::run_native), varray(-1, i));
- mb->set_icon(small_icon);
- add_child(mb);
- menus[i] = mb;
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) {
+ Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(i);
+ if (eep.is_null()) {
+ continue;
+ }
+ Ref<ImageTexture> icon = eep->get_run_icon();
+ if (!icon.is_null()) {
+ Ref<Image> im = icon->get_image();
+ im = im->duplicate();
+ im->clear_mipmaps();
+ if (!im->is_empty()) {
+ im->resize(16 * EDSCALE, 16 * EDSCALE);
+ Ref<ImageTexture> small_icon;
+ small_icon.instantiate();
+ small_icon->create_from_image(im);
+ MenuButton *mb = memnew(MenuButton);
+ mb->get_popup()->connect("id_pressed", callable_mp(this, &EditorRunNative::run_native), varray(i));
+ mb->connect("pressed", callable_mp(this, &EditorRunNative::run_native), varray(-1, i));
+ mb->set_icon(small_icon);
+ add_child(mb);
+ menus[i] = mb;
+ }
}
}
- }
- }
+ } break;
- if (p_what == NOTIFICATION_PROCESS) {
- bool changed = EditorExport::get_singleton()->poll_export_platforms() || first;
-
- if (changed) {
- for (KeyValue<int, MenuButton *> &E : menus) {
- Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(E.key);
- MenuButton *mb = E.value;
- int dc = eep->get_options_count();
-
- if (dc == 0) {
- mb->hide();
- } else {
- mb->get_popup()->clear();
- mb->show();
- if (dc == 1) {
- mb->set_tooltip(eep->get_option_tooltip(0));
+ case NOTIFICATION_PROCESS: {
+ bool changed = EditorExport::get_singleton()->poll_export_platforms() || first;
+
+ if (changed) {
+ for (KeyValue<int, MenuButton *> &E : menus) {
+ Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(E.key);
+ MenuButton *mb = E.value;
+ int dc = eep->get_options_count();
+
+ if (dc == 0) {
+ mb->hide();
} else {
- mb->set_tooltip(eep->get_options_tooltip());
- for (int i = 0; i < dc; i++) {
- mb->get_popup()->add_icon_item(eep->get_option_icon(i), eep->get_option_label(i));
- mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() - 1, eep->get_option_tooltip(i));
+ mb->get_popup()->clear();
+ mb->show();
+ if (dc == 1) {
+ mb->set_tooltip(eep->get_option_tooltip(0));
+ } else {
+ mb->set_tooltip(eep->get_options_tooltip());
+ for (int i = 0; i < dc; i++) {
+ mb->get_popup()->add_icon_item(eep->get_option_icon(i), eep->get_option_label(i));
+ mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() - 1, eep->get_option_tooltip(i));
+ }
}
}
}
- }
- first = false;
- }
+ first = false;
+ }
+ } break;
}
}
diff --git a/editor/editor_settings_dialog.cpp b/editor/editor_settings_dialog.cpp
index e4ad62c470..18324f9971 100644
--- a/editor/editor_settings_dialog.cpp
+++ b/editor/editor_settings_dialog.cpp
@@ -121,14 +121,17 @@ void EditorSettingsDialog::_notification(int p_what) {
set_process_unhandled_input(false);
}
} break;
+
case NOTIFICATION_READY: {
undo_redo->set_method_notify_callback(EditorDebuggerNode::_method_changeds, nullptr);
undo_redo->set_property_notify_callback(EditorDebuggerNode::_property_changeds, nullptr);
undo_redo->set_commit_notify_callback(_undo_redo_callback, this);
} break;
+
case NOTIFICATION_ENTER_TREE: {
_update_icons();
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
_update_icons();
// Update theme colors.
@@ -366,6 +369,11 @@ void EditorSettingsDialog::_update_shortcuts() {
Array events; // Need to get the list of events into an array so it can be set as metadata on the item.
Vector<String> event_strings;
+ // Skip non-builtin actions.
+ if (!InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().has(action_name)) {
+ continue;
+ }
+
List<Ref<InputEvent>> all_default_events = InputMap::get_singleton()->get_builtins_with_feature_overrides_applied().find(action_name).value();
List<Ref<InputEventKey>> key_default_events;
// Remove all non-key events from the defaults. Only check keys, since we are in the editor.
diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp
index ccebca4cc9..a4a9e691a0 100644
--- a/editor/editor_spin_slider.cpp
+++ b/editor/editor_spin_slider.cpp
@@ -430,47 +430,49 @@ void EditorSpinSlider::_draw_spin_slider() {
void EditorSpinSlider::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
_update_value_input_stylebox();
- break;
+ } break;
- case NOTIFICATION_INTERNAL_PROCESS:
+ case NOTIFICATION_INTERNAL_PROCESS: {
if (value_input_dirty) {
value_input_dirty = false;
value_input->set_text(get_text_value());
}
set_process_internal(false);
- break;
+ } break;
- case NOTIFICATION_DRAW:
+ case NOTIFICATION_DRAW: {
_draw_spin_slider();
- break;
+ } break;
case NOTIFICATION_WM_WINDOW_FOCUS_IN:
case NOTIFICATION_WM_WINDOW_FOCUS_OUT:
- case NOTIFICATION_EXIT_TREE:
+ case NOTIFICATION_EXIT_TREE: {
if (grabbing_spinner) {
grabber->hide();
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
grabbing_spinner = false;
grabbing_spinner_attempt = false;
}
- break;
+ } break;
- case NOTIFICATION_MOUSE_ENTER:
+ case NOTIFICATION_MOUSE_ENTER: {
mouse_over_spin = true;
update();
- break;
- case NOTIFICATION_MOUSE_EXIT:
+ } break;
+
+ case NOTIFICATION_MOUSE_EXIT: {
mouse_over_spin = false;
update();
- break;
- case NOTIFICATION_FOCUS_ENTER:
+ } break;
+
+ case NOTIFICATION_FOCUS_ENTER: {
if ((Input::get_singleton()->is_action_pressed("ui_focus_next") || Input::get_singleton()->is_action_pressed("ui_focus_prev")) && !value_input_just_closed) {
_focus_entered();
}
value_input_just_closed = false;
- break;
+ } break;
}
}
diff --git a/editor/editor_toaster.cpp b/editor/editor_toaster.cpp
index f96df86682..319b4709fe 100644
--- a/editor/editor_toaster.cpp
+++ b/editor/editor_toaster.cpp
@@ -104,6 +104,7 @@ void EditorToaster::_notification(int p_what) {
main_button->update();
}
} break;
+
case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: {
if (vbox_container->is_visible()) {
@@ -134,12 +135,11 @@ void EditorToaster::_notification(int p_what) {
main_button->update();
disable_notifications_button->update();
} break;
+
case NOTIFICATION_TRANSFORM_CHANGED: {
_update_vbox_position();
_update_disable_notifications_button();
} break;
- default:
- break;
}
}
diff --git a/editor/editor_translation.cpp b/editor/editor_translation.cpp
index 98248f3a87..f64adcf0a1 100644
--- a/editor/editor_translation.cpp
+++ b/editor/editor_translation.cpp
@@ -56,7 +56,8 @@ void load_editor_translations(const String &p_locale) {
if (etl->lang == p_locale) {
Vector<uint8_t> data;
data.resize(etl->uncomp_size);
- Compression::decompress(data.ptrw(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE);
+ int ret = Compression::decompress(data.ptrw(), etl->uncomp_size, etl->data, etl->comp_size, Compression::MODE_DEFLATE);
+ ERR_FAIL_COND_MSG(ret == -1, "Compressed file is corrupt.");
FileAccessMemory *fa = memnew(FileAccessMemory);
fa->open_custom(data.ptr(), data.size());
@@ -80,7 +81,8 @@ void load_doc_translations(const String &p_locale) {
if (dtl->lang == p_locale) {
Vector<uint8_t> data;
data.resize(dtl->uncomp_size);
- Compression::decompress(data.ptrw(), dtl->uncomp_size, dtl->data, dtl->comp_size, Compression::MODE_DEFLATE);
+ int ret = Compression::decompress(data.ptrw(), dtl->uncomp_size, dtl->data, dtl->comp_size, Compression::MODE_DEFLATE);
+ ERR_FAIL_COND_MSG(ret == -1, "Compressed file is corrupt.");
FileAccessMemory *fa = memnew(FileAccessMemory);
fa->open_custom(data.ptr(), data.size());
diff --git a/editor/editor_zoom_widget.cpp b/editor/editor_zoom_widget.cpp
index abfa383297..c8099c9a0b 100644
--- a/editor/editor_zoom_widget.cpp
+++ b/editor/editor_zoom_widget.cpp
@@ -144,12 +144,10 @@ void EditorZoomWidget::set_zoom_by_increments(int p_increment_count, bool p_inte
void EditorZoomWidget::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
zoom_minus->set_icon(get_theme_icon(SNAME("ZoomLess"), SNAME("EditorIcons")));
zoom_plus->set_icon(get_theme_icon(SNAME("ZoomMore"), SNAME("EditorIcons")));
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp
index 929f8b8d2c..eff9185c71 100644
--- a/editor/find_in_files.cpp
+++ b/editor/find_in_files.cpp
@@ -103,9 +103,11 @@ void FindInFiles::set_filter(const Set<String> &exts) {
_extension_filter = exts;
}
-void FindInFiles::_notification(int p_notification) {
- if (p_notification == NOTIFICATION_PROCESS) {
- _process();
+void FindInFiles::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ _process();
+ } break;
}
}
@@ -456,26 +458,28 @@ Set<String> FindInFilesDialog::get_filter() const {
}
void FindInFilesDialog::_notification(int p_what) {
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (is_visible()) {
- // Doesn't work more than once if not deferred...
- _search_text_line_edit->call_deferred(SNAME("grab_focus"));
- _search_text_line_edit->select_all();
- // Extensions might have changed in the meantime, we clean them and instance them again.
- for (int i = 0; i < _filters_container->get_child_count(); i++) {
- _filters_container->get_child(i)->queue_delete();
- }
- Array exts = ProjectSettings::get_singleton()->get("editor/script/search_in_file_extensions");
- for (int i = 0; i < exts.size(); ++i) {
- CheckBox *cb = memnew(CheckBox);
- cb->set_text(exts[i]);
- if (!_filters_preferences.has(exts[i])) {
- _filters_preferences[exts[i]] = true;
+ switch (p_what) {
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (is_visible()) {
+ // Doesn't work more than once if not deferred...
+ _search_text_line_edit->call_deferred(SNAME("grab_focus"));
+ _search_text_line_edit->select_all();
+ // Extensions might have changed in the meantime, we clean them and instance them again.
+ for (int i = 0; i < _filters_container->get_child_count(); i++) {
+ _filters_container->get_child(i)->queue_delete();
+ }
+ Array exts = ProjectSettings::get_singleton()->get("editor/script/search_in_file_extensions");
+ for (int i = 0; i < exts.size(); ++i) {
+ CheckBox *cb = memnew(CheckBox);
+ cb->set_text(exts[i]);
+ if (!_filters_preferences.has(exts[i])) {
+ _filters_preferences[exts[i]] = true;
+ }
+ cb->set_pressed(_filters_preferences[exts[i]]);
+ _filters_container->add_child(cb);
}
- cb->set_pressed(_filters_preferences[exts[i]]);
- _filters_container->add_child(cb);
}
- }
+ } break;
}
}
@@ -687,11 +691,15 @@ void FindInFilesPanel::stop_search() {
}
void FindInFilesPanel::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- _progress_bar->set_as_ratio(_finder->get_progress());
- } else if (p_what == NOTIFICATION_THEME_CHANGED) {
- _search_text_label->add_theme_font_override("font", get_theme_font(SNAME("source"), SNAME("EditorFonts")));
- _results_display->add_theme_font_override("font", get_theme_font(SNAME("source"), SNAME("EditorFonts")));
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ _progress_bar->set_as_ratio(_finder->get_progress());
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED: {
+ _search_text_label->add_theme_font_override("font", get_theme_font(SNAME("source"), SNAME("EditorFonts")));
+ _results_display->add_theme_font_override("font", get_theme_font(SNAME("source"), SNAME("EditorFonts")));
+ } break;
}
}
diff --git a/editor/find_in_files.h b/editor/find_in_files.h
index fca6910f1c..1b6666b554 100644
--- a/editor/find_in_files.h
+++ b/editor/find_in_files.h
@@ -60,7 +60,7 @@ public:
float get_progress() const;
protected:
- void _notification(int p_notification);
+ void _notification(int p_what);
static void _bind_methods();
diff --git a/editor/import/collada.cpp b/editor/import/collada.cpp
index 605f385de2..fe32399fc6 100644
--- a/editor/import/collada.cpp
+++ b/editor/import/collada.cpp
@@ -1009,11 +1009,6 @@ void Collada::_parse_mesh_geometry(XMLParser &parser, String p_id, String p_name
String source = _uri_to_id(parser.get_attribute_value("source"));
if (semantic == "TEXCOORD") {
- /*
- if (parser.has_attribute("set"))// a texcoord
- semantic+=parser.get_attribute_value("set");
- else
- semantic="TEXCOORD0";*/
semantic = "TEXCOORD" + itos(last_ref++);
}
int offset = parser.get_attribute_value("offset").to_int();
@@ -1194,11 +1189,6 @@ void Collada::_parse_skin_controller(XMLParser &parser, String p_id) {
skindata.weights = weights;
}
- /*
- else if (!parser.is_empty())
- parser.skip_section();
- */
-
} else if (parser.get_node_type() == XMLParser::NODE_ELEMENT_END && parser.get_node_name() == "skin") {
break;
}
@@ -1258,19 +1248,8 @@ void Collada::_parse_morph_controller(XMLParser &parser, String p_id) {
}
} else if (section == "Name_array" || section == "IDREF_array") {
// create a new array and read it.
-
- /*
- if (section=="IDREF_array")
- morphdata.use_idrefs=true;
- */
if (morphdata.sources.has(current_source)) {
morphdata.sources[current_source].sarray = _read_string_array(parser);
- /*
- if (section=="IDREF_array") {
- Vector<String> sa = morphdata.sources[current_source].sarray;
- for(int i=0;i<sa.size();i++)
- state.idref_joints.insert(sa[i]);
- }*/
COLLADA_PRINT("section: " + current_source + " read " + itos(morphdata.sources[current_source].array.size()) + " values.");
}
} else if (section == "technique_common") {
@@ -1303,11 +1282,6 @@ void Collada::_parse_morph_controller(XMLParser &parser, String p_id) {
}
}
}
- /*
- else if (!parser.is_empty())
- parser.skip_section();
- */
-
} else if (parser.get_node_type() == XMLParser::NODE_ELEMENT_END && parser.get_node_name() == "morph") {
break;
}
diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp
index 864e69a16e..ebfb0b32fb 100644
--- a/editor/import/dynamic_font_import_settings.cpp
+++ b/editor/import/dynamic_font_import_settings.cpp
@@ -560,7 +560,7 @@ void DynamicFontImportSettings::_variation_changed(const String &p_edited_proper
void DynamicFontImportSettings::_variations_validate() {
String warn;
if (!vars_list_root->get_first_child()) {
- warn = TTR("Warinig: There are no configurations specified, no glyphs will be pre-rendered.");
+ warn = TTR("Warning: There are no configurations specified, no glyphs will be pre-rendered.");
}
for (TreeItem *vars_item_a = vars_list_root->get_first_child(); vars_item_a; vars_item_a = vars_item_a->get_next()) {
Ref<DynamicFontImportSettingsData> import_variation_data_a = vars_item_a->get_metadata(0);
@@ -575,7 +575,7 @@ void DynamicFontImportSettings::_variations_validate() {
match = match && (import_variation_data_b->settings[E->key()] == E->get());
}
if (match) {
- warn = TTR("Warinig: Multiple configurations have identical settings. Duplicates will be ignored.");
+ warn = TTR("Warning: Multiple configurations have identical settings. Duplicates will be ignored.");
break;
}
}
@@ -900,13 +900,18 @@ String DynamicFontImportSettings::_pad_zeros(const String &p_hex) const {
}
void DynamicFontImportSettings::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- connect("confirmed", callable_mp(this, &DynamicFontImportSettings::_re_import));
- } else if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- add_lang->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- add_script->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- add_var->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- add_ot->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ connect("confirmed", callable_mp(this, &DynamicFontImportSettings::_re_import));
+ } break;
+
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ add_lang->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ add_script->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ add_var->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ add_ot->set_icon(add_var->get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp
index c1ae5be0bb..3b5a82b2c3 100644
--- a/editor/import/editor_import_collada.cpp
+++ b/editor/import/editor_import_collada.cpp
@@ -1535,7 +1535,7 @@ void ColladaImport::create_animation(int p_clip, bool p_import_value_tracks) {
bool has_rotation = false;
bool has_scale = false;
- for (int i = 0; cn->xform_list.size(); i++) {
+ for (int i = 0; i < cn->xform_list.size(); i++) {
switch (cn->xform_list[i].op) {
case Collada::Node::XForm::OP_ROTATE: {
has_rotation = true;
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp
index 96645665aa..9042f1e32c 100644
--- a/editor/import/resource_importer_obj.cpp
+++ b/editor/import/resource_importer_obj.cpp
@@ -317,8 +317,6 @@ static Error _parse_obj(const String &p_path, List<Ref<Mesh>> &r_meshes, bool p_
ERR_FAIL_INDEX_V(vtx, vertices.size(), ERR_FILE_CORRUPT);
Vector3 vertex = vertices[vtx];
- //if (weld_vertices)
- // vertex.snap(Vector3(weld_tolerance, weld_tolerance, weld_tolerance));
if (!smoothing) {
smooth_group++;
}
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp
index 3eb12353b5..e7c605aaf0 100644
--- a/editor/import/resource_importer_scene.cpp
+++ b/editor/import/resource_importer_scene.cpp
@@ -1649,14 +1649,6 @@ void ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_m
}
}
- if (generate_lods) {
- src_mesh_node->get_mesh()->generate_lods(merge_angle, split_angle);
- }
-
- if (create_shadow_meshes) {
- src_mesh_node->get_mesh()->create_shadow_mesh();
- }
-
if (bake_lightmaps) {
Transform3D xf;
Node3D *n = src_mesh_node;
@@ -1689,6 +1681,14 @@ void ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_m
}
}
+ if (generate_lods) {
+ src_mesh_node->get_mesh()->generate_lods(merge_angle, split_angle);
+ }
+
+ if (create_shadow_meshes) {
+ src_mesh_node->get_mesh()->create_shadow_mesh();
+ }
+
if (!save_to_file.is_empty()) {
Ref<Mesh> existing = Ref<Resource>(ResourceCache::get(save_to_file));
if (existing.is_valid()) {
diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp
index d2a9fe2538..cd481e009e 100644
--- a/editor/import/resource_importer_texture_atlas.cpp
+++ b/editor/import/resource_importer_texture_atlas.cpp
@@ -75,6 +75,7 @@ void ResourceImporterTextureAtlas::get_import_options(const String &p_path, List
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "trim_alpha_border_from_region"), true));
}
String ResourceImporterTextureAtlas::get_option_group_file() const {
@@ -210,14 +211,18 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
pack_data.is_cropped = options["crop_to_region"];
int mode = options["import_mode"];
+ bool trim_alpha_border_from_region = options["trim_alpha_border_from_region"];
if (mode == IMPORT_MODE_REGION) {
pack_data.is_mesh = false;
EditorAtlasPacker::Chart chart;
- //clip a region from the image
- Rect2 used_rect = image->get_used_rect();
+ Rect2 used_rect = Rect2(Vector2(), image->get_size());
+ if (trim_alpha_border_from_region) {
+ // Clip a region from the image.
+ used_rect = image->get_used_rect();
+ }
pack_data.region = used_rect;
chart.vertices.push_back(used_rect.position);
diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h
index a5b576ceb9..2316ce80e5 100644
--- a/editor/import/resource_importer_wav.h
+++ b/editor/import/resource_importer_wav.h
@@ -28,8 +28,8 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef RESOURCEIMPORTWAV_H
-#define RESOURCEIMPORTWAV_H
+#ifndef RESOURCE_IMPORTER_WAV_H
+#define RESOURCE_IMPORTER_WAV_H
#include "core/io/resource_importer.h"
@@ -50,9 +50,6 @@ public:
virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
static void _compress_ima_adpcm(const Vector<float> &p_data, Vector<uint8_t> &dst_data) {
- /*p_sample_data->data = (void*)malloc(len);
- xm_s8 *dataptr=(xm_s8*)p_sample_data->data;*/
-
static const int16_t _ima_adpcm_step_table[89] = {
7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
@@ -81,15 +78,14 @@ public:
int i, step_idx = 0, prev = 0;
uint8_t *out = w;
- //int16_t xm_prev=0;
const float *in = p_data.ptr();
- /* initial value is zero */
+ // Initial value is zero.
*(out++) = 0;
*(out++) = 0;
- /* Table index initial value */
+ // Table index initial value.
*(out++) = 0;
- /* unused */
+ // Unused.
*(out++) = 0;
for (i = 0; i < datalen; i++) {
@@ -101,15 +97,8 @@ public:
xm_sample = 0;
} else {
xm_sample = CLAMP(in[i] * 32767.0, -32768, 32767);
- /*
- if (xm_sample==32767 || xm_sample==-32768)
- printf("clippy!\n",xm_sample);
- */
}
- //xm_sample=xm_sample+xm_prev;
- //xm_prev=xm_sample;
-
diff = (int)xm_sample - prev;
nibble = 0;
@@ -129,7 +118,7 @@ public:
step >>= 1;
mask >>= 1;
- };
+ }
if (nibble & 8) {
prev -= vpdiff;
@@ -137,20 +126,10 @@ public:
prev += vpdiff;
}
- if (prev > 32767) {
- //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip up %i\n",i,xm_sample,prev,diff,vpdiff,prev);
- prev = 32767;
- } else if (prev < -32768) {
- //printf("%i,xms %i, prev %i,diff %i, vpdiff %i, clip down %i\n",i,xm_sample,prev,diff,vpdiff,prev);
- prev = -32768;
- }
+ prev = CLAMP(prev, -32768, 32767);
step_idx += _ima_adpcm_index_table[nibble];
- if (step_idx < 0) {
- step_idx = 0;
- } else if (step_idx > 88) {
- step_idx = 88;
- }
+ step_idx = CLAMP(step_idx, 0, 88);
if (i & 1) {
*out |= nibble << 4;
@@ -158,7 +137,6 @@ public:
} else {
*out = nibble;
}
- /*dataptr[i]=prev>>8;*/
}
}
@@ -167,4 +145,4 @@ public:
ResourceImporterWAV();
};
-#endif // RESOURCEIMPORTWAV_H
+#endif // RESOURCE_IMPORTER_WAV_H
diff --git a/editor/import/scene_import_settings.cpp b/editor/import/scene_import_settings.cpp
index a3fb753d7f..4e06253041 100644
--- a/editor/import/scene_import_settings.cpp
+++ b/editor/import/scene_import_settings.cpp
@@ -377,9 +377,10 @@ void SceneImportSettings::_update_view_gizmos() {
continue;
}
- MeshInstance3D *collider_view = static_cast<MeshInstance3D *>(mesh_node->find_node("collider_view"));
- CRASH_COND_MSG(collider_view == nullptr, "This is unreachable, since the collider view is always created even when the collision is not used! If this is triggered there is a bug on the function `_fill_scene`.");
+ TypedArray<Node> descendants = mesh_node->find_nodes("collider_view", "MeshInstance3D");
+ CRASH_COND_MSG(descendants.is_empty(), "This is unreachable, since the collider view is always created even when the collision is not used! If this is triggered there is a bug on the function `_fill_scene`.");
+ MeshInstance3D *collider_view = static_cast<MeshInstance3D *>(descendants[0].operator Object *());
collider_view->set_visible(generate_collider);
if (generate_collider) {
// This collider_view doesn't have a mesh so we need to generate a new one.
@@ -837,8 +838,10 @@ void SceneImportSettings::_re_import() {
}
void SceneImportSettings::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- connect("confirmed", callable_mp(this, &SceneImportSettings::_re_import));
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ connect("confirmed", callable_mp(this, &SceneImportSettings::_re_import));
+ } break;
}
}
diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp
index 767e2a7fad..ca979c094f 100644
--- a/editor/import_defaults_editor.cpp
+++ b/editor/import_defaults_editor.cpp
@@ -80,8 +80,10 @@ protected:
};
void ImportDefaultsEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_PREDELETE) {
- inspector->edit(nullptr);
+ switch (p_what) {
+ case NOTIFICATION_PREDELETE: {
+ inspector->edit(nullptr);
+ } break;
}
}
diff --git a/editor/localization_editor.cpp b/editor/localization_editor.cpp
index 401ba02099..cd9986d527 100644
--- a/editor/localization_editor.cpp
+++ b/editor/localization_editor.cpp
@@ -40,25 +40,27 @@
#include "scene/gui/control.h"
void LocalizationEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- translation_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_translation_delete));
- translation_pot_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_pot_delete));
-
- List<String> tfn;
- ResourceLoader::get_recognized_extensions_for_type("Translation", &tfn);
- for (const String &E : tfn) {
- translation_file_open->add_filter("*." + E);
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ translation_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_translation_delete));
+ translation_pot_list->connect("button_pressed", callable_mp(this, &LocalizationEditor::_pot_delete));
+
+ List<String> tfn;
+ ResourceLoader::get_recognized_extensions_for_type("Translation", &tfn);
+ for (const String &E : tfn) {
+ translation_file_open->add_filter("*." + E);
+ }
- List<String> rfn;
- ResourceLoader::get_recognized_extensions_for_type("Resource", &rfn);
- for (const String &E : rfn) {
- translation_res_file_open_dialog->add_filter("*." + E);
- translation_res_option_file_open_dialog->add_filter("*." + E);
- }
+ List<String> rfn;
+ ResourceLoader::get_recognized_extensions_for_type("Resource", &rfn);
+ for (const String &E : rfn) {
+ translation_res_file_open_dialog->add_filter("*." + E);
+ translation_res_option_file_open_dialog->add_filter("*." + E);
+ }
- _update_pot_file_extensions();
- pot_generate_dialog->add_filter("*.pot");
+ _update_pot_file_extensions();
+ pot_generate_dialog->add_filter("*.pot");
+ } break;
}
}
diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp
index 9b06435648..18545d3c9a 100644
--- a/editor/node_dock.cpp
+++ b/editor/node_dock.cpp
@@ -52,9 +52,12 @@ void NodeDock::_bind_methods() {
}
void NodeDock::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- connections_button->set_icon(get_theme_icon(SNAME("Signals"), SNAME("EditorIcons")));
- groups_button->set_icon(get_theme_icon(SNAME("Groups"), SNAME("EditorIcons")));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ connections_button->set_icon(get_theme_icon(SNAME("Signals"), SNAME("EditorIcons")));
+ groups_button->set_icon(get_theme_icon(SNAME("Groups"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp
index 5786d24d23..48ea3013f7 100644
--- a/editor/plugin_config_dialog.cpp
+++ b/editor/plugin_config_dialog.cpp
@@ -160,6 +160,7 @@ void PluginConfigDialog::_notification(int p_what) {
name_edit->grab_focus();
}
} break;
+
case NOTIFICATION_READY: {
connect("confirmed", callable_mp(this, &PluginConfigDialog::_on_confirmed));
get_cancel_button()->connect("pressed", callable_mp(this, &PluginConfigDialog::_on_cancelled));
diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp
index 8f6ac149aa..5a2696fff1 100644
--- a/editor/plugins/abstract_polygon_2d_editor.cpp
+++ b/editor/plugins/abstract_polygon_2d_editor.cpp
@@ -154,6 +154,7 @@ void AbstractPolygon2DEditor::_notification(int p_what) {
button_edit->set_icon(get_theme_icon(SNAME("CurveEdit"), SNAME("EditorIcons")));
button_delete->set_icon(get_theme_icon(SNAME("CurveDelete"), SNAME("EditorIcons")));
} break;
+
case NOTIFICATION_READY: {
disable_polygon_editing(false, String());
diff --git a/editor/plugins/animation_blend_space_1d_editor.cpp b/editor/plugins/animation_blend_space_1d_editor.cpp
index 4156c14a7e..fe8b462084 100644
--- a/editor/plugins/animation_blend_space_1d_editor.cpp
+++ b/editor/plugins/animation_blend_space_1d_editor.cpp
@@ -531,39 +531,42 @@ void AnimationNodeBlendSpace1DEditor::_open_editor() {
}
void AnimationNodeBlendSpace1DEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- tool_blend->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
- tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
- tool_create->set_icon(get_theme_icon(SNAME("EditKey"), SNAME("EditorIcons")));
- tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
- snap->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
- open_editor->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
- }
-
- if (p_what == NOTIFICATION_PROCESS) {
- String error;
-
- if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
- error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
- } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
- error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ tool_blend->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
+ tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
+ tool_create->set_icon(get_theme_icon(SNAME("EditKey"), SNAME("EditorIcons")));
+ tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ snap->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
+ open_editor->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ String error;
+
+ if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
+ error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
+ } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
+ error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
+ }
- if (error != error_label->get_text()) {
- error_label->set_text(error);
- if (!error.is_empty()) {
- error_panel->show();
- } else {
- error_panel->hide();
+ if (error != error_label->get_text()) {
+ error_label->set_text(error);
+ if (!error.is_empty()) {
+ error_panel->show();
+ } else {
+ error_panel->hide();
+ }
}
- }
- }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- set_process(is_visible_in_tree());
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ set_process(is_visible_in_tree());
+ } break;
}
}
diff --git a/editor/plugins/animation_blend_space_2d_editor.cpp b/editor/plugins/animation_blend_space_2d_editor.cpp
index 6d876aba44..506a709728 100644
--- a/editor/plugins/animation_blend_space_2d_editor.cpp
+++ b/editor/plugins/animation_blend_space_2d_editor.cpp
@@ -731,49 +731,52 @@ void AnimationNodeBlendSpace2DEditor::_edit_point_pos(double) {
}
void AnimationNodeBlendSpace2DEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- tool_blend->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
- tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
- tool_create->set_icon(get_theme_icon(SNAME("EditKey"), SNAME("EditorIcons")));
- tool_triangle->set_icon(get_theme_icon(SNAME("ToolTriangle"), SNAME("EditorIcons")));
- tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
- snap->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
- open_editor->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
- auto_triangles->set_icon(get_theme_icon(SNAME("AutoTriangle"), SNAME("EditorIcons")));
- interpolation->clear();
- interpolation->add_icon_item(get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")), "", 0);
- interpolation->add_icon_item(get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")), "", 1);
- interpolation->add_icon_item(get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons")), "", 2);
- }
-
- if (p_what == NOTIFICATION_PROCESS) {
- String error;
-
- if (!AnimationTreeEditor::get_singleton()->get_tree()) {
- error = TTR("BlendSpace2D does not belong to an AnimationTree node.");
- } else if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
- error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
- } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
- error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
- } else if (blend_space->get_triangle_count() == 0) {
- error = TTR("No triangles exist, so no blending can take place.");
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ tool_blend->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
+ tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
+ tool_create->set_icon(get_theme_icon(SNAME("EditKey"), SNAME("EditorIcons")));
+ tool_triangle->set_icon(get_theme_icon(SNAME("ToolTriangle"), SNAME("EditorIcons")));
+ tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ snap->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
+ open_editor->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
+ auto_triangles->set_icon(get_theme_icon(SNAME("AutoTriangle"), SNAME("EditorIcons")));
+ interpolation->clear();
+ interpolation->add_icon_item(get_theme_icon(SNAME("TrackContinuous"), SNAME("EditorIcons")), "", 0);
+ interpolation->add_icon_item(get_theme_icon(SNAME("TrackDiscrete"), SNAME("EditorIcons")), "", 1);
+ interpolation->add_icon_item(get_theme_icon(SNAME("TrackCapture"), SNAME("EditorIcons")), "", 2);
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ String error;
+
+ if (!AnimationTreeEditor::get_singleton()->get_tree()) {
+ error = TTR("BlendSpace2D does not belong to an AnimationTree node.");
+ } else if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
+ error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
+ } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
+ error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
+ } else if (blend_space->get_triangle_count() == 0) {
+ error = TTR("No triangles exist, so no blending can take place.");
+ }
- if (error != error_label->get_text()) {
- error_label->set_text(error);
- if (!error.is_empty()) {
- error_panel->show();
- } else {
- error_panel->hide();
+ if (error != error_label->get_text()) {
+ error_label->set_text(error);
+ if (!error.is_empty()) {
+ error_panel->show();
+ } else {
+ error_panel->hide();
+ }
}
- }
- }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- set_process(is_visible_in_tree());
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ set_process(is_visible_in_tree());
+ } break;
}
}
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index 14dd782b73..0b3164aada 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -734,80 +734,95 @@ void AnimationNodeBlendTreeEditor::_removed_from_graph() {
}
}
+void AnimationNodeBlendTreeEditor::_update_editor_settings() {
+ graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ graph->set_warped_panning(bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning")));
+}
+
+void AnimationNodeBlendTreeEditor::_update_theme() {
+ error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+}
+
void AnimationNodeBlendTreeEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- graph->set_warped_panning(bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning")));
- }
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ _update_editor_settings();
+ _update_theme();
+ } break;
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ _update_editor_settings();
+ } break;
- if (p_what == NOTIFICATION_THEME_CHANGED && is_visible_in_tree()) {
- _update_graph();
- }
- }
+ case NOTIFICATION_THEME_CHANGED: {
+ _update_theme();
- if (p_what == NOTIFICATION_PROCESS) {
- String error;
+ if (is_visible_in_tree()) {
+ _update_graph();
+ }
+ } break;
- if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
- error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
- } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
- error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
- }
+ case NOTIFICATION_PROCESS: {
+ String error;
- if (error != error_label->get_text()) {
- error_label->set_text(error);
- if (!error.is_empty()) {
- error_panel->show();
- } else {
- error_panel->hide();
+ if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
+ error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
+ } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
+ error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
}
- }
- List<AnimationNodeBlendTree::NodeConnection> conns;
- blend_tree->get_node_connections(&conns);
- for (const AnimationNodeBlendTree::NodeConnection &E : conns) {
- float activity = 0;
- StringName path = AnimationTreeEditor::get_singleton()->get_base_path() + E.input_node;
- if (AnimationTreeEditor::get_singleton()->get_tree() && !AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
- activity = AnimationTreeEditor::get_singleton()->get_tree()->get_connection_activity(path, E.input_index);
+ if (error != error_label->get_text()) {
+ error_label->set_text(error);
+ if (!error.is_empty()) {
+ error_panel->show();
+ } else {
+ error_panel->hide();
+ }
}
- graph->set_connection_activity(E.output_node, 0, E.input_node, E.input_index, activity);
- }
- AnimationTree *graph_player = AnimationTreeEditor::get_singleton()->get_tree();
- AnimationPlayer *player = nullptr;
- if (graph_player->has_node(graph_player->get_animation_player())) {
- player = Object::cast_to<AnimationPlayer>(graph_player->get_node(graph_player->get_animation_player()));
- }
+ List<AnimationNodeBlendTree::NodeConnection> conns;
+ blend_tree->get_node_connections(&conns);
+ for (const AnimationNodeBlendTree::NodeConnection &E : conns) {
+ float activity = 0;
+ StringName path = AnimationTreeEditor::get_singleton()->get_base_path() + E.input_node;
+ if (AnimationTreeEditor::get_singleton()->get_tree() && !AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
+ activity = AnimationTreeEditor::get_singleton()->get_tree()->get_connection_activity(path, E.input_index);
+ }
+ graph->set_connection_activity(E.output_node, 0, E.input_node, E.input_index, activity);
+ }
- if (player) {
- for (const KeyValue<StringName, ProgressBar *> &E : animations) {
- Ref<AnimationNodeAnimation> an = blend_tree->get_node(E.key);
- if (an.is_valid()) {
- if (player->has_animation(an->get_animation())) {
- Ref<Animation> anim = player->get_animation(an->get_animation());
- if (anim.is_valid()) {
- E.value->set_max(anim->get_length());
- //StringName path = AnimationTreeEditor::get_singleton()->get_base_path() + E.input_node;
- StringName time_path = AnimationTreeEditor::get_singleton()->get_base_path() + String(E.key) + "/time";
- E.value->set_value(AnimationTreeEditor::get_singleton()->get_tree()->get(time_path));
+ AnimationTree *graph_player = AnimationTreeEditor::get_singleton()->get_tree();
+ AnimationPlayer *player = nullptr;
+ if (graph_player->has_node(graph_player->get_animation_player())) {
+ player = Object::cast_to<AnimationPlayer>(graph_player->get_node(graph_player->get_animation_player()));
+ }
+
+ if (player) {
+ for (const KeyValue<StringName, ProgressBar *> &E : animations) {
+ Ref<AnimationNodeAnimation> an = blend_tree->get_node(E.key);
+ if (an.is_valid()) {
+ if (player->has_animation(an->get_animation())) {
+ Ref<Animation> anim = player->get_animation(an->get_animation());
+ if (anim.is_valid()) {
+ E.value->set_max(anim->get_length());
+ //StringName path = AnimationTreeEditor::get_singleton()->get_base_path() + E.input_node;
+ StringName time_path = AnimationTreeEditor::get_singleton()->get_base_path() + String(E.key) + "/time";
+ E.value->set_value(AnimationTreeEditor::get_singleton()->get_tree()->get(time_path));
+ }
}
}
}
}
- }
- for (int i = 0; i < visible_properties.size(); i++) {
- visible_properties[i]->update_property();
- }
- }
+ for (int i = 0; i < visible_properties.size(); i++) {
+ visible_properties[i]->update_property();
+ }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- set_process(is_visible_in_tree());
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ set_process(is_visible_in_tree());
+ } break;
}
}
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.h b/editor/plugins/animation_blend_tree_editor_plugin.h
index b1b905a3f5..c111f9245e 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.h
+++ b/editor/plugins/animation_blend_tree_editor_plugin.h
@@ -119,6 +119,9 @@ class AnimationNodeBlendTreeEditor : public AnimationTreeNodeEditorPlugin {
void _property_changed(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing);
void _removed_from_graph();
+ void _update_editor_settings();
+ void _update_theme();
+
EditorFileDialog *open_file;
Ref<AnimationNode> file_loaded;
void _file_opened(const String &p_file);
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 28b1126102..ad126d28f6 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -94,6 +94,7 @@ void AnimationPlayerEditor::_notification(int p_what) {
last_active = player->is_playing();
updating = false;
} break;
+
case NOTIFICATION_ENTER_TREE: {
tool_anim->get_popup()->connect("id_pressed", callable_mp(this, &AnimationPlayerEditor::_animation_tool_menu));
@@ -105,9 +106,11 @@ void AnimationPlayerEditor::_notification(int p_what) {
add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
} break;
+
case NOTIFICATION_TRANSLATION_CHANGED:
case NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
case NOTIFICATION_THEME_CHANGED: {
diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp
index 5e32c77511..6c284f2268 100644
--- a/editor/plugins/animation_state_machine_editor.cpp
+++ b/editor/plugins/animation_state_machine_editor.cpp
@@ -884,169 +884,174 @@ void AnimationNodeStateMachineEditor::_update_graph() {
}
void AnimationNodeStateMachineEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_LAYOUT_DIRECTION_CHANGED || p_what == NOTIFICATION_TRANSLATION_CHANGED) {
- error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
- error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
-
- tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
- tool_create->set_icon(get_theme_icon(SNAME("ToolAddNode"), SNAME("EditorIcons")));
- tool_connect->set_icon(get_theme_icon(SNAME("ToolConnect"), SNAME("EditorIcons")));
-
- transition_mode->clear();
- transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionImmediate"), SNAME("EditorIcons")), TTR("Immediate"));
- transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionSync"), SNAME("EditorIcons")), TTR("Sync"));
- transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionEnd"), SNAME("EditorIcons")), TTR("At End"));
-
- tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
- tool_autoplay->set_icon(get_theme_icon(SNAME("AutoPlay"), SNAME("EditorIcons")));
- tool_end->set_icon(get_theme_icon(SNAME("AutoEnd"), SNAME("EditorIcons")));
-
- play_mode->clear();
- play_mode->add_icon_item(get_theme_icon(SNAME("PlayTravel"), SNAME("EditorIcons")), TTR("Travel"));
- play_mode->add_icon_item(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")), TTR("Immediate"));
- }
-
- if (p_what == NOTIFICATION_PROCESS) {
- String error;
-
- Ref<AnimationNodeStateMachinePlayback> playback = AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + "playback");
-
- if (error_time > 0) {
- error = error_text;
- error_time -= get_process_delta_time();
- } else if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
- error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
- } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
- error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
- /*} else if (state_machine->get_parent().is_valid() && state_machine->get_parent()->is_class("AnimationNodeStateMachine")) {
- if (state_machine->get_start_node() == StringName() || state_machine->get_end_node() == StringName()) {
- error = TTR("Start and end nodes are needed for a sub-transition.");
- }*/
- } else if (playback.is_null()) {
- error = vformat(TTR("No playback resource set at path: %s."), AnimationTreeEditor::get_singleton()->get_base_path() + "playback");
- }
-
- if (error != error_label->get_text()) {
- error_label->set_text(error);
- if (!error.is_empty()) {
- error_panel->show();
- } else {
- error_panel->hide();
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
+ case NOTIFICATION_TRANSLATION_CHANGED: {
+ error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+
+ tool_select->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
+ tool_create->set_icon(get_theme_icon(SNAME("ToolAddNode"), SNAME("EditorIcons")));
+ tool_connect->set_icon(get_theme_icon(SNAME("ToolConnect"), SNAME("EditorIcons")));
+
+ transition_mode->clear();
+ transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionImmediate"), SNAME("EditorIcons")), TTR("Immediate"));
+ transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionSync"), SNAME("EditorIcons")), TTR("Sync"));
+ transition_mode->add_icon_item(get_theme_icon(SNAME("TransitionEnd"), SNAME("EditorIcons")), TTR("At End"));
+
+ tool_erase->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ tool_autoplay->set_icon(get_theme_icon(SNAME("AutoPlay"), SNAME("EditorIcons")));
+ tool_end->set_icon(get_theme_icon(SNAME("AutoEnd"), SNAME("EditorIcons")));
+
+ play_mode->clear();
+ play_mode->add_icon_item(get_theme_icon(SNAME("PlayTravel"), SNAME("EditorIcons")), TTR("Travel"));
+ play_mode->add_icon_item(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")), TTR("Immediate"));
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ String error;
+
+ Ref<AnimationNodeStateMachinePlayback> playback = AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + "playback");
+
+ if (error_time > 0) {
+ error = error_text;
+ error_time -= get_process_delta_time();
+ } else if (!AnimationTreeEditor::get_singleton()->get_tree()->is_active()) {
+ error = TTR("AnimationTree is inactive.\nActivate to enable playback, check node warnings if activation fails.");
+ } else if (AnimationTreeEditor::get_singleton()->get_tree()->is_state_invalid()) {
+ error = AnimationTreeEditor::get_singleton()->get_tree()->get_invalid_state_reason();
+ /*} else if (state_machine->get_parent().is_valid() && state_machine->get_parent()->is_class("AnimationNodeStateMachine")) {
+ if (state_machine->get_start_node() == StringName() || state_machine->get_end_node() == StringName()) {
+ error = TTR("Start and end nodes are needed for a sub-transition.");
+ }*/
+ } else if (playback.is_null()) {
+ error = vformat(TTR("No playback resource set at path: %s."), AnimationTreeEditor::get_singleton()->get_base_path() + "playback");
}
- }
- for (int i = 0; i < transition_lines.size(); i++) {
- int tidx = -1;
- for (int j = 0; j < state_machine->get_transition_count(); j++) {
- if (transition_lines[i].from_node == state_machine->get_transition_from(j) && transition_lines[i].to_node == state_machine->get_transition_to(j)) {
- tidx = j;
- break;
+ if (error != error_label->get_text()) {
+ error_label->set_text(error);
+ if (!error.is_empty()) {
+ error_panel->show();
+ } else {
+ error_panel->hide();
}
}
- if (tidx == -1) { //missing transition, should redraw
- state_machine_draw->update();
- break;
- }
+ for (int i = 0; i < transition_lines.size(); i++) {
+ int tidx = -1;
+ for (int j = 0; j < state_machine->get_transition_count(); j++) {
+ if (transition_lines[i].from_node == state_machine->get_transition_from(j) && transition_lines[i].to_node == state_machine->get_transition_to(j)) {
+ tidx = j;
+ break;
+ }
+ }
- if (transition_lines[i].disabled != state_machine->get_transition(tidx)->is_disabled()) {
- state_machine_draw->update();
- break;
- }
+ if (tidx == -1) { //missing transition, should redraw
+ state_machine_draw->update();
+ break;
+ }
- if (transition_lines[i].auto_advance != state_machine->get_transition(tidx)->has_auto_advance()) {
- state_machine_draw->update();
- break;
- }
+ if (transition_lines[i].disabled != state_machine->get_transition(tidx)->is_disabled()) {
+ state_machine_draw->update();
+ break;
+ }
- if (transition_lines[i].advance_condition_name != state_machine->get_transition(tidx)->get_advance_condition_name()) {
- state_machine_draw->update();
- break;
- }
+ if (transition_lines[i].auto_advance != state_machine->get_transition(tidx)->has_auto_advance()) {
+ state_machine_draw->update();
+ break;
+ }
- if (transition_lines[i].mode != state_machine->get_transition(tidx)->get_switch_mode()) {
- state_machine_draw->update();
- break;
- }
+ if (transition_lines[i].advance_condition_name != state_machine->get_transition(tidx)->get_advance_condition_name()) {
+ state_machine_draw->update();
+ break;
+ }
- bool acstate = transition_lines[i].advance_condition_name != StringName() && bool(AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + String(transition_lines[i].advance_condition_name)));
+ if (transition_lines[i].mode != state_machine->get_transition(tidx)->get_switch_mode()) {
+ state_machine_draw->update();
+ break;
+ }
- if (transition_lines[i].advance_condition_state != acstate) {
- state_machine_draw->update();
- break;
+ bool acstate = transition_lines[i].advance_condition_name != StringName() && bool(AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + String(transition_lines[i].advance_condition_name)));
+
+ if (transition_lines[i].advance_condition_state != acstate) {
+ state_machine_draw->update();
+ break;
+ }
}
- }
- bool same_travel_path = true;
- Vector<StringName> tp;
- bool is_playing = false;
- StringName current_node;
- StringName blend_from_node;
- play_pos = 0;
- current_length = 0;
-
- if (playback.is_valid()) {
- tp = playback->get_travel_path();
- is_playing = playback->is_playing();
- current_node = playback->get_current_node();
- blend_from_node = playback->get_blend_from_node();
- play_pos = playback->get_current_play_pos();
- current_length = playback->get_current_length();
- }
+ bool same_travel_path = true;
+ Vector<StringName> tp;
+ bool is_playing = false;
+ StringName current_node;
+ StringName blend_from_node;
+ play_pos = 0;
+ current_length = 0;
+
+ if (playback.is_valid()) {
+ tp = playback->get_travel_path();
+ is_playing = playback->is_playing();
+ current_node = playback->get_current_node();
+ blend_from_node = playback->get_blend_from_node();
+ play_pos = playback->get_current_play_pos();
+ current_length = playback->get_current_length();
+ }
- {
- if (last_travel_path.size() != tp.size()) {
- same_travel_path = false;
- } else {
- for (int i = 0; i < last_travel_path.size(); i++) {
- if (last_travel_path[i] != tp[i]) {
- same_travel_path = false;
- break;
+ {
+ if (last_travel_path.size() != tp.size()) {
+ same_travel_path = false;
+ } else {
+ for (int i = 0; i < last_travel_path.size(); i++) {
+ if (last_travel_path[i] != tp[i]) {
+ same_travel_path = false;
+ break;
+ }
}
}
}
- }
- //update if travel state changed
- if (!same_travel_path || last_active != is_playing || last_current_node != current_node || last_blend_from_node != blend_from_node) {
- state_machine_draw->update();
- last_travel_path = tp;
- last_current_node = current_node;
- last_active = is_playing;
- last_blend_from_node = blend_from_node;
- state_machine_play_pos->update();
- }
+ //update if travel state changed
+ if (!same_travel_path || last_active != is_playing || last_current_node != current_node || last_blend_from_node != blend_from_node) {
+ state_machine_draw->update();
+ last_travel_path = tp;
+ last_current_node = current_node;
+ last_active = is_playing;
+ last_blend_from_node = blend_from_node;
+ state_machine_play_pos->update();
+ }
- {
- if (current_node != StringName() && state_machine->has_node(current_node)) {
- String next = current_node;
- Ref<AnimationNodeStateMachine> anodesm = state_machine->get_node(next);
- Ref<AnimationNodeStateMachinePlayback> current_node_playback;
-
- while (anodesm.is_valid()) {
- current_node_playback = AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + next + "/playback");
- next += "/" + current_node_playback->get_current_node();
- anodesm = anodesm->get_node(current_node_playback->get_current_node());
- }
+ {
+ if (current_node != StringName() && state_machine->has_node(current_node)) {
+ String next = current_node;
+ Ref<AnimationNodeStateMachine> anodesm = state_machine->get_node(next);
+ Ref<AnimationNodeStateMachinePlayback> current_node_playback;
- // when current_node is a state machine, use playback of current_node to set play_pos
- if (current_node_playback.is_valid()) {
- play_pos = current_node_playback->get_current_play_pos();
- current_length = current_node_playback->get_current_length();
+ while (anodesm.is_valid()) {
+ current_node_playback = AnimationTreeEditor::get_singleton()->get_tree()->get(AnimationTreeEditor::get_singleton()->get_base_path() + next + "/playback");
+ next += "/" + current_node_playback->get_current_node();
+ anodesm = anodesm->get_node(current_node_playback->get_current_node());
+ }
+
+ // when current_node is a state machine, use playback of current_node to set play_pos
+ if (current_node_playback.is_valid()) {
+ play_pos = current_node_playback->get_current_play_pos();
+ current_length = current_node_playback->get_current_length();
+ }
}
}
- }
- if (last_play_pos != play_pos) {
- last_play_pos = play_pos;
- state_machine_play_pos->update();
- }
- }
+ if (last_play_pos != play_pos) {
+ last_play_pos = play_pos;
+ state_machine_play_pos->update();
+ }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- over_node = StringName();
- set_process(is_visible_in_tree());
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ over_node = StringName();
+ set_process(is_visible_in_tree());
+ } break;
}
}
diff --git a/editor/plugins/animation_tree_editor_plugin.cpp b/editor/plugins/animation_tree_editor_plugin.cpp
index f7057f375e..7ea6906d72 100644
--- a/editor/plugins/animation_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_tree_editor_plugin.cpp
@@ -145,19 +145,21 @@ void AnimationTreeEditor::enter_editor(const String &p_path) {
}
void AnimationTreeEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- ObjectID root;
- if (tree && tree->get_tree_root().is_valid()) {
- root = tree->get_tree_root()->get_instance_id();
- }
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ ObjectID root;
+ if (tree && tree->get_tree_root().is_valid()) {
+ root = tree->get_tree_root()->get_instance_id();
+ }
- if (root != current_root) {
- edit_path(Vector<String>());
- }
+ if (root != current_root) {
+ edit_path(Vector<String>());
+ }
- if (button_path.size() != edited_path.size()) {
- edit_path(edited_path);
- }
+ if (button_path.size() != edited_path.size()) {
+ edit_path(edited_path);
+ }
+ } break;
}
}
diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp
index 7ab9fa05f7..9e9915cfa4 100644
--- a/editor/plugins/asset_library_editor_plugin.cpp
+++ b/editor/plugins/asset_library_editor_plugin.cpp
@@ -68,11 +68,13 @@ void EditorAssetLibraryItem::set_image(int p_type, int p_index, const Ref<Textur
}
void EditorAssetLibraryItem::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- icon->set_normal_texture(get_theme_icon(SNAME("ProjectIconLoading"), SNAME("EditorIcons")));
- category->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
- author->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
- price->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ icon->set_normal_texture(get_theme_icon(SNAME("ProjectIconLoading"), SNAME("EditorIcons")));
+ category->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
+ author->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
+ price->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
+ } break;
}
}
@@ -406,6 +408,7 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) {
status->add_theme_color_override("font_color", get_theme_color(SNAME("status_color"), SNAME("AssetLib")));
dismiss_button->set_normal_texture(get_theme_icon(SNAME("dismiss"), SNAME("AssetLib")));
} break;
+
case NOTIFICATION_PROCESS: {
// Make the progress bar visible again when retrying the download.
progress->set_modulate(Color(1, 1, 1, 1));
@@ -576,6 +579,7 @@ void EditorAssetLibrary::_notification(int p_what) {
case NOTIFICATION_READY: {
error_label->raise();
} break;
+
case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: {
error_tr->set_texture(get_theme_icon(SNAME("Error"), SNAME("EditorIcons")));
@@ -584,6 +588,7 @@ void EditorAssetLibrary::_notification(int p_what) {
downloads_scroll->add_theme_style_override("bg", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
error_label->add_theme_color_override("color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
if (is_visible()) {
// Focus the search box automatically when switching to the Templates tab (in the Project Manager)
@@ -596,6 +601,7 @@ void EditorAssetLibrary::_notification(int p_what) {
}
}
} break;
+
case NOTIFICATION_PROCESS: {
HTTPClient::Status s = request->get_http_client_status();
const bool loading = s != HTTPClient::STATUS_DISCONNECTED;
@@ -612,6 +618,7 @@ void EditorAssetLibrary::_notification(int p_what) {
}
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
_update_repository_options();
setup_http_request(request);
diff --git a/editor/plugins/audio_stream_editor_plugin.cpp b/editor/plugins/audio_stream_editor_plugin.cpp
index c77ff5778a..a60e49ca9d 100644
--- a/editor/plugins/audio_stream_editor_plugin.cpp
+++ b/editor/plugins/audio_stream_editor_plugin.cpp
@@ -39,29 +39,32 @@
#include "editor/editor_settings.h"
void AudioStreamEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", callable_mp(this, &AudioStreamEditor::_preview_changed));
- }
-
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- _play_button->set_icon(get_theme_icon(SNAME("MainPlay"), SNAME("EditorIcons")));
- _stop_button->set_icon(get_theme_icon(SNAME("Stop"), SNAME("EditorIcons")));
- _preview->set_color(get_theme_color(SNAME("dark_color_2"), SNAME("Editor")));
- set_color(get_theme_color(SNAME("dark_color_1"), SNAME("Editor")));
-
- _indicator->update();
- _preview->update();
- }
-
- if (p_what == NOTIFICATION_PROCESS) {
- _current = _player->get_playback_position();
- _indicator->update();
- }
-
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (!is_visible_in_tree()) {
- _stop();
- }
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", callable_mp(this, &AudioStreamEditor::_preview_changed));
+ } break;
+
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_ENTER_TREE: {
+ _play_button->set_icon(get_theme_icon(SNAME("MainPlay"), SNAME("EditorIcons")));
+ _stop_button->set_icon(get_theme_icon(SNAME("Stop"), SNAME("EditorIcons")));
+ _preview->set_color(get_theme_color(SNAME("dark_color_2"), SNAME("Editor")));
+ set_color(get_theme_color(SNAME("dark_color_1"), SNAME("Editor")));
+
+ _indicator->update();
+ _preview->update();
+ } break;
+
+ case NOTIFICATION_PROCESS: {
+ _current = _player->get_playback_position();
+ _indicator->update();
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (!is_visible_in_tree()) {
+ _stop();
+ }
+ } break;
}
}
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 06ca89da51..e43d1feb08 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1163,25 +1163,25 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo
if (k.is_valid()) {
if (k->is_pressed()) {
if (ED_GET_SHORTCUT("canvas_item_editor/zoom_3.125_percent")->matches_event(p_event)) {
- _update_zoom((1.0 / 32.0) * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0 / 32.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_6.25_percent")->matches_event(p_event)) {
- _update_zoom((1.0 / 16.0) * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0 / 16.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_12.5_percent")->matches_event(p_event)) {
- _update_zoom((1.0 / 8.0) * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0 / 8.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_25_percent")->matches_event(p_event)) {
- _update_zoom((1.0 / 4.0) * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0 / 4.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_50_percent")->matches_event(p_event)) {
- _update_zoom((1.0 / 2.0) * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0 / 2.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_100_percent")->matches_event(p_event)) {
- _update_zoom(1.0 * MAX(1, EDSCALE));
+ _shortcut_zoom_set(1.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_200_percent")->matches_event(p_event)) {
- _update_zoom(2.0 * MAX(1, EDSCALE));
+ _shortcut_zoom_set(2.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_400_percent")->matches_event(p_event)) {
- _update_zoom(4.0 * MAX(1, EDSCALE));
+ _shortcut_zoom_set(4.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_800_percent")->matches_event(p_event)) {
- _update_zoom(8.0 * MAX(1, EDSCALE));
+ _shortcut_zoom_set(8.0);
} else if (ED_GET_SHORTCUT("canvas_item_editor/zoom_1600_percent")->matches_event(p_event)) {
- _update_zoom(16.0 * MAX(1, EDSCALE));
+ _shortcut_zoom_set(16.0);
}
}
}
@@ -3510,7 +3510,7 @@ void CanvasItemEditor::_draw_invisible_nodes_positions(Node *p_node, const Trans
return;
}
CanvasItem *canvas_item = Object::cast_to<CanvasItem>(p_node);
- if (canvas_item && !canvas_item->is_visible()) {
+ if (canvas_item && !canvas_item->is_visible_in_tree()) {
return;
}
@@ -3694,149 +3694,154 @@ void CanvasItemEditor::set_current_tool(Tool p_tool) {
_button_tool_select(p_tool);
}
+void CanvasItemEditor::_update_editor_settings() {
+ select_button->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
+ list_select_button->set_icon(get_theme_icon(SNAME("ListSelect"), SNAME("EditorIcons")));
+ move_button->set_icon(get_theme_icon(SNAME("ToolMove"), SNAME("EditorIcons")));
+ scale_button->set_icon(get_theme_icon(SNAME("ToolScale"), SNAME("EditorIcons")));
+ rotate_button->set_icon(get_theme_icon(SNAME("ToolRotate"), SNAME("EditorIcons")));
+ smart_snap_button->set_icon(get_theme_icon(SNAME("Snap"), SNAME("EditorIcons")));
+ grid_snap_button->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
+ snap_config_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
+ skeleton_menu->set_icon(get_theme_icon(SNAME("Bone"), SNAME("EditorIcons")));
+ override_camera_button->set_icon(get_theme_icon(SNAME("Camera2D"), SNAME("EditorIcons")));
+ pan_button->set_icon(get_theme_icon(SNAME("ToolPan"), SNAME("EditorIcons")));
+ ruler_button->set_icon(get_theme_icon(SNAME("Ruler"), SNAME("EditorIcons")));
+ pivot_button->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
+ select_handle = get_theme_icon(SNAME("EditorHandle"), SNAME("EditorIcons"));
+ anchor_handle = get_theme_icon(SNAME("EditorControlAnchor"), SNAME("EditorIcons"));
+ lock_button->set_icon(get_theme_icon(SNAME("Lock"), SNAME("EditorIcons")));
+ unlock_button->set_icon(get_theme_icon(SNAME("Unlock"), SNAME("EditorIcons")));
+ group_button->set_icon(get_theme_icon(SNAME("Group"), SNAME("EditorIcons")));
+ ungroup_button->set_icon(get_theme_icon(SNAME("Ungroup"), SNAME("EditorIcons")));
+ key_loc_button->set_icon(get_theme_icon(SNAME("KeyPosition"), SNAME("EditorIcons")));
+ key_rot_button->set_icon(get_theme_icon(SNAME("KeyRotation"), SNAME("EditorIcons")));
+ key_scale_button->set_icon(get_theme_icon(SNAME("KeyScale"), SNAME("EditorIcons")));
+ key_insert_button->set_icon(get_theme_icon(SNAME("Key"), SNAME("EditorIcons")));
+ key_auto_insert_button->set_icon(get_theme_icon(SNAME("AutoKey"), SNAME("EditorIcons")));
+ // Use a different color for the active autokey icon to make them easier
+ // to distinguish from the other key icons at the top. On a light theme,
+ // the icon will be dark, so we need to lighten it before blending it
+ // with the red color.
+ const Color key_auto_color = EditorSettings::get_singleton()->is_dark_theme() ? Color(1, 1, 1) : Color(4.25, 4.25, 4.25);
+ key_auto_insert_button->add_theme_color_override("icon_pressed_color", key_auto_color.lerp(Color(1, 0, 0), 0.55));
+ animation_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
+
+ _update_context_menu_stylebox();
+
+ panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/2d_editor_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ pan_speed = int(EditorSettings::get_singleton()->get("editors/panning/2d_editor_pan_speed"));
+ warped_panning = bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning"));
+}
+
void CanvasItemEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_PHYSICS_PROCESS) {
- EditorNode::get_singleton()->get_scene_root()->set_snap_controls_to_pixels(GLOBAL_GET("gui/common/snap_controls_to_pixels"));
+ switch (p_what) {
+ case NOTIFICATION_PHYSICS_PROCESS: {
+ EditorNode::get_singleton()->get_scene_root()->set_snap_controls_to_pixels(GLOBAL_GET("gui/common/snap_controls_to_pixels"));
- int nb_having_pivot = 0;
+ int nb_having_pivot = 0;
- // Update the viewport if the canvas_item changes
- List<CanvasItem *> selection = _get_edited_canvas_items(true);
- for (CanvasItem *canvas_item : selection) {
- CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
+ // Update the viewport if the canvas_item changes
+ List<CanvasItem *> selection = _get_edited_canvas_items(true);
+ for (CanvasItem *canvas_item : selection) {
+ CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
- Rect2 rect;
- if (canvas_item->_edit_use_rect()) {
- rect = canvas_item->_edit_get_rect();
- } else {
- rect = Rect2();
- }
- Transform2D xform = canvas_item->get_transform();
+ Rect2 rect;
+ if (canvas_item->_edit_use_rect()) {
+ rect = canvas_item->_edit_get_rect();
+ } else {
+ rect = Rect2();
+ }
+ Transform2D xform = canvas_item->get_transform();
- if (rect != se->prev_rect || xform != se->prev_xform) {
- viewport->update();
- se->prev_rect = rect;
- se->prev_xform = xform;
+ if (rect != se->prev_rect || xform != se->prev_xform) {
+ viewport->update();
+ se->prev_rect = rect;
+ se->prev_xform = xform;
+ }
+
+ Control *control = Object::cast_to<Control>(canvas_item);
+ if (control) {
+ real_t anchors[4];
+ Vector2 pivot;
+
+ pivot = control->get_pivot_offset();
+ anchors[SIDE_LEFT] = control->get_anchor(SIDE_LEFT);
+ anchors[SIDE_RIGHT] = control->get_anchor(SIDE_RIGHT);
+ anchors[SIDE_TOP] = control->get_anchor(SIDE_TOP);
+ anchors[SIDE_BOTTOM] = control->get_anchor(SIDE_BOTTOM);
+
+ if (pivot != se->prev_pivot || anchors[SIDE_LEFT] != se->prev_anchors[SIDE_LEFT] || anchors[SIDE_RIGHT] != se->prev_anchors[SIDE_RIGHT] || anchors[SIDE_TOP] != se->prev_anchors[SIDE_TOP] || anchors[SIDE_BOTTOM] != se->prev_anchors[SIDE_BOTTOM]) {
+ se->prev_pivot = pivot;
+ se->prev_anchors[SIDE_LEFT] = anchors[SIDE_LEFT];
+ se->prev_anchors[SIDE_RIGHT] = anchors[SIDE_RIGHT];
+ se->prev_anchors[SIDE_TOP] = anchors[SIDE_TOP];
+ se->prev_anchors[SIDE_BOTTOM] = anchors[SIDE_BOTTOM];
+ viewport->update();
+ }
+ }
+
+ if (canvas_item->_edit_use_pivot()) {
+ nb_having_pivot++;
+ }
}
- Control *control = Object::cast_to<Control>(canvas_item);
- if (control) {
- real_t anchors[4];
- Vector2 pivot;
-
- pivot = control->get_pivot_offset();
- anchors[SIDE_LEFT] = control->get_anchor(SIDE_LEFT);
- anchors[SIDE_RIGHT] = control->get_anchor(SIDE_RIGHT);
- anchors[SIDE_TOP] = control->get_anchor(SIDE_TOP);
- anchors[SIDE_BOTTOM] = control->get_anchor(SIDE_BOTTOM);
-
- if (pivot != se->prev_pivot || anchors[SIDE_LEFT] != se->prev_anchors[SIDE_LEFT] || anchors[SIDE_RIGHT] != se->prev_anchors[SIDE_RIGHT] || anchors[SIDE_TOP] != se->prev_anchors[SIDE_TOP] || anchors[SIDE_BOTTOM] != se->prev_anchors[SIDE_BOTTOM]) {
- se->prev_pivot = pivot;
- se->prev_anchors[SIDE_LEFT] = anchors[SIDE_LEFT];
- se->prev_anchors[SIDE_RIGHT] = anchors[SIDE_RIGHT];
- se->prev_anchors[SIDE_TOP] = anchors[SIDE_TOP];
- se->prev_anchors[SIDE_BOTTOM] = anchors[SIDE_BOTTOM];
+ // Activate / Deactivate the pivot tool
+ pivot_button->set_disabled(nb_having_pivot == 0);
+
+ // Update the viewport if bones changes
+ for (KeyValue<BoneKey, BoneList> &E : bone_list) {
+ Object *b = ObjectDB::get_instance(E.key.from);
+ if (!b) {
viewport->update();
+ break;
}
- }
- if (canvas_item->_edit_use_pivot()) {
- nb_having_pivot++;
- }
- }
+ Node2D *b2 = Object::cast_to<Node2D>(b);
+ if (!b2 || !b2->is_inside_tree()) {
+ continue;
+ }
- // Activate / Deactivate the pivot tool
- pivot_button->set_disabled(nb_having_pivot == 0);
+ Transform2D global_xform = b2->get_global_transform();
- // Update the viewport if bones changes
- for (KeyValue<BoneKey, BoneList> &E : bone_list) {
- Object *b = ObjectDB::get_instance(E.key.from);
- if (!b) {
- viewport->update();
- break;
+ if (global_xform != E.value.xform) {
+ E.value.xform = global_xform;
+ viewport->update();
+ }
+
+ Bone2D *bone = Object::cast_to<Bone2D>(b);
+ if (bone && bone->get_length() != E.value.length) {
+ E.value.length = bone->get_length();
+ viewport->update();
+ }
}
+ } break;
- Node2D *b2 = Object::cast_to<Node2D>(b);
- if (!b2 || !b2->is_inside_tree()) {
- continue;
+ case NOTIFICATION_ENTER_TREE: {
+ select_sb->set_texture(get_theme_icon(SNAME("EditorRect2D"), SNAME("EditorIcons")));
+ for (int i = 0; i < 4; i++) {
+ select_sb->set_margin_size(Side(i), 4);
+ select_sb->set_default_margin(Side(i), 4);
}
- Transform2D global_xform = b2->get_global_transform();
+ AnimationPlayerEditor::get_singleton()->get_track_editor()->connect("visibility_changed", callable_mp(this, &CanvasItemEditor::_keying_changed));
+ _keying_changed();
+ _update_editor_settings();
+ } break;
- if (global_xform != E.value.xform) {
- E.value.xform = global_xform;
- viewport->update();
- }
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ select_sb->set_texture(get_theme_icon(SNAME("EditorRect2D"), SNAME("EditorIcons")));
+ _update_editor_settings();
+ } break;
- Bone2D *bone = Object::cast_to<Bone2D>(b);
- if (bone && bone->get_length() != E.value.length) {
- E.value.length = bone->get_length();
- viewport->update();
- }
- }
- }
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (!is_visible() && override_camera_button->is_pressed()) {
+ EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton();
- if (p_what == NOTIFICATION_ENTER_TREE) {
- select_sb->set_texture(get_theme_icon(SNAME("EditorRect2D"), SNAME("EditorIcons")));
- for (int i = 0; i < 4; i++) {
- select_sb->set_margin_size(Side(i), 4);
- select_sb->set_default_margin(Side(i), 4);
- }
-
- AnimationPlayerEditor::get_singleton()->get_track_editor()->connect("visibility_changed", callable_mp(this, &CanvasItemEditor::_keying_changed));
- _keying_changed();
-
- } else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- select_sb->set_texture(get_theme_icon(SNAME("EditorRect2D"), SNAME("EditorIcons")));
- }
-
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- select_button->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
- list_select_button->set_icon(get_theme_icon(SNAME("ListSelect"), SNAME("EditorIcons")));
- move_button->set_icon(get_theme_icon(SNAME("ToolMove"), SNAME("EditorIcons")));
- scale_button->set_icon(get_theme_icon(SNAME("ToolScale"), SNAME("EditorIcons")));
- rotate_button->set_icon(get_theme_icon(SNAME("ToolRotate"), SNAME("EditorIcons")));
- smart_snap_button->set_icon(get_theme_icon(SNAME("Snap"), SNAME("EditorIcons")));
- grid_snap_button->set_icon(get_theme_icon(SNAME("SnapGrid"), SNAME("EditorIcons")));
- snap_config_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
- skeleton_menu->set_icon(get_theme_icon(SNAME("Bone"), SNAME("EditorIcons")));
- override_camera_button->set_icon(get_theme_icon(SNAME("Camera2D"), SNAME("EditorIcons")));
- pan_button->set_icon(get_theme_icon(SNAME("ToolPan"), SNAME("EditorIcons")));
- ruler_button->set_icon(get_theme_icon(SNAME("Ruler"), SNAME("EditorIcons")));
- pivot_button->set_icon(get_theme_icon(SNAME("EditPivot"), SNAME("EditorIcons")));
- select_handle = get_theme_icon(SNAME("EditorHandle"), SNAME("EditorIcons"));
- anchor_handle = get_theme_icon(SNAME("EditorControlAnchor"), SNAME("EditorIcons"));
- lock_button->set_icon(get_theme_icon(SNAME("Lock"), SNAME("EditorIcons")));
- unlock_button->set_icon(get_theme_icon(SNAME("Unlock"), SNAME("EditorIcons")));
- group_button->set_icon(get_theme_icon(SNAME("Group"), SNAME("EditorIcons")));
- ungroup_button->set_icon(get_theme_icon(SNAME("Ungroup"), SNAME("EditorIcons")));
- key_loc_button->set_icon(get_theme_icon(SNAME("KeyPosition"), SNAME("EditorIcons")));
- key_rot_button->set_icon(get_theme_icon(SNAME("KeyRotation"), SNAME("EditorIcons")));
- key_scale_button->set_icon(get_theme_icon(SNAME("KeyScale"), SNAME("EditorIcons")));
- key_insert_button->set_icon(get_theme_icon(SNAME("Key"), SNAME("EditorIcons")));
- key_auto_insert_button->set_icon(get_theme_icon(SNAME("AutoKey"), SNAME("EditorIcons")));
- // Use a different color for the active autokey icon to make them easier
- // to distinguish from the other key icons at the top. On a light theme,
- // the icon will be dark, so we need to lighten it before blending it
- // with the red color.
- const Color key_auto_color = EditorSettings::get_singleton()->is_dark_theme() ? Color(1, 1, 1) : Color(4.25, 4.25, 4.25);
- key_auto_insert_button->add_theme_color_override("icon_pressed_color", key_auto_color.lerp(Color(1, 0, 0), 0.55));
- animation_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
-
- _update_context_menu_stylebox();
-
- panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/2d_editor_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- pan_speed = int(EditorSettings::get_singleton()->get("editors/panning/2d_editor_pan_speed"));
- warped_panning = bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning"));
- }
-
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (!is_visible() && override_camera_button->is_pressed()) {
- EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton();
-
- debugger->set_camera_override(EditorDebuggerNode::OVERRIDE_NONE);
- override_camera_button->set_pressed(false);
- }
+ debugger->set_camera_override(EditorDebuggerNode::OVERRIDE_NONE);
+ override_camera_button->set_pressed(false);
+ }
+ } break;
}
}
@@ -4005,6 +4010,10 @@ void CanvasItemEditor::_update_zoom(real_t p_zoom) {
_zoom_on_position(p_zoom, viewport_scrollable->get_size() / 2.0);
}
+void CanvasItemEditor::_shortcut_zoom_set(real_t p_zoom) {
+ _zoom_on_position(p_zoom * MAX(1, EDSCALE), viewport->get_local_mouse_position());
+}
+
void CanvasItemEditor::_button_toggle_smart_snap(bool p_status) {
smart_snap_active = p_status;
viewport->update();
@@ -5495,16 +5504,18 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons
editor_data->get_undo_redo().add_do_method(ed, "live_debug_instance_node", edited_scene->get_path_to(parent), path, new_name);
editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)) + "/" + new_name));
- CanvasItem *parent_ci = Object::cast_to<CanvasItem>(parent);
- if (parent_ci) {
+ CanvasItem *instance_ci = Object::cast_to<CanvasItem>(instantiated_scene);
+ if (instance_ci) {
Vector2 target_pos = canvas_item_editor->get_canvas_transform().affine_inverse().xform(p_point);
target_pos = canvas_item_editor->snap_point(target_pos);
- target_pos = parent_ci->get_global_transform_with_canvas().affine_inverse().xform(target_pos);
- // Preserve instance position of the original scene.
- CanvasItem *instance_ci = Object::cast_to<CanvasItem>(instantiated_scene);
- if (instance_ci) {
- target_pos += instance_ci->_edit_get_position();
+
+ CanvasItem *parent_ci = Object::cast_to<CanvasItem>(parent);
+ if (parent_ci) {
+ target_pos = parent_ci->get_global_transform_with_canvas().affine_inverse().xform(target_pos);
}
+ // Preserve instance position of the original scene.
+ target_pos += instance_ci->_edit_get_position();
+
editor_data->get_undo_redo().add_do_method(instantiated_scene, "set_position", target_pos);
}
@@ -5702,29 +5713,32 @@ Node *CanvasItemEditorViewport::_make_texture_node_type(String texture_node_type
return node;
}
-void CanvasItemEditorViewport::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- List<BaseButton *> btn_list;
- button_group->get_buttons(&btn_list);
-
- for (int i = 0; i < btn_list.size(); i++) {
- CheckBox *check = Object::cast_to<CheckBox>(btn_list[i]);
- check->set_icon(get_theme_icon(check->get_text(), SNAME("EditorIcons")));
- }
+void CanvasItemEditorViewport::_update_theme() {
+ List<BaseButton *> btn_list;
+ button_group->get_buttons(&btn_list);
- label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ for (int i = 0; i < btn_list.size(); i++) {
+ CheckBox *check = Object::cast_to<CheckBox>(btn_list[i]);
+ check->set_icon(get_theme_icon(check->get_text(), SNAME("EditorIcons")));
}
+ label->add_theme_color_override("font_color", get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+}
+
+void CanvasItemEditorViewport::_notification(int p_what) {
switch (p_what) {
+ case NOTIFICATION_THEME_CHANGED: {
+ _update_theme();
+ } break;
+
case NOTIFICATION_ENTER_TREE: {
+ _update_theme();
connect("mouse_exited", callable_mp(this, &CanvasItemEditorViewport::_on_mouse_exit));
} break;
+
case NOTIFICATION_EXIT_TREE: {
disconnect("mouse_exited", callable_mp(this, &CanvasItemEditorViewport::_on_mouse_exit));
} break;
-
- default:
- break;
}
}
diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h
index 6c1b18acf4..e7c265ee02 100644
--- a/editor/plugins/canvas_item_editor_plugin.h
+++ b/editor/plugins/canvas_item_editor_plugin.h
@@ -389,6 +389,7 @@ private:
void _add_node_pressed(int p_result);
void _node_created(Node *p_node);
void _reset_create_position();
+ void _update_editor_settings();
UndoRedo *undo_redo;
@@ -469,6 +470,7 @@ private:
VBoxContainer *controls_vb;
EditorZoomWidget *zoom_widget;
void _update_zoom(real_t p_zoom);
+ void _shortcut_zoom_set(real_t p_zoom);
void _zoom_on_position(real_t p_zoom, Point2 p_position = Point2());
void _button_toggle_smart_snap(bool p_status);
void _button_toggle_grid_snap(bool p_status);
@@ -607,6 +609,7 @@ class CanvasItemEditorViewport : public Control {
bool _create_instance(Node *parent, String &path, const Point2 &p_point);
void _perform_drop_data();
void _show_resource_type_selector();
+ void _update_theme();
static void _bind_methods();
diff --git a/editor/plugins/control_editor_plugin.cpp b/editor/plugins/control_editor_plugin.cpp
index e6f267673c..7b85fea1e9 100644
--- a/editor/plugins/control_editor_plugin.cpp
+++ b/editor/plugins/control_editor_plugin.cpp
@@ -358,8 +358,12 @@ void EditorPropertySizeFlags::setup(const Vector<String> &p_options, bool p_vert
Control *gui_base = EditorNode::get_singleton()->get_gui_base();
String wide_preset_icon = SNAME("ControlAlignHCenterWide");
+ String begin_preset_icon = SNAME("ControlAlignCenterLeft");
+ String end_preset_icon = SNAME("ControlAlignCenterRight");
if (vertical) {
wide_preset_icon = SNAME("ControlAlignVCenterWide");
+ begin_preset_icon = SNAME("ControlAlignCenterTop");
+ end_preset_icon = SNAME("ControlAlignCenterBottom");
}
flag_presets->clear();
@@ -367,12 +371,12 @@ void EditorPropertySizeFlags::setup(const Vector<String> &p_options, bool p_vert
flag_presets->add_icon_item(gui_base->get_theme_icon(wide_preset_icon, SNAME("EditorIcons")), TTR("Fill"), SIZE_FLAGS_PRESET_FILL);
}
// Shrink Begin is the same as no flags at all, as such it cannot be disabled.
- flag_presets->add_icon_item(gui_base->get_theme_icon(SNAME("ControlAlignCenterLeft"), SNAME("EditorIcons")), TTR("Shrink Begin"), SIZE_FLAGS_PRESET_SHRINK_BEGIN);
+ flag_presets->add_icon_item(gui_base->get_theme_icon(begin_preset_icon, SNAME("EditorIcons")), TTR("Shrink Begin"), SIZE_FLAGS_PRESET_SHRINK_BEGIN);
if (flags.has(SIZE_SHRINK_CENTER)) {
flag_presets->add_icon_item(gui_base->get_theme_icon(SNAME("ControlAlignCenter"), SNAME("EditorIcons")), TTR("Shrink Center"), SIZE_FLAGS_PRESET_SHRINK_CENTER);
}
if (flags.has(SIZE_SHRINK_END)) {
- flag_presets->add_icon_item(gui_base->get_theme_icon(SNAME("ControlAlignCenterRight"), SNAME("EditorIcons")), TTR("Shrink End"), SIZE_FLAGS_PRESET_SHRINK_END);
+ flag_presets->add_icon_item(gui_base->get_theme_icon(end_preset_icon, SNAME("EditorIcons")), TTR("Shrink End"), SIZE_FLAGS_PRESET_SHRINK_END);
}
flag_presets->add_separator();
flag_presets->add_item(TTR("Custom"), SIZE_FLAGS_PRESET_CUSTOM);
diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp
index 786c0e002d..79025041d3 100644
--- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp
+++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp
@@ -224,10 +224,12 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() {
}
void CPUParticles2DEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- menu->get_popup()->connect("id_pressed", callable_mp(this, &CPUParticles2DEditorPlugin::_menu_callback));
- menu->set_icon(epoints->get_theme_icon(SNAME("CPUParticles2D"), SNAME("EditorIcons")));
- file->connect("file_selected", callable_mp(this, &CPUParticles2DEditorPlugin::_file_selected));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ menu->get_popup()->connect("id_pressed", callable_mp(this, &CPUParticles2DEditorPlugin::_menu_callback));
+ menu->set_icon(epoints->get_theme_icon(SNAME("CPUParticles2D"), SNAME("EditorIcons")));
+ file->connect("file_selected", callable_mp(this, &CPUParticles2DEditorPlugin::_file_selected));
+ } break;
}
}
diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.cpp b/editor/plugins/cpu_particles_3d_editor_plugin.cpp
index 046a48337a..775c2dbb2a 100644
--- a/editor/plugins/cpu_particles_3d_editor_plugin.cpp
+++ b/editor/plugins/cpu_particles_3d_editor_plugin.cpp
@@ -43,8 +43,10 @@ void CPUParticles3DEditor::_node_removed(Node *p_node) {
}
void CPUParticles3DEditor::_notification(int p_notification) {
- if (p_notification == NOTIFICATION_ENTER_TREE) {
- options->set_icon(get_theme_icon(SNAME("CPUParticles3D"), SNAME("EditorIcons")));
+ switch (p_notification) {
+ case NOTIFICATION_ENTER_TREE: {
+ options->set_icon(get_theme_icon(SNAME("CPUParticles3D"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp
index d221d8aeaf..6d1a86765a 100644
--- a/editor/plugins/curve_editor_plugin.cpp
+++ b/editor/plugins/curve_editor_plugin.cpp
@@ -97,8 +97,10 @@ Size2 CurveEditor::get_minimum_size() const {
}
void CurveEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- _draw();
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ _draw();
+ } break;
}
}
diff --git a/editor/plugins/debugger_editor_plugin.cpp b/editor/plugins/debugger_editor_plugin.cpp
index 32f58c6931..501becac57 100644
--- a/editor/plugins/debugger_editor_plugin.cpp
+++ b/editor/plugins/debugger_editor_plugin.cpp
@@ -177,8 +177,10 @@ void DebuggerEditorPlugin::_menu_option(int p_option) {
}
void DebuggerEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- _update_debug_options();
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ _update_debug_options();
+ } break;
}
}
diff --git a/editor/plugins/font_editor_plugin.cpp b/editor/plugins/font_editor_plugin.cpp
index e14304a2c8..b9de621bcb 100644
--- a/editor/plugins/font_editor_plugin.cpp
+++ b/editor/plugins/font_editor_plugin.cpp
@@ -33,14 +33,16 @@
#include "editor/editor_scale.h"
void FontDataPreview::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- Color text_color = get_theme_color(SNAME("font_color"), SNAME("Label"));
- Color line_color = text_color;
- line_color.a *= 0.6;
- Vector2 pos = (get_size() - line->get_size()) / 2;
- line->draw(get_canvas_item(), pos, text_color);
- draw_line(Vector2(0, pos.y + line->get_line_ascent()), Vector2(pos.x - 5, pos.y + line->get_line_ascent()), line_color);
- draw_line(Vector2(pos.x + line->get_size().x + 5, pos.y + line->get_line_ascent()), Vector2(get_size().x, pos.y + line->get_line_ascent()), line_color);
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ Color text_color = get_theme_color(SNAME("font_color"), SNAME("Label"));
+ Color line_color = text_color;
+ line_color.a *= 0.6;
+ Vector2 pos = (get_size() - line->get_size()) / 2;
+ line->draw(get_canvas_item(), pos, text_color);
+ draw_line(Vector2(0, pos.y + line->get_line_ascent()), Vector2(pos.x - 5, pos.y + line->get_line_ascent()), line_color);
+ draw_line(Vector2(pos.x + line->get_size().x + 5, pos.y + line->get_line_ascent()), Vector2(get_size().x, pos.y + line->get_line_ascent()), line_color);
+ } break;
}
}
diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.cpp b/editor/plugins/gpu_particles_2d_editor_plugin.cpp
index fdfd4b5832..b15aec87d9 100644
--- a/editor/plugins/gpu_particles_2d_editor_plugin.cpp
+++ b/editor/plugins/gpu_particles_2d_editor_plugin.cpp
@@ -354,11 +354,13 @@ void GPUParticles2DEditorPlugin::_generate_emission_mask() {
}
void GPUParticles2DEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- menu->get_popup()->connect("id_pressed", callable_mp(this, &GPUParticles2DEditorPlugin::_menu_callback));
- menu->set_icon(menu->get_theme_icon(SNAME("GPUParticles2D"), SNAME("EditorIcons")));
- file->connect("file_selected", callable_mp(this, &GPUParticles2DEditorPlugin::_file_selected));
- EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", callable_mp(this, &GPUParticles2DEditorPlugin::_selection_changed));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ menu->get_popup()->connect("id_pressed", callable_mp(this, &GPUParticles2DEditorPlugin::_menu_callback));
+ menu->set_icon(menu->get_theme_icon(SNAME("GPUParticles2D"), SNAME("EditorIcons")));
+ file->connect("file_selected", callable_mp(this, &GPUParticles2DEditorPlugin::_file_selected));
+ EditorNode::get_singleton()->get_editor_selection()->connect("selection_changed", callable_mp(this, &GPUParticles2DEditorPlugin::_selection_changed));
+ } break;
}
}
diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.cpp b/editor/plugins/gpu_particles_3d_editor_plugin.cpp
index ec61c01705..293d1c3913 100644
--- a/editor/plugins/gpu_particles_3d_editor_plugin.cpp
+++ b/editor/plugins/gpu_particles_3d_editor_plugin.cpp
@@ -231,9 +231,11 @@ void GPUParticles3DEditor::_node_removed(Node *p_node) {
}
void GPUParticles3DEditor::_notification(int p_notification) {
- if (p_notification == NOTIFICATION_ENTER_TREE) {
- options->set_icon(options->get_popup()->get_theme_icon(SNAME("GPUParticles3D"), SNAME("EditorIcons")));
- get_tree()->connect("node_removed", callable_mp(this, &GPUParticles3DEditor::_node_removed));
+ switch (p_notification) {
+ case NOTIFICATION_ENTER_TREE: {
+ options->set_icon(options->get_popup()->get_theme_icon(SNAME("GPUParticles3D"), SNAME("EditorIcons")));
+ get_tree()->connect("node_removed", callable_mp(this, &GPUParticles3DEditor::_node_removed));
+ } break;
}
}
diff --git a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp
index f63a31e869..affe10a01d 100644
--- a/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp
+++ b/editor/plugins/gpu_particles_collision_sdf_editor_plugin.cpp
@@ -66,41 +66,43 @@ bool GPUParticlesCollisionSDF3DEditorPlugin::handles(Object *p_object) const {
}
void GPUParticlesCollisionSDF3DEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- if (!col_sdf) {
- return;
- }
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ if (!col_sdf) {
+ return;
+ }
- // Set information tooltip on the Bake button. This information is useful
- // to optimize performance (video RAM size) and reduce collision tunneling (individual cell size).
+ // Set information tooltip on the Bake button. This information is useful
+ // to optimize performance (video RAM size) and reduce collision tunneling (individual cell size).
- const Vector3i size = col_sdf->get_estimated_cell_size();
+ const Vector3i size = col_sdf->get_estimated_cell_size();
- const Vector3 extents = col_sdf->get_extents();
+ const Vector3 extents = col_sdf->get_extents();
- int data_size = 2;
- const double size_mb = size.x * size.y * size.z * data_size / (1024.0 * 1024.0);
- // Add a qualitative measurement to help the user assess whether a GPUParticlesCollisionSDF3D node is using a lot of VRAM.
- String size_quality;
- if (size_mb < 8.0) {
- size_quality = TTR("Low");
- } else if (size_mb < 32.0) {
- size_quality = TTR("Moderate");
- } else {
- size_quality = TTR("High");
- }
+ int data_size = 2;
+ const double size_mb = size.x * size.y * size.z * data_size / (1024.0 * 1024.0);
+ // Add a qualitative measurement to help the user assess whether a GPUParticlesCollisionSDF3D node is using a lot of VRAM.
+ String size_quality;
+ if (size_mb < 8.0) {
+ size_quality = TTR("Low");
+ } else if (size_mb < 32.0) {
+ size_quality = TTR("Moderate");
+ } else {
+ size_quality = TTR("High");
+ }
- String text;
- text += vformat(TTR("Subdivisions: %s"), vformat(String::utf8("%d × %d × %d"), size.x, size.y, size.z)) + "\n";
- text += vformat(TTR("Cell size: %s"), vformat(String::utf8("%.3f × %.3f × %.3f"), extents.x / size.x, extents.y / size.y, extents.z / size.z)) + "\n";
- text += vformat(TTR("Video RAM size: %s MB (%s)"), String::num(size_mb, 2), size_quality);
+ String text;
+ text += vformat(TTR("Subdivisions: %s"), vformat(String::utf8("%d × %d × %d"), size.x, size.y, size.z)) + "\n";
+ text += vformat(TTR("Cell size: %s"), vformat(String::utf8("%.3f × %.3f × %.3f"), extents.x / size.x, extents.y / size.y, extents.z / size.z)) + "\n";
+ text += vformat(TTR("Video RAM size: %s MB (%s)"), String::num(size_mb, 2), size_quality);
- // Only update the tooltip when needed to avoid constant redrawing.
- if (bake->get_tooltip(Point2()) == text) {
- return;
- }
+ // Only update the tooltip when needed to avoid constant redrawing.
+ if (bake->get_tooltip(Point2()) == text) {
+ return;
+ }
- bake->set_tooltip(text);
+ bake->set_tooltip(text);
+ } break;
}
}
diff --git a/editor/plugins/gradient_editor_plugin.cpp b/editor/plugins/gradient_editor_plugin.cpp
index 3f5b687430..e9d7808684 100644
--- a/editor/plugins/gradient_editor_plugin.cpp
+++ b/editor/plugins/gradient_editor_plugin.cpp
@@ -91,13 +91,15 @@ GradientEditor::GradientEditor() {
///////////////////////
void GradientReverseButton::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Texture2D> icon = get_theme_icon(SNAME("ReverseGradient"), SNAME("EditorIcons"));
- if (is_pressed()) {
- draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()), false, get_theme_color(SNAME("icon_pressed_color"), SNAME("Button")));
- } else {
- draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()));
- }
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ Ref<Texture2D> icon = get_theme_icon(SNAME("ReverseGradient"), SNAME("EditorIcons"));
+ if (is_pressed()) {
+ draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()), false, get_theme_color(SNAME("icon_pressed_color"), SNAME("Button")));
+ } else {
+ draw_texture_rect(icon, Rect2(margin, margin, icon->get_width(), icon->get_height()));
+ }
+ } break;
}
}
diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp
index f3759da47f..daa864cfa1 100644
--- a/editor/plugins/material_editor_plugin.cpp
+++ b/editor/plugins/material_editor_plugin.cpp
@@ -38,31 +38,33 @@
#include "scene/resources/sky_material.h"
void MaterialEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- //get_scene()->connect("node_removed",this,"_node_removed");
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ //get_scene()->connect("node_removed",this,"_node_removed");
- if (first_enter) {
- //it's in propertyeditor so.. could be moved around
+ if (first_enter) {
+ //it's in propertyeditor so.. could be moved around
- light_1_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")));
- light_1_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight1Off"), SNAME("EditorIcons")));
- light_2_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")));
- light_2_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight2Off"), SNAME("EditorIcons")));
+ light_1_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")));
+ light_1_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight1Off"), SNAME("EditorIcons")));
+ light_2_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")));
+ light_2_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight2Off"), SNAME("EditorIcons")));
- sphere_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewSphereOff"), SNAME("EditorIcons")));
- sphere_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewSphere"), SNAME("EditorIcons")));
- box_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewCubeOff"), SNAME("EditorIcons")));
- box_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewCube"), SNAME("EditorIcons")));
+ sphere_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewSphereOff"), SNAME("EditorIcons")));
+ sphere_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewSphere"), SNAME("EditorIcons")));
+ box_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewCubeOff"), SNAME("EditorIcons")));
+ box_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewCube"), SNAME("EditorIcons")));
- first_enter = false;
- }
- }
+ first_enter = false;
+ }
+ } break;
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
- Size2 size = get_size();
+ case NOTIFICATION_DRAW: {
+ Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
+ Size2 size = get_size();
- draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ } break;
}
}
diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp
index 8711559dbf..4760b61dc8 100644
--- a/editor/plugins/mesh_editor_plugin.cpp
+++ b/editor/plugins/mesh_editor_plugin.cpp
@@ -49,18 +49,20 @@ void MeshEditor::gui_input(const Ref<InputEvent> &p_event) {
}
void MeshEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- //get_scene()->connect("node_removed",this,"_node_removed");
-
- if (first_enter) {
- //it's in propertyeditor so. could be moved around
-
- light_1_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")));
- light_1_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight1Off"), SNAME("EditorIcons")));
- light_2_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")));
- light_2_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight2Off"), SNAME("EditorIcons")));
- first_enter = false;
- }
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ //get_scene()->connect("node_removed",this,"_node_removed");
+
+ if (first_enter) {
+ //it's in propertyeditor so. could be moved around
+
+ light_1_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight1"), SNAME("EditorIcons")));
+ light_1_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight1Off"), SNAME("EditorIcons")));
+ light_2_switch->set_normal_texture(get_theme_icon(SNAME("MaterialPreviewLight2"), SNAME("EditorIcons")));
+ light_2_switch->set_pressed_texture(get_theme_icon(SNAME("MaterialPreviewLight2Off"), SNAME("EditorIcons")));
+ first_enter = false;
+ }
+ } break;
}
}
diff --git a/editor/plugins/node_3d_editor_gizmos.cpp b/editor/plugins/node_3d_editor_gizmos.cpp
index 9f432a1fc7..23f3087553 100644
--- a/editor/plugins/node_3d_editor_gizmos.cpp
+++ b/editor/plugins/node_3d_editor_gizmos.cpp
@@ -1069,7 +1069,6 @@ void EditorNode3DGizmoPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_subgizmo_transform, "gizmo", "subgizmo_id");
GDVIRTUAL_BIND(_set_subgizmo_transform, "gizmo", "subgizmo_id", "transform");
GDVIRTUAL_BIND(_commit_subgizmos, "gizmo", "ids", "restores", "cancel");
- ;
}
bool EditorNode3DGizmoPlugin::has_gizmo(Node3D *p_spatial) {
@@ -3670,13 +3669,8 @@ void VoxelGIGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
continue;
}
- Vector2 dir;
- dir[j] = 1.0;
- Vector2 ta, tb;
int j_n1 = (j + 1) % 3;
int j_n2 = (j + 2) % 3;
- ta[j_n1] = 1.0;
- tb[j_n2] = 1.0;
for (int k = 0; k < 4; k++) {
Vector3 from = aabb.position, to = aabb.position;
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 52671f224e..002c879cdc 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -32,6 +32,7 @@
#include "core/config/project_settings.h"
#include "core/input/input.h"
+#include "core/input/input_map.h"
#include "core/math/camera_matrix.h"
#include "core/math/math_funcs.h"
#include "core/os/keyboard.h"
@@ -82,28 +83,32 @@
#define MAX_FOV 179
void ViewportRotationControl::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- axis_menu_options.clear();
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_RIGHT);
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_TOP);
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_REAR);
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_LEFT);
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_BOTTOM);
- axis_menu_options.push_back(Node3DEditorViewport::VIEW_FRONT);
-
- axis_colors.clear();
- axis_colors.push_back(get_theme_color(SNAME("axis_x_color"), SNAME("Editor")));
- axis_colors.push_back(get_theme_color(SNAME("axis_y_color"), SNAME("Editor")));
- axis_colors.push_back(get_theme_color(SNAME("axis_z_color"), SNAME("Editor")));
- update();
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ axis_menu_options.clear();
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_RIGHT);
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_TOP);
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_REAR);
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_LEFT);
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_BOTTOM);
+ axis_menu_options.push_back(Node3DEditorViewport::VIEW_FRONT);
+
+ axis_colors.clear();
+ axis_colors.push_back(get_theme_color(SNAME("axis_x_color"), SNAME("Editor")));
+ axis_colors.push_back(get_theme_color(SNAME("axis_y_color"), SNAME("Editor")));
+ axis_colors.push_back(get_theme_color(SNAME("axis_z_color"), SNAME("Editor")));
+ update();
- if (!is_connected("mouse_exited", callable_mp(this, &ViewportRotationControl::_on_mouse_exited))) {
- connect("mouse_exited", callable_mp(this, &ViewportRotationControl::_on_mouse_exited));
- }
- }
+ if (!is_connected("mouse_exited", callable_mp(this, &ViewportRotationControl::_on_mouse_exited))) {
+ connect("mouse_exited", callable_mp(this, &ViewportRotationControl::_on_mouse_exited));
+ }
+ } break;
- if (p_what == NOTIFICATION_DRAW && viewport != nullptr) {
- _draw();
+ case NOTIFICATION_DRAW: {
+ if (viewport != nullptr) {
+ _draw();
+ }
+ } break;
}
}
@@ -2287,26 +2292,6 @@ Point2i Node3DEditorViewport::_get_warped_mouse_motion(const Ref<InputEventMouse
return relative;
}
-static bool is_shortcut_pressed(const String &p_path) {
- Ref<Shortcut> shortcut = ED_GET_SHORTCUT(p_path);
- if (shortcut.is_null()) {
- return false;
- }
-
- const Array shortcuts = shortcut->get_events();
- Ref<InputEventKey> k;
- if (shortcuts.size() > 0) {
- k = shortcuts.front();
- }
-
- if (k.is_null()) {
- return false;
- }
- const Input &input = *Input::get_singleton();
- Key keycode = k->get_keycode();
- return input.is_key_pressed(keycode);
-}
-
void Node3DEditorViewport::_update_freelook(real_t delta) {
if (!is_freelook_active()) {
return;
@@ -2336,31 +2321,34 @@ void Node3DEditorViewport::_update_freelook(real_t delta) {
Vector3 direction;
- if (is_shortcut_pressed("spatial_editor/freelook_left")) {
+ // Use actions from the inputmap, as this is the only way to reliably detect input in this method.
+ // See #54469 for more discussion and explanation.
+ Input *inp = Input::get_singleton();
+ if (inp->is_action_pressed("spatial_editor/freelook_left")) {
direction -= right;
}
- if (is_shortcut_pressed("spatial_editor/freelook_right")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_right")) {
direction += right;
}
- if (is_shortcut_pressed("spatial_editor/freelook_forward")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_forward")) {
direction += forward;
}
- if (is_shortcut_pressed("spatial_editor/freelook_backwards")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_backwards")) {
direction -= forward;
}
- if (is_shortcut_pressed("spatial_editor/freelook_up")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_up")) {
direction += up;
}
- if (is_shortcut_pressed("spatial_editor/freelook_down")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_down")) {
direction -= up;
}
real_t speed = freelook_speed;
- if (is_shortcut_pressed("spatial_editor/freelook_speed_modifier")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_speed_modifier")) {
speed *= 3.0;
}
- if (is_shortcut_pressed("spatial_editor/freelook_slow_modifier")) {
+ if (inp->is_action_pressed("spatial_editor/freelook_slow_modifier")) {
speed *= 0.333333;
}
@@ -2422,279 +2410,281 @@ void Node3DEditorViewport::_project_settings_changed() {
}
void Node3DEditorViewport::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &Node3DEditorViewport::_project_settings_changed));
- }
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ EditorNode::get_singleton()->connect("project_settings_changed", callable_mp(this, &Node3DEditorViewport::_project_settings_changed));
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- bool visible = is_visible_in_tree();
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ bool visible = is_visible_in_tree();
- set_process(visible);
+ set_process(visible);
- if (visible) {
- orthogonal = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_ORTHOGONAL));
- _update_name();
- _update_camera(0);
- } else {
- set_freelook_active(false);
- }
- call_deferred(SNAME("update_transform_gizmo_view"));
- rotation_control->set_visible(EditorSettings::get_singleton()->get("editors/3d/navigation/show_viewport_rotation_gizmo"));
- }
+ if (visible) {
+ orthogonal = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_ORTHOGONAL));
+ _update_name();
+ _update_camera(0);
+ } else {
+ set_freelook_active(false);
+ }
+ call_deferred(SNAME("update_transform_gizmo_view"));
+ rotation_control->set_visible(EditorSettings::get_singleton()->get("editors/3d/navigation/show_viewport_rotation_gizmo"));
+ } break;
- if (p_what == NOTIFICATION_RESIZED) {
- call_deferred(SNAME("update_transform_gizmo_view"));
- }
+ case NOTIFICATION_RESIZED: {
+ call_deferred(SNAME("update_transform_gizmo_view"));
+ } break;
- if (p_what == NOTIFICATION_PROCESS) {
- real_t delta = get_process_delta_time();
+ case NOTIFICATION_PROCESS: {
+ real_t delta = get_process_delta_time();
- if (zoom_indicator_delay > 0) {
- zoom_indicator_delay -= delta;
- if (zoom_indicator_delay <= 0) {
- surface->update();
- zoom_limit_label->hide();
+ if (zoom_indicator_delay > 0) {
+ zoom_indicator_delay -= delta;
+ if (zoom_indicator_delay <= 0) {
+ surface->update();
+ zoom_limit_label->hide();
+ }
}
- }
- _update_freelook(delta);
+ _update_freelook(delta);
- Node *scene_root = SceneTreeDock::get_singleton()->get_editor_data()->get_edited_scene_root();
- if (previewing_cinema && scene_root != nullptr) {
- Camera3D *cam = scene_root->get_viewport()->get_camera_3d();
- if (cam != nullptr && cam != previewing) {
- //then switch the viewport's camera to the scene's viewport camera
- if (previewing != nullptr) {
- previewing->disconnect("tree_exited", callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
+ Node *scene_root = SceneTreeDock::get_singleton()->get_editor_data()->get_edited_scene_root();
+ if (previewing_cinema && scene_root != nullptr) {
+ Camera3D *cam = scene_root->get_viewport()->get_camera_3d();
+ if (cam != nullptr && cam != previewing) {
+ //then switch the viewport's camera to the scene's viewport camera
+ if (previewing != nullptr) {
+ previewing->disconnect("tree_exited", callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
+ }
+ previewing = cam;
+ previewing->connect("tree_exited", callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
+ RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), cam->get_camera());
+ surface->update();
}
- previewing = cam;
- previewing->connect("tree_exited", callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
- RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), cam->get_camera());
- surface->update();
}
- }
- _update_camera(delta);
+ _update_camera(delta);
- Map<Node *, Object *> &selection = editor_selection->get_selection();
+ Map<Node *, Object *> &selection = editor_selection->get_selection();
- bool changed = false;
- bool exist = false;
+ bool changed = false;
+ bool exist = false;
- for (const KeyValue<Node *, Object *> &E : selection) {
- Node3D *sp = Object::cast_to<Node3D>(E.key);
- if (!sp) {
- continue;
- }
+ for (const KeyValue<Node *, Object *> &E : selection) {
+ Node3D *sp = Object::cast_to<Node3D>(E.key);
+ if (!sp) {
+ continue;
+ }
- Node3DEditorSelectedItem *se = editor_selection->get_node_editor_data<Node3DEditorSelectedItem>(sp);
- if (!se) {
- continue;
- }
+ Node3DEditorSelectedItem *se = editor_selection->get_node_editor_data<Node3DEditorSelectedItem>(sp);
+ if (!se) {
+ continue;
+ }
- Transform3D t = sp->get_global_gizmo_transform();
- VisualInstance3D *vi = Object::cast_to<VisualInstance3D>(sp);
- AABB new_aabb = vi ? vi->get_aabb() : _calculate_spatial_bounds(sp);
+ Transform3D t = sp->get_global_gizmo_transform();
+ VisualInstance3D *vi = Object::cast_to<VisualInstance3D>(sp);
+ AABB new_aabb = vi ? vi->get_aabb() : _calculate_spatial_bounds(sp);
- exist = true;
- if (se->last_xform == t && se->aabb == new_aabb && !se->last_xform_dirty) {
- continue;
- }
- changed = true;
- se->last_xform_dirty = false;
- se->last_xform = t;
+ exist = true;
+ if (se->last_xform == t && se->aabb == new_aabb && !se->last_xform_dirty) {
+ continue;
+ }
+ changed = true;
+ se->last_xform_dirty = false;
+ se->last_xform = t;
- se->aabb = new_aabb;
+ se->aabb = new_aabb;
- Transform3D t_offset = t;
+ Transform3D t_offset = t;
- // apply AABB scaling before item's global transform
- {
- const Vector3 offset(0.005, 0.005, 0.005);
- Basis aabb_s;
- aabb_s.scale(se->aabb.size + offset);
- t.translate(se->aabb.position - offset / 2);
- t.basis = t.basis * aabb_s;
- }
- {
- const Vector3 offset(0.01, 0.01, 0.01);
- Basis aabb_s;
- aabb_s.scale(se->aabb.size + offset);
- t_offset.translate(se->aabb.position - offset / 2);
- t_offset.basis = t_offset.basis * aabb_s;
+ // apply AABB scaling before item's global transform
+ {
+ const Vector3 offset(0.005, 0.005, 0.005);
+ Basis aabb_s;
+ aabb_s.scale(se->aabb.size + offset);
+ t.translate(se->aabb.position - offset / 2);
+ t.basis = t.basis * aabb_s;
+ }
+ {
+ const Vector3 offset(0.01, 0.01, 0.01);
+ Basis aabb_s;
+ aabb_s.scale(se->aabb.size + offset);
+ t_offset.translate(se->aabb.position - offset / 2);
+ t_offset.basis = t_offset.basis * aabb_s;
+ }
+
+ RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance, t);
+ RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_offset, t_offset);
+ RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_xray, t);
+ RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_xray_offset, t_offset);
}
- RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance, t);
- RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_offset, t_offset);
- RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_xray, t);
- RenderingServer::get_singleton()->instance_set_transform(se->sbox_instance_xray_offset, t_offset);
- }
+ if (changed || (spatial_editor->is_gizmo_visible() && !exist)) {
+ spatial_editor->update_transform_gizmo();
+ }
- if (changed || (spatial_editor->is_gizmo_visible() && !exist)) {
- spatial_editor->update_transform_gizmo();
- }
+ if (message_time > 0) {
+ if (message != last_message) {
+ surface->update();
+ last_message = message;
+ }
- if (message_time > 0) {
- if (message != last_message) {
- surface->update();
- last_message = message;
+ message_time -= get_physics_process_delta_time();
+ if (message_time < 0) {
+ surface->update();
+ }
}
- message_time -= get_physics_process_delta_time();
- if (message_time < 0) {
- surface->update();
+ bool show_info = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION));
+ if (show_info != info_label->is_visible()) {
+ info_label->set_visible(show_info);
}
- }
- bool show_info = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_INFORMATION));
- if (show_info != info_label->is_visible()) {
- info_label->set_visible(show_info);
- }
+ Camera3D *current_camera;
- Camera3D *current_camera;
+ if (previewing) {
+ current_camera = previewing;
+ } else {
+ current_camera = camera;
+ }
+
+ if (show_info) {
+ const String viewport_size = vformat(String::utf8("%d × %d"), viewport->get_size().x, viewport->get_size().y);
+ String text;
+ text += vformat(TTR("X: %s\n"), rtos(current_camera->get_position().x).pad_decimals(1));
+ text += vformat(TTR("Y: %s\n"), rtos(current_camera->get_position().y).pad_decimals(1));
+ text += vformat(TTR("Z: %s\n"), rtos(current_camera->get_position().z).pad_decimals(1));
+ text += "\n";
+ text += vformat(
+ TTR("Size: %s (%.1fMP)\n"),
+ viewport_size,
+ viewport->get_size().x * viewport->get_size().y * 0.000001);
+
+ text += "\n";
+ text += vformat(TTR("Objects: %d\n"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_OBJECTS_IN_FRAME));
+ text += vformat(TTR("Primitives: %d\n"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_PRIMITIVES_IN_FRAME));
+ text += vformat(TTR("Draw Calls: %d"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_DRAW_CALLS_IN_FRAME));
+
+ info_label->set_text(text);
+ }
+
+ // FPS Counter.
+ bool show_fps = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_FRAME_TIME));
+
+ if (show_fps != fps_label->is_visible()) {
+ cpu_time_label->set_visible(show_fps);
+ gpu_time_label->set_visible(show_fps);
+ fps_label->set_visible(show_fps);
+ RS::get_singleton()->viewport_set_measure_render_time(viewport->get_viewport_rid(), show_fps);
+ for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
+ cpu_time_history[i] = 0;
+ gpu_time_history[i] = 0;
+ }
+ cpu_time_history_index = 0;
+ gpu_time_history_index = 0;
+ }
+ if (show_fps) {
+ cpu_time_history[cpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_cpu(viewport->get_viewport_rid());
+ cpu_time_history_index = (cpu_time_history_index + 1) % FRAME_TIME_HISTORY;
+ double cpu_time = 0.0;
+ for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
+ cpu_time += cpu_time_history[i];
+ }
+ cpu_time /= FRAME_TIME_HISTORY;
+ // Prevent unrealistically low values.
+ cpu_time = MAX(0.01, cpu_time);
+
+ gpu_time_history[gpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_gpu(viewport->get_viewport_rid());
+ gpu_time_history_index = (gpu_time_history_index + 1) % FRAME_TIME_HISTORY;
+ double gpu_time = 0.0;
+ for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
+ gpu_time += gpu_time_history[i];
+ }
+ gpu_time /= FRAME_TIME_HISTORY;
+ // Prevent division by zero for the FPS counter (and unrealistically low values).
+ // This limits the reported FPS to 100000.
+ gpu_time = MAX(0.01, gpu_time);
+
+ // Color labels depending on performance level ("good" = green, "OK" = yellow, "bad" = red).
+ // Middle point is at 15 ms.
+ cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), rtos(cpu_time).pad_decimals(2)));
+ cpu_time_label->add_theme_color_override(
+ "font_color",
+ frame_time_gradient->get_color_at_offset(
+ Math::range_lerp(cpu_time, 0, 30, 0, 1)));
+
+ gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), rtos(gpu_time).pad_decimals(2)));
+ // Middle point is at 15 ms.
+ gpu_time_label->add_theme_color_override(
+ "font_color",
+ frame_time_gradient->get_color_at_offset(
+ Math::range_lerp(gpu_time, 0, 30, 0, 1)));
+
+ const double fps = 1000.0 / gpu_time;
+ fps_label->set_text(vformat(TTR("FPS: %d"), fps));
+ // Middle point is at 60 FPS.
+ fps_label->add_theme_color_override(
+ "font_color",
+ frame_time_gradient->get_color_at_offset(
+ Math::range_lerp(fps, 110, 10, 0, 1)));
+ }
+
+ bool show_cinema = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW));
+ cinema_label->set_visible(show_cinema);
+ if (show_cinema) {
+ float cinema_half_width = cinema_label->get_size().width / 2.0f;
+ cinema_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -cinema_half_width);
+ }
- if (previewing) {
- current_camera = previewing;
- } else {
- current_camera = camera;
- }
-
- if (show_info) {
- const String viewport_size = vformat(String::utf8("%d × %d"), viewport->get_size().x, viewport->get_size().y);
- String text;
- text += vformat(TTR("X: %s\n"), rtos(current_camera->get_position().x).pad_decimals(1));
- text += vformat(TTR("Y: %s\n"), rtos(current_camera->get_position().y).pad_decimals(1));
- text += vformat(TTR("Z: %s\n"), rtos(current_camera->get_position().z).pad_decimals(1));
- text += "\n";
- text += vformat(
- TTR("Size: %s (%.1fMP)\n"),
- viewport_size,
- viewport->get_size().x * viewport->get_size().y * 0.000001);
-
- text += "\n";
- text += vformat(TTR("Objects: %d\n"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_OBJECTS_IN_FRAME));
- text += vformat(TTR("Primitives: %d\n"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_PRIMITIVES_IN_FRAME));
- text += vformat(TTR("Draw Calls: %d"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_DRAW_CALLS_IN_FRAME));
-
- info_label->set_text(text);
- }
-
- // FPS Counter.
- bool show_fps = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_FRAME_TIME));
-
- if (show_fps != fps_label->is_visible()) {
- cpu_time_label->set_visible(show_fps);
- gpu_time_label->set_visible(show_fps);
- fps_label->set_visible(show_fps);
- RS::get_singleton()->viewport_set_measure_render_time(viewport->get_viewport_rid(), show_fps);
- for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
- cpu_time_history[i] = 0;
- gpu_time_history[i] = 0;
- }
- cpu_time_history_index = 0;
- gpu_time_history_index = 0;
- }
- if (show_fps) {
- cpu_time_history[cpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_cpu(viewport->get_viewport_rid());
- cpu_time_history_index = (cpu_time_history_index + 1) % FRAME_TIME_HISTORY;
- double cpu_time = 0.0;
- for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
- cpu_time += cpu_time_history[i];
- }
- cpu_time /= FRAME_TIME_HISTORY;
- // Prevent unrealistically low values.
- cpu_time = MAX(0.01, cpu_time);
-
- gpu_time_history[gpu_time_history_index] = RS::get_singleton()->viewport_get_measured_render_time_gpu(viewport->get_viewport_rid());
- gpu_time_history_index = (gpu_time_history_index + 1) % FRAME_TIME_HISTORY;
- double gpu_time = 0.0;
- for (int i = 0; i < FRAME_TIME_HISTORY; i++) {
- gpu_time += gpu_time_history[i];
- }
- gpu_time /= FRAME_TIME_HISTORY;
- // Prevent division by zero for the FPS counter (and unrealistically low values).
- // This limits the reported FPS to 100000.
- gpu_time = MAX(0.01, gpu_time);
-
- // Color labels depending on performance level ("good" = green, "OK" = yellow, "bad" = red).
- // Middle point is at 15 ms.
- cpu_time_label->set_text(vformat(TTR("CPU Time: %s ms"), rtos(cpu_time).pad_decimals(2)));
- cpu_time_label->add_theme_color_override(
- "font_color",
- frame_time_gradient->get_color_at_offset(
- Math::range_lerp(cpu_time, 0, 30, 0, 1)));
-
- gpu_time_label->set_text(vformat(TTR("GPU Time: %s ms"), rtos(gpu_time).pad_decimals(2)));
- // Middle point is at 15 ms.
- gpu_time_label->add_theme_color_override(
- "font_color",
- frame_time_gradient->get_color_at_offset(
- Math::range_lerp(gpu_time, 0, 30, 0, 1)));
-
- const double fps = 1000.0 / gpu_time;
- fps_label->set_text(vformat(TTR("FPS: %d"), fps));
- // Middle point is at 60 FPS.
- fps_label->add_theme_color_override(
- "font_color",
- frame_time_gradient->get_color_at_offset(
- Math::range_lerp(fps, 110, 10, 0, 1)));
- }
-
- bool show_cinema = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW));
- cinema_label->set_visible(show_cinema);
- if (show_cinema) {
- float cinema_half_width = cinema_label->get_size().width / 2.0f;
- cinema_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -cinema_half_width);
- }
-
- if (lock_rotation) {
- float locked_half_width = locked_label->get_size().width / 2.0f;
- locked_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -locked_half_width);
- }
- }
-
- if (p_what == NOTIFICATION_ENTER_TREE) {
- surface->connect("draw", callable_mp(this, &Node3DEditorViewport::_draw));
- surface->connect("gui_input", callable_mp(this, &Node3DEditorViewport::_sinput));
- surface->connect("mouse_entered", callable_mp(this, &Node3DEditorViewport::_surface_mouse_enter));
- surface->connect("mouse_exited", callable_mp(this, &Node3DEditorViewport::_surface_mouse_exit));
- surface->connect("focus_entered", callable_mp(this, &Node3DEditorViewport::_surface_focus_enter));
- surface->connect("focus_exited", callable_mp(this, &Node3DEditorViewport::_surface_focus_exit));
-
- _init_gizmo_instance(index);
- }
-
- if (p_what == NOTIFICATION_EXIT_TREE) {
- _finish_gizmo_instances();
- }
+ if (lock_rotation) {
+ float locked_half_width = locked_label->get_size().width / 2.0f;
+ locked_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -locked_half_width);
+ }
+ } break;
- if (p_what == NOTIFICATION_THEME_CHANGED) {
- view_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
- preview_camera->set_icon(get_theme_icon(SNAME("Camera3D"), SNAME("EditorIcons")));
- Control *gui_base = EditorNode::get_singleton()->get_gui_base();
+ case NOTIFICATION_ENTER_TREE: {
+ surface->connect("draw", callable_mp(this, &Node3DEditorViewport::_draw));
+ surface->connect("gui_input", callable_mp(this, &Node3DEditorViewport::_sinput));
+ surface->connect("mouse_entered", callable_mp(this, &Node3DEditorViewport::_surface_mouse_enter));
+ surface->connect("mouse_exited", callable_mp(this, &Node3DEditorViewport::_surface_mouse_exit));
+ surface->connect("focus_entered", callable_mp(this, &Node3DEditorViewport::_surface_focus_enter));
+ surface->connect("focus_exited", callable_mp(this, &Node3DEditorViewport::_surface_focus_exit));
+
+ _init_gizmo_instance(index);
+ } break;
- view_menu->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- view_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- view_menu->add_theme_style_override("pressed", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- view_menu->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- view_menu->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
-
- preview_camera->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- preview_camera->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- preview_camera->add_theme_style_override("pressed", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- preview_camera->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- preview_camera->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
-
- frame_time_gradient->set_color(0, get_theme_color(SNAME("success_color"), SNAME("Editor")));
- frame_time_gradient->set_color(1, get_theme_color(SNAME("warning_color"), SNAME("Editor")));
- frame_time_gradient->set_color(2, get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ case NOTIFICATION_EXIT_TREE: {
+ _finish_gizmo_instances();
+ } break;
- info_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- cpu_time_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- gpu_time_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- fps_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- cinema_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
- locked_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ case NOTIFICATION_THEME_CHANGED: {
+ view_menu->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
+ preview_camera->set_icon(get_theme_icon(SNAME("Camera3D"), SNAME("EditorIcons")));
+ Control *gui_base = EditorNode::get_singleton()->get_gui_base();
+
+ view_menu->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ view_menu->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ view_menu->add_theme_style_override("pressed", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ view_menu->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ view_menu->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+
+ preview_camera->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ preview_camera->add_theme_style_override("hover", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ preview_camera->add_theme_style_override("pressed", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ preview_camera->add_theme_style_override("focus", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ preview_camera->add_theme_style_override("disabled", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+
+ frame_time_gradient->set_color(0, get_theme_color(SNAME("success_color"), SNAME("Editor")));
+ frame_time_gradient->set_color(1, get_theme_color(SNAME("warning_color"), SNAME("Editor")));
+ frame_time_gradient->set_color(2, get_theme_color(SNAME("error_color"), SNAME("Editor")));
+
+ info_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ cpu_time_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ gpu_time_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ fps_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ cinema_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ locked_label->add_theme_style_override("normal", gui_base->get_theme_stylebox(SNAME("Information3dViewport"), SNAME("EditorStyles")));
+ } break;
}
}
@@ -4421,6 +4411,28 @@ void Node3DEditorViewport::finish_transform() {
surface->update();
}
+// Register a shortcut and also add it as an input action with the same events.
+void Node3DEditorViewport::register_shortcut_action(const String &p_path, const String &p_name, Key p_keycode) {
+ Ref<Shortcut> sc = ED_SHORTCUT(p_path, p_name, p_keycode);
+ shortcut_changed_callback(sc, p_path);
+ // Connect to the change event on the shortcut so the input binding can be updated.
+ sc->connect("changed", callable_mp(this, &Node3DEditorViewport::shortcut_changed_callback), varray(sc, p_path));
+}
+
+// Update the action in the InputMap to the provided shortcut events.
+void Node3DEditorViewport::shortcut_changed_callback(const Ref<Shortcut> p_shortcut, const String &p_shortcut_path) {
+ InputMap *im = InputMap::get_singleton();
+ if (im->has_action(p_shortcut_path)) {
+ im->action_erase_events(p_shortcut_path);
+ } else {
+ im->add_action(p_shortcut_path);
+ }
+
+ for (int i = 0; i < p_shortcut->get_events().size(); i++) {
+ im->action_add_event(p_shortcut_path, p_shortcut->get_events()[i]);
+ }
+}
+
Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p_index) {
cpu_time_history_index = 0;
gpu_time_history_index = 0;
@@ -4580,14 +4592,15 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p
view_menu->get_popup()->set_item_tooltip(shadeless_idx, unsupported_tooltip);
}
- ED_SHORTCUT("spatial_editor/freelook_left", TTR("Freelook Left"), Key::A);
- ED_SHORTCUT("spatial_editor/freelook_right", TTR("Freelook Right"), Key::D);
- ED_SHORTCUT("spatial_editor/freelook_forward", TTR("Freelook Forward"), Key::W);
- ED_SHORTCUT("spatial_editor/freelook_backwards", TTR("Freelook Backwards"), Key::S);
- ED_SHORTCUT("spatial_editor/freelook_up", TTR("Freelook Up"), Key::E);
- ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), Key::Q);
- ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), Key::SHIFT);
- ED_SHORTCUT("spatial_editor/freelook_slow_modifier", TTR("Freelook Slow Modifier"), Key::ALT);
+ register_shortcut_action("spatial_editor/freelook_left", TTR("Freelook Left"), Key::A);
+ register_shortcut_action("spatial_editor/freelook_right", TTR("Freelook Right"), Key::D);
+ register_shortcut_action("spatial_editor/freelook_forward", TTR("Freelook Forward"), Key::W);
+ register_shortcut_action("spatial_editor/freelook_backwards", TTR("Freelook Backwards"), Key::S);
+ register_shortcut_action("spatial_editor/freelook_up", TTR("Freelook Up"), Key::E);
+ register_shortcut_action("spatial_editor/freelook_down", TTR("Freelook Down"), Key::Q);
+ register_shortcut_action("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), Key::SHIFT);
+ register_shortcut_action("spatial_editor/freelook_slow_modifier", TTR("Freelook Slow Modifier"), Key::ALT);
+
ED_SHORTCUT("spatial_editor/lock_transform_x", TTR("Lock Transformation to X axis"), Key::X);
ED_SHORTCUT("spatial_editor/lock_transform_y", TTR("Lock Transformation to Y axis"), Key::Y);
ED_SHORTCUT("spatial_editor/lock_transform_z", TTR("Lock Transformation to Z axis"), Key::Z);
@@ -4799,197 +4812,202 @@ void Node3DEditorViewportContainer::gui_input(const Ref<InputEvent> &p_event) {
}
void Node3DEditorViewportContainer::_notification(int p_what) {
- if (p_what == NOTIFICATION_MOUSE_ENTER || p_what == NOTIFICATION_MOUSE_EXIT) {
- mouseover = (p_what == NOTIFICATION_MOUSE_ENTER);
- update();
- }
+ switch (p_what) {
+ case NOTIFICATION_MOUSE_ENTER:
+ case NOTIFICATION_MOUSE_EXIT: {
+ mouseover = (p_what == NOTIFICATION_MOUSE_ENTER);
+ update();
+ } break;
- if (p_what == NOTIFICATION_DRAW && mouseover) {
- Ref<Texture2D> h_grabber = get_theme_icon(SNAME("grabber"), SNAME("HSplitContainer"));
- Ref<Texture2D> v_grabber = get_theme_icon(SNAME("grabber"), SNAME("VSplitContainer"));
+ case NOTIFICATION_DRAW: {
+ if (mouseover) {
+ Ref<Texture2D> h_grabber = get_theme_icon(SNAME("grabber"), SNAME("HSplitContainer"));
+ Ref<Texture2D> v_grabber = get_theme_icon(SNAME("grabber"), SNAME("VSplitContainer"));
- Ref<Texture2D> hdiag_grabber = get_theme_icon(SNAME("GuiViewportHdiagsplitter"), SNAME("EditorIcons"));
- Ref<Texture2D> vdiag_grabber = get_theme_icon(SNAME("GuiViewportVdiagsplitter"), SNAME("EditorIcons"));
- Ref<Texture2D> vh_grabber = get_theme_icon(SNAME("GuiViewportVhsplitter"), SNAME("EditorIcons"));
+ Ref<Texture2D> hdiag_grabber = get_theme_icon(SNAME("GuiViewportHdiagsplitter"), SNAME("EditorIcons"));
+ Ref<Texture2D> vdiag_grabber = get_theme_icon(SNAME("GuiViewportVdiagsplitter"), SNAME("EditorIcons"));
+ Ref<Texture2D> vh_grabber = get_theme_icon(SNAME("GuiViewportVhsplitter"), SNAME("EditorIcons"));
- Vector2 size = get_size();
+ Vector2 size = get_size();
- int h_sep = get_theme_constant(SNAME("separation"), SNAME("HSplitContainer"));
+ int h_sep = get_theme_constant(SNAME("separation"), SNAME("HSplitContainer"));
- int v_sep = get_theme_constant(SNAME("separation"), SNAME("VSplitContainer"));
+ int v_sep = get_theme_constant(SNAME("separation"), SNAME("VSplitContainer"));
- int mid_w = size.width * ratio_h;
- int mid_h = size.height * ratio_v;
+ int mid_w = size.width * ratio_h;
+ int mid_h = size.height * ratio_v;
- int size_left = mid_w - h_sep / 2;
- int size_bottom = size.height - mid_h - v_sep / 2;
+ int size_left = mid_w - h_sep / 2;
+ int size_bottom = size.height - mid_h - v_sep / 2;
- switch (view) {
- case VIEW_USE_1_VIEWPORT: {
- // Nothing to show.
+ switch (view) {
+ case VIEW_USE_1_VIEWPORT: {
+ // Nothing to show.
- } break;
- case VIEW_USE_2_VIEWPORTS: {
- draw_texture(v_grabber, Vector2((size.width - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
- set_default_cursor_shape(CURSOR_VSPLIT);
+ } break;
+ case VIEW_USE_2_VIEWPORTS: {
+ draw_texture(v_grabber, Vector2((size.width - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
+ set_default_cursor_shape(CURSOR_VSPLIT);
- } break;
- case VIEW_USE_2_VIEWPORTS_ALT: {
- draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, (size.height - h_grabber->get_height()) / 2));
- set_default_cursor_shape(CURSOR_HSPLIT);
+ } break;
+ case VIEW_USE_2_VIEWPORTS_ALT: {
+ draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, (size.height - h_grabber->get_height()) / 2));
+ set_default_cursor_shape(CURSOR_HSPLIT);
- } break;
- case VIEW_USE_3_VIEWPORTS: {
- if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
- draw_texture(hdiag_grabber, Vector2(mid_w - hdiag_grabber->get_width() / 2, mid_h - v_grabber->get_height() / 4));
- set_default_cursor_shape(CURSOR_DRAG);
- } else if ((hovering_v && !dragging_h) || dragging_v) {
- draw_texture(v_grabber, Vector2((size.width - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
- set_default_cursor_shape(CURSOR_VSPLIT);
- } else if (hovering_h || dragging_h) {
- draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, mid_h + v_grabber->get_height() / 2 + (size_bottom - h_grabber->get_height()) / 2));
- set_default_cursor_shape(CURSOR_HSPLIT);
- }
+ } break;
+ case VIEW_USE_3_VIEWPORTS: {
+ if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
+ draw_texture(hdiag_grabber, Vector2(mid_w - hdiag_grabber->get_width() / 2, mid_h - v_grabber->get_height() / 4));
+ set_default_cursor_shape(CURSOR_DRAG);
+ } else if ((hovering_v && !dragging_h) || dragging_v) {
+ draw_texture(v_grabber, Vector2((size.width - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
+ set_default_cursor_shape(CURSOR_VSPLIT);
+ } else if (hovering_h || dragging_h) {
+ draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, mid_h + v_grabber->get_height() / 2 + (size_bottom - h_grabber->get_height()) / 2));
+ set_default_cursor_shape(CURSOR_HSPLIT);
+ }
- } break;
- case VIEW_USE_3_VIEWPORTS_ALT: {
- if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
- draw_texture(vdiag_grabber, Vector2(mid_w - vdiag_grabber->get_width() + v_grabber->get_height() / 4, mid_h - vdiag_grabber->get_height() / 2));
- set_default_cursor_shape(CURSOR_DRAG);
- } else if ((hovering_v && !dragging_h) || dragging_v) {
- draw_texture(v_grabber, Vector2((size_left - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
- set_default_cursor_shape(CURSOR_VSPLIT);
- } else if (hovering_h || dragging_h) {
- draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, (size.height - h_grabber->get_height()) / 2));
- set_default_cursor_shape(CURSOR_HSPLIT);
- }
+ } break;
+ case VIEW_USE_3_VIEWPORTS_ALT: {
+ if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
+ draw_texture(vdiag_grabber, Vector2(mid_w - vdiag_grabber->get_width() + v_grabber->get_height() / 4, mid_h - vdiag_grabber->get_height() / 2));
+ set_default_cursor_shape(CURSOR_DRAG);
+ } else if ((hovering_v && !dragging_h) || dragging_v) {
+ draw_texture(v_grabber, Vector2((size_left - v_grabber->get_width()) / 2, mid_h - v_grabber->get_height() / 2));
+ set_default_cursor_shape(CURSOR_VSPLIT);
+ } else if (hovering_h || dragging_h) {
+ draw_texture(h_grabber, Vector2(mid_w - h_grabber->get_width() / 2, (size.height - h_grabber->get_height()) / 2));
+ set_default_cursor_shape(CURSOR_HSPLIT);
+ }
- } break;
- case VIEW_USE_4_VIEWPORTS: {
- Vector2 half(mid_w, mid_h);
- if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
- draw_texture(vh_grabber, half - vh_grabber->get_size() / 2.0);
- set_default_cursor_shape(CURSOR_DRAG);
- } else if ((hovering_v && !dragging_h) || dragging_v) {
- draw_texture(v_grabber, half - v_grabber->get_size() / 2.0);
- set_default_cursor_shape(CURSOR_VSPLIT);
- } else if (hovering_h || dragging_h) {
- draw_texture(h_grabber, half - h_grabber->get_size() / 2.0);
- set_default_cursor_shape(CURSOR_HSPLIT);
- }
+ } break;
+ case VIEW_USE_4_VIEWPORTS: {
+ Vector2 half(mid_w, mid_h);
+ if ((hovering_v && hovering_h && !dragging_v && !dragging_h) || (dragging_v && dragging_h)) {
+ draw_texture(vh_grabber, half - vh_grabber->get_size() / 2.0);
+ set_default_cursor_shape(CURSOR_DRAG);
+ } else if ((hovering_v && !dragging_h) || dragging_v) {
+ draw_texture(v_grabber, half - v_grabber->get_size() / 2.0);
+ set_default_cursor_shape(CURSOR_VSPLIT);
+ } else if (hovering_h || dragging_h) {
+ draw_texture(h_grabber, half - h_grabber->get_size() / 2.0);
+ set_default_cursor_shape(CURSOR_HSPLIT);
+ }
- } break;
- }
- }
+ } break;
+ }
+ }
+ } break;
- if (p_what == NOTIFICATION_SORT_CHILDREN) {
- Node3DEditorViewport *viewports[4];
- int vc = 0;
- for (int i = 0; i < get_child_count(); i++) {
- viewports[vc] = Object::cast_to<Node3DEditorViewport>(get_child(i));
- if (viewports[vc]) {
- vc++;
+ case NOTIFICATION_SORT_CHILDREN: {
+ Node3DEditorViewport *viewports[4];
+ int vc = 0;
+ for (int i = 0; i < get_child_count(); i++) {
+ viewports[vc] = Object::cast_to<Node3DEditorViewport>(get_child(i));
+ if (viewports[vc]) {
+ vc++;
+ }
}
- }
- ERR_FAIL_COND(vc != 4);
+ ERR_FAIL_COND(vc != 4);
- Size2 size = get_size();
+ Size2 size = get_size();
- if (size.x < 10 || size.y < 10) {
- for (int i = 0; i < 4; i++) {
- viewports[i]->hide();
+ if (size.x < 10 || size.y < 10) {
+ for (int i = 0; i < 4; i++) {
+ viewports[i]->hide();
+ }
+ return;
}
- return;
- }
- int h_sep = get_theme_constant(SNAME("separation"), SNAME("HSplitContainer"));
+ int h_sep = get_theme_constant(SNAME("separation"), SNAME("HSplitContainer"));
- int v_sep = get_theme_constant(SNAME("separation"), SNAME("VSplitContainer"));
+ int v_sep = get_theme_constant(SNAME("separation"), SNAME("VSplitContainer"));
- int mid_w = size.width * ratio_h;
- int mid_h = size.height * ratio_v;
+ int mid_w = size.width * ratio_h;
+ int mid_h = size.height * ratio_v;
- int size_left = mid_w - h_sep / 2;
- int size_right = size.width - mid_w - h_sep / 2;
+ int size_left = mid_w - h_sep / 2;
+ int size_right = size.width - mid_w - h_sep / 2;
- int size_top = mid_h - v_sep / 2;
- int size_bottom = size.height - mid_h - v_sep / 2;
+ int size_top = mid_h - v_sep / 2;
+ int size_bottom = size.height - mid_h - v_sep / 2;
- switch (view) {
- case VIEW_USE_1_VIEWPORT: {
- viewports[0]->show();
- for (int i = 1; i < 4; i++) {
- viewports[i]->hide();
- }
+ switch (view) {
+ case VIEW_USE_1_VIEWPORT: {
+ viewports[0]->show();
+ for (int i = 1; i < 4; i++) {
+ viewports[i]->hide();
+ }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), size));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), size));
- } break;
- case VIEW_USE_2_VIEWPORTS: {
- for (int i = 0; i < 4; i++) {
- if (i == 1 || i == 3) {
- viewports[i]->hide();
- } else {
- viewports[i]->show();
+ } break;
+ case VIEW_USE_2_VIEWPORTS: {
+ for (int i = 0; i < 4; i++) {
+ if (i == 1 || i == 3) {
+ viewports[i]->hide();
+ } else {
+ viewports[i]->show();
+ }
}
- }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size.width, size_top)));
- fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size.width, size_bottom)));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size.width, size_top)));
+ fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size.width, size_bottom)));
- } break;
- case VIEW_USE_2_VIEWPORTS_ALT: {
- for (int i = 0; i < 4; i++) {
- if (i == 1 || i == 3) {
- viewports[i]->hide();
- } else {
- viewports[i]->show();
+ } break;
+ case VIEW_USE_2_VIEWPORTS_ALT: {
+ for (int i = 0; i < 4; i++) {
+ if (i == 1 || i == 3) {
+ viewports[i]->hide();
+ } else {
+ viewports[i]->show();
+ }
}
- }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size.height)));
- fit_child_in_rect(viewports[2], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size.height)));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size.height)));
+ fit_child_in_rect(viewports[2], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size.height)));
- } break;
- case VIEW_USE_3_VIEWPORTS: {
- for (int i = 0; i < 4; i++) {
- if (i == 1) {
- viewports[i]->hide();
- } else {
- viewports[i]->show();
+ } break;
+ case VIEW_USE_3_VIEWPORTS: {
+ for (int i = 0; i < 4; i++) {
+ if (i == 1) {
+ viewports[i]->hide();
+ } else {
+ viewports[i]->show();
+ }
}
- }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size.width, size_top)));
- fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
- fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, mid_h + v_sep / 2), Vector2(size_right, size_bottom)));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size.width, size_top)));
+ fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
+ fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, mid_h + v_sep / 2), Vector2(size_right, size_bottom)));
- } break;
- case VIEW_USE_3_VIEWPORTS_ALT: {
- for (int i = 0; i < 4; i++) {
- if (i == 1) {
- viewports[i]->hide();
- } else {
- viewports[i]->show();
+ } break;
+ case VIEW_USE_3_VIEWPORTS_ALT: {
+ for (int i = 0; i < 4; i++) {
+ if (i == 1) {
+ viewports[i]->hide();
+ } else {
+ viewports[i]->show();
+ }
}
- }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size_top)));
- fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
- fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size.height)));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size_top)));
+ fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
+ fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size.height)));
- } break;
- case VIEW_USE_4_VIEWPORTS: {
- for (int i = 0; i < 4; i++) {
- viewports[i]->show();
- }
+ } break;
+ case VIEW_USE_4_VIEWPORTS: {
+ for (int i = 0; i < 4; i++) {
+ viewports[i]->show();
+ }
- fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size_top)));
- fit_child_in_rect(viewports[1], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size_top)));
- fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
- fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, mid_h + v_sep / 2), Vector2(size_right, size_bottom)));
+ fit_child_in_rect(viewports[0], Rect2(Vector2(), Vector2(size_left, size_top)));
+ fit_child_in_rect(viewports[1], Rect2(Vector2(mid_w + h_sep / 2, 0), Vector2(size_right, size_top)));
+ fit_child_in_rect(viewports[2], Rect2(Vector2(0, mid_h + v_sep / 2), Vector2(size_left, size_bottom)));
+ fit_child_in_rect(viewports[3], Rect2(Vector2(mid_w + h_sep / 2, mid_h + v_sep / 2), Vector2(size_right, size_bottom)));
- } break;
- }
+ } break;
+ }
+ } break;
}
}
@@ -6951,6 +6969,7 @@ void Node3DEditor::_notification(int p_what) {
sun_state->set_custom_minimum_size(sun_vb->get_combined_minimum_size());
environ_state->set_custom_minimum_size(environ_vb->get_combined_minimum_size());
} break;
+
case NOTIFICATION_ENTER_TREE: {
_update_theme();
_register_all_gizmos();
@@ -6958,9 +6977,11 @@ void Node3DEditor::_notification(int p_what) {
_init_indicators();
update_all_gizmos();
} break;
+
case NOTIFICATION_EXIT_TREE: {
_finish_indicators();
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
_update_gizmos_menu_theme();
@@ -6968,11 +6989,13 @@ void Node3DEditor::_notification(int p_what) {
sun_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window")));
environ_title->add_theme_font_override("font", get_theme_font(SNAME("title_font"), SNAME("Window")));
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
// Update grid color by rebuilding grid.
_finish_grid();
_init_grid();
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
if (!is_visible() && tool_option_button[TOOL_OPT_OVERRIDE_CAMERA]->is_pressed()) {
EditorDebuggerNode *debugger = EditorDebuggerNode::get_singleton();
diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h
index 9e92a1e9b3..5c0bfab34e 100644
--- a/editor/plugins/node_3d_editor_plugin.h
+++ b/editor/plugins/node_3d_editor_plugin.h
@@ -378,7 +378,7 @@ private:
Node3DEditor *spatial_editor;
Camera3D *previewing;
- Camera3D *preview;
+ Camera3D *preview = nullptr;
bool previewing_cinema;
bool _is_node_locked(const Node *p_node);
@@ -415,6 +415,9 @@ private:
void update_transform(Point2 p_mousepos, bool p_shift);
void finish_transform();
+ void register_shortcut_action(const String &p_path, const String &p_name, Key p_keycode);
+ void shortcut_changed_callback(const Ref<Shortcut> p_shortcut, const String &p_shortcut_path);
+
protected:
void _notification(int p_what);
static void _bind_methods();
diff --git a/editor/plugins/ot_features_plugin.cpp b/editor/plugins/ot_features_plugin.cpp
index 719b9ecc7c..f8e6054848 100644
--- a/editor/plugins/ot_features_plugin.cpp
+++ b/editor/plugins/ot_features_plugin.cpp
@@ -46,12 +46,15 @@ void OpenTypeFeaturesEditor::update_property() {
}
void OpenTypeFeaturesEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- Color base = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
-
- button->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
- button->set_size(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons"))->get_size());
- spin->set_custom_label_color(true, base);
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ Color base = get_theme_color(SNAME("accent_color"), SNAME("Editor"));
+
+ button->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ button->set_size(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons"))->get_size());
+ spin->set_custom_label_color(true, base);
+ } break;
}
}
@@ -139,10 +142,13 @@ void OpenTypeFeaturesAdd::_features_menu() {
}
void OpenTypeFeaturesAdd::_notification(int p_what) {
- if (p_what == NOTIFICATION_THEME_CHANGED || p_what == NOTIFICATION_ENTER_TREE) {
- set_label("");
- button->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
- button->set_size(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))->get_size());
+ switch (p_what) {
+ case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_ENTER_TREE: {
+ set_label("");
+ button->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ button->set_size(get_theme_icon(SNAME("Add"), SNAME("EditorIcons"))->get_size());
+ } break;
}
}
diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp
index 22b79921bb..f096b2abb1 100644
--- a/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -69,6 +69,7 @@ void Polygon2DEditor::_notification(int p_what) {
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
uv_panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
} break;
+
case NOTIFICATION_READY: {
button_uv->set_icon(get_theme_icon(SNAME("Uv"), SNAME("EditorIcons")));
@@ -96,6 +97,7 @@ void Polygon2DEditor::_notification(int p_what) {
uv_edit_draw->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
bone_scroll->add_theme_style_override("bg", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
if (!is_visible()) {
uv_edit->hide();
@@ -1068,7 +1070,7 @@ void Polygon2DEditor::_uv_draw() {
if (uv_create && i == uvs.size() - 1) {
next_point = uv_create_to;
}
- if (i < uv_draw_max /*&& polygons.size() == 0 && polygon_create.size() == 0*/) { //if using or creating polygons, do not show outline (will show polygons instead)
+ if (i < uv_draw_max) { // If using or creating polygons, do not show outline (will show polygons instead).
uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, Math::round(EDSCALE));
}
}
diff --git a/editor/plugins/polygon_3d_editor_plugin.cpp b/editor/plugins/polygon_3d_editor_plugin.cpp
index 6cba3e2861..2d4812c55b 100644
--- a/editor/plugins/polygon_3d_editor_plugin.cpp
+++ b/editor/plugins/polygon_3d_editor_plugin.cpp
@@ -50,6 +50,7 @@ void Polygon3DEditor::_notification(int p_what) {
get_tree()->connect("node_removed", callable_mp(this, &Polygon3DEditor::_node_removed));
} break;
+
case NOTIFICATION_PROCESS: {
if (!node) {
return;
diff --git a/editor/plugins/replication_editor_plugin.cpp b/editor/plugins/replication_editor_plugin.cpp
index 604cbcd103..e4c1c69804 100644
--- a/editor/plugins/replication_editor_plugin.cpp
+++ b/editor/plugins/replication_editor_plugin.cpp
@@ -94,10 +94,15 @@ void ReplicationEditor::_bind_methods() {
}
void ReplicationEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
- } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- update_keying();
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ update_keying();
+ } break;
}
}
@@ -355,13 +360,15 @@ void ReplicationEditorPlugin::_property_keyed(const String &p_keyed, const Varia
}
void ReplicationEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- //Node3DEditor::get_singleton()->connect("transform_key_request", callable_mp(this, &AnimationPlayerEditorPlugin::_transform_key_request));
- InspectorDock::get_inspector_singleton()->connect("property_keyed", callable_mp(this, &ReplicationEditorPlugin::_property_keyed));
- repl_editor->connect("keying_changed", callable_mp(this, &ReplicationEditorPlugin::_keying_changed));
- // TODO make lock usable.
- //InspectorDock::get_inspector_singleton()->connect("object_inspected", callable_mp(repl_editor, &ReplicationEditor::update_keying));
- get_tree()->connect("node_removed", callable_mp(this, &ReplicationEditorPlugin::_node_removed));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ //Node3DEditor::get_singleton()->connect("transform_key_request", callable_mp(this, &AnimationPlayerEditorPlugin::_transform_key_request));
+ InspectorDock::get_inspector_singleton()->connect("property_keyed", callable_mp(this, &ReplicationEditorPlugin::_property_keyed));
+ repl_editor->connect("keying_changed", callable_mp(this, &ReplicationEditorPlugin::_keying_changed));
+ // TODO make lock usable.
+ //InspectorDock::get_inspector_singleton()->connect("object_inspected", callable_mp(repl_editor, &ReplicationEditor::update_keying));
+ get_tree()->connect("node_removed", callable_mp(this, &ReplicationEditorPlugin::_node_removed));
+ } break;
}
}
diff --git a/editor/plugins/resource_preloader_editor_plugin.cpp b/editor/plugins/resource_preloader_editor_plugin.cpp
index e04e3c146f..b7aef7f1bb 100644
--- a/editor/plugins/resource_preloader_editor_plugin.cpp
+++ b/editor/plugins/resource_preloader_editor_plugin.cpp
@@ -38,15 +38,10 @@
#include "editor/editor_settings.h"
void ResourcePreloaderEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- load->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
- }
-
- if (p_what == NOTIFICATION_READY) {
- //NodePath("/root")->connect("node_removed", this,"_node_removed",Vector<Variant>(),true);
- }
-
- if (p_what == NOTIFICATION_DRAW) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ load->set_icon(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/editor/plugins/root_motion_editor_plugin.cpp b/editor/plugins/root_motion_editor_plugin.cpp
index 34b39d2a17..bfb672d694 100644
--- a/editor/plugins/root_motion_editor_plugin.cpp
+++ b/editor/plugins/root_motion_editor_plugin.cpp
@@ -233,9 +233,12 @@ void EditorPropertyRootMotion::setup(const NodePath &p_base_hint) {
}
void EditorPropertyRootMotion::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- Ref<Texture2D> t = get_theme_icon(SNAME("Clear"), SNAME("EditorIcons"));
- clear->set_icon(t);
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ Ref<Texture2D> t = get_theme_icon(SNAME("Clear"), SNAME("EditorIcons"));
+ clear->set_icon(t);
+ } break;
}
}
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index 315879d4ac..30c2b12519 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -36,6 +36,7 @@
#include "core/io/resource_loader.h"
#include "core/os/keyboard.h"
#include "core/os/os.h"
+#include "core/version.h"
#include "editor/debugger/editor_debugger_node.h"
#include "editor/debugger/script_editor_debugger.h"
#include "editor/editor_file_dialog.h"
@@ -356,6 +357,7 @@ void ScriptEditorQuickOpen::_notification(int p_what) {
case NOTIFICATION_VISIBILITY_CHANGED: {
search_box->set_right_icon(search_options->get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
} break;
+
case NOTIFICATION_EXIT_TREE: {
disconnect("confirmed", callable_mp(this, &ScriptEditorQuickOpen::_confirmed));
} break;
@@ -760,7 +762,7 @@ void ScriptEditor::_close_tab(int p_idx, bool p_save, bool p_history_back) {
if (p_save && file.is_valid()) {
// Do not try to save internal scripts, but prompt to save in-memory
// scripts which are not saved to disk yet (have empty path).
- if (file->is_built_in()) {
+ if (!file->is_built_in()) {
save_current_script();
}
}
@@ -1280,7 +1282,7 @@ void ScriptEditor::_menu_option(int p_option) {
help_search_dialog->popup_dialog();
} break;
case SEARCH_WEBSITE: {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/");
+ OS::get_singleton()->shell_open(VERSION_DOCS_URL "/");
} break;
case WINDOW_NEXT: {
_history_forward();
@@ -1667,9 +1669,6 @@ void ScriptEditor::_notification(int p_what) {
}
} break;
-
- default:
- break;
}
}
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 4a47766fc0..b87f2995ed 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -1343,8 +1343,6 @@ void ScriptTextEditor::_notification(int p_what) {
case NOTIFICATION_ENTER_TREE: {
code_editor->get_text_editor()->set_gutter_width(connection_gutter, code_editor->get_text_editor()->get_line_height());
} break;
- default:
- break;
}
}
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 25906f33de..cea1a0e808 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -464,14 +464,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;
- Ref<Shader> shader = ste->get_edited_shader();
- get_scene()->get_root_node()->call("_resource_selected",shader);
- }*/
}
void ShaderEditor::goto_line_selection(int p_line, int p_begin, int p_end) {
diff --git a/editor/plugins/shader_file_editor_plugin.cpp b/editor/plugins/shader_file_editor_plugin.cpp
index 6d761729b0..4458555de2 100644
--- a/editor/plugins/shader_file_editor_plugin.cpp
+++ b/editor/plugins/shader_file_editor_plugin.cpp
@@ -200,10 +200,12 @@ void ShaderFileEditor::_update_options() {
}
void ShaderFileEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_WM_WINDOW_FOCUS_IN) {
- if (is_visible_in_tree() && shader_file.is_valid()) {
- _update_options();
- }
+ switch (p_what) {
+ case NOTIFICATION_WM_WINDOW_FOCUS_IN: {
+ if (is_visible_in_tree() && shader_file.is_valid()) {
+ _update_options();
+ }
+ } break;
}
}
diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp
index 761a0cdfbd..282ee9a5b7 100644
--- a/editor/plugins/skeleton_3d_editor_plugin.cpp
+++ b/editor/plugins/skeleton_3d_editor_plugin.cpp
@@ -103,8 +103,7 @@ void BoneTransformEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
create_editors();
- break;
- }
+ } break;
}
}
diff --git a/editor/plugins/text_control_editor_plugin.cpp b/editor/plugins/text_control_editor_plugin.cpp
index ab3d6dcca9..4290888e94 100644
--- a/editor/plugins/text_control_editor_plugin.cpp
+++ b/editor/plugins/text_control_editor_plugin.cpp
@@ -34,8 +34,8 @@
#include "editor/editor_scale.h"
#include "editor/multi_node_edit.h"
-void TextControlEditor::_notification(int p_notification) {
- switch (p_notification) {
+void TextControlEditor::_notification(int p_what) {
+ switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
if (!EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts))) {
EditorFileSystem::get_singleton()->connect("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts), make_binds(""));
@@ -45,13 +45,12 @@ void TextControlEditor::_notification(int p_notification) {
case NOTIFICATION_THEME_CHANGED: {
clear_formatting->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
} break;
+
case NOTIFICATION_EXIT_TREE: {
if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts))) {
EditorFileSystem::get_singleton()->disconnect("filesystem_changed", callable_mp(this, &TextControlEditor::_reload_fonts));
}
} break;
- default:
- break;
}
}
diff --git a/editor/plugins/text_control_editor_plugin.h b/editor/plugins/text_control_editor_plugin.h
index 1d65073c98..1349003a9c 100644
--- a/editor/plugins/text_control_editor_plugin.h
+++ b/editor/plugins/text_control_editor_plugin.h
@@ -66,7 +66,7 @@ class TextControlEditor : public HBoxContainer {
Ref<Font> custom_font;
protected:
- void _notification(int p_notification);
+ void _notification(int p_what);
static void _bind_methods();
void _find_resources(EditorFileSystemDirectory *p_dir);
diff --git a/editor/plugins/texture_3d_editor_plugin.cpp b/editor/plugins/texture_3d_editor_plugin.cpp
index 880cbeffba..0fc7079a24 100644
--- a/editor/plugins/texture_3d_editor_plugin.cpp
+++ b/editor/plugins/texture_3d_editor_plugin.cpp
@@ -35,18 +35,17 @@ void Texture3DEditor::_texture_rect_draw() {
}
void Texture3DEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- //get_scene()->connect("node_removed",this,"_node_removed");
- }
- if (p_what == NOTIFICATION_RESIZED) {
- _texture_rect_update_area();
- }
+ switch (p_what) {
+ case NOTIFICATION_RESIZED: {
+ _texture_rect_update_area();
+ } break;
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
- Size2 size = get_size();
+ case NOTIFICATION_DRAW: {
+ Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
+ Size2 size = get_size();
- draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ } break;
}
}
diff --git a/editor/plugins/texture_layered_editor_plugin.cpp b/editor/plugins/texture_layered_editor_plugin.cpp
index 22f4cebf2e..cb146fd342 100644
--- a/editor/plugins/texture_layered_editor_plugin.cpp
+++ b/editor/plugins/texture_layered_editor_plugin.cpp
@@ -46,18 +46,17 @@ void TextureLayeredEditor::_texture_rect_draw() {
}
void TextureLayeredEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- //get_scene()->connect("node_removed",this,"_node_removed");
- }
- if (p_what == NOTIFICATION_RESIZED) {
- _texture_rect_update_area();
- }
+ switch (p_what) {
+ case NOTIFICATION_RESIZED: {
+ _texture_rect_update_area();
+ } break;
- if (p_what == NOTIFICATION_DRAW) {
- Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
- Size2 size = get_size();
+ case NOTIFICATION_DRAW: {
+ Ref<Texture2D> checkerboard = get_theme_icon(SNAME("Checkerboard"), SNAME("EditorIcons"));
+ Size2 size = get_size();
- draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ draw_texture_rect(checkerboard, Rect2(Point2(), size), true);
+ } break;
}
}
diff --git a/editor/plugins/theme_editor_preview.cpp b/editor/plugins/theme_editor_preview.cpp
index c3e4e66fd4..252a19a7db 100644
--- a/editor/plugins/theme_editor_preview.cpp
+++ b/editor/plugins/theme_editor_preview.cpp
@@ -203,6 +203,7 @@ void ThemeEditorPreview::_notification(int p_what) {
theme_cache.preview_picker_font = get_theme_font(SNAME("status_source"), SNAME("EditorFonts"));
theme_cache.font_size = get_theme_font_size(SNAME("font_size"), SNAME("EditorFonts"));
} break;
+
case NOTIFICATION_PROCESS: {
time_left -= get_process_delta_time();
if (time_left < 0) {
diff --git a/editor/plugins/tiles/tile_atlas_view.cpp b/editor/plugins/tiles/tile_atlas_view.cpp
index d685c634bd..71947ae185 100644
--- a/editor/plugins/tiles/tile_atlas_view.cpp
+++ b/editor/plugins/tiles/tile_atlas_view.cpp
@@ -524,13 +524,13 @@ void TileAtlasView::update() {
void TileAtlasView::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED:
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
panner->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- break;
+ } break;
- case NOTIFICATION_READY:
+ case NOTIFICATION_READY: {
button_center_view->set_icon(get_theme_icon(SNAME("CenterView"), SNAME("EditorIcons")));
- break;
+ } break;
}
}
diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp
index a4d2dfc9d9..6c12573cc4 100644
--- a/editor/plugins/tiles/tile_data_editors.cpp
+++ b/editor/plugins/tiles/tile_data_editors.cpp
@@ -1160,13 +1160,11 @@ void TileDataDefaultEditor::setup_property_editor(Variant::Type p_type, String p
void TileDataDefaultEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
picker_button->set_icon(get_theme_icon(SNAME("ColorPick"), SNAME("EditorIcons")));
tile_bool_checked = get_theme_icon(SNAME("TileChecked"), SNAME("EditorIcons"));
tile_bool_unchecked = get_theme_icon(SNAME("TileUnchecked"), SNAME("EditorIcons"));
- break;
- default:
- break;
+ } break;
}
}
@@ -1315,11 +1313,9 @@ void TileDataOcclusionShapeEditor::_tile_set_changed() {
void TileDataOcclusionShapeEditor::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_ENTER_TREE: {
polygon_editor->set_polygons_color(get_tree()->get_debug_collisions_color());
- break;
- default:
- break;
+ } break;
}
}
@@ -1514,11 +1510,9 @@ void TileDataCollisionEditor::_tile_set_changed() {
void TileDataCollisionEditor::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_ENTER_TREE: {
polygon_editor->set_polygons_color(get_tree()->get_debug_collisions_color());
- break;
- default:
- break;
+ } break;
}
}
@@ -2487,11 +2481,9 @@ void TileDataTerrainsEditor::draw_over_tile(CanvasItem *p_canvas_item, Transform
void TileDataTerrainsEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
picker_button->set_icon(get_theme_icon(SNAME("ColorPick"), SNAME("EditorIcons")));
- break;
- default:
- break;
+ } break;
}
}
@@ -2593,11 +2585,9 @@ void TileDataNavigationEditor::_tile_set_changed() {
void TileDataNavigationEditor::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_ENTER_TREE: {
polygon_editor->set_polygons_color(get_tree()->get_debug_navigation_color());
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp
index 5e316bc7f0..4a0fc0b29f 100644
--- a/editor/plugins/tiles/tile_map_editor.cpp
+++ b/editor/plugins/tiles/tile_map_editor.cpp
@@ -1328,15 +1328,35 @@ void TileMapEditorTilesPlugin::_stop_dragging() {
Rect2i rect = Rect2i(tile_map->world_to_map(drag_start_mouse_pos), tile_map->world_to_map(mpos) - tile_map->world_to_map(drag_start_mouse_pos)).abs();
rect.size += Vector2i(1, 1);
+ int picked_source = -1;
TypedArray<Vector2i> coords_array;
for (int x = rect.position.x; x < rect.get_end().x; x++) {
for (int y = rect.position.y; y < rect.get_end().y; y++) {
Vector2i coords = Vector2i(x, y);
- if (tile_map->get_cell_source_id(tile_map_layer, coords) != TileSet::INVALID_SOURCE) {
+
+ int source = tile_map->get_cell_source_id(tile_map_layer, coords);
+ if (source != TileSet::INVALID_SOURCE) {
coords_array.push_back(coords);
+ if (picked_source == -1) {
+ picked_source = source;
+ } else if (picked_source != source) {
+ picked_source = -2;
+ }
+ }
+ }
+ }
+
+ if (picked_source >= 0) {
+ for (int i = 0; i < sources_list->get_item_count(); i++) {
+ if (int(sources_list->get_item_metadata(i)) == picked_source) {
+ sources_list->set_current(i);
+ break;
}
}
+ sources_list->ensure_current_is_visible();
+ TilesEditorPlugin::get_singleton()->set_sources_lists_current(picked_source);
}
+
Ref<TileMapPattern> new_selection_pattern = tile_map->get_pattern(tile_map_layer, coords_array);
if (!new_selection_pattern->is_empty()) {
selection_pattern = new_selection_pattern;
@@ -3359,15 +3379,16 @@ TileMapEditorTerrainsPlugin::~TileMapEditorTerrainsPlugin() {
void TileMapEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
missing_tile_texture = get_theme_icon(SNAME("StatusWarning"), SNAME("EditorIcons"));
warning_pattern_texture = get_theme_icon(SNAME("WarningPattern"), SNAME("EditorIcons"));
advanced_menu_button->set_icon(get_theme_icon(SNAME("Tools"), SNAME("EditorIcons")));
toggle_grid_button->set_icon(get_theme_icon(SNAME("Grid"), SNAME("EditorIcons")));
toggle_grid_button->set_pressed(EditorSettings::get_singleton()->get("editors/tiles_editor/display_grid"));
toogle_highlight_selected_layer_button->set_icon(get_theme_icon(SNAME("TileMapHighlightSelected"), SNAME("EditorIcons")));
- break;
- case NOTIFICATION_INTERNAL_PROCESS:
+ } break;
+
+ case NOTIFICATION_INTERNAL_PROCESS: {
if (is_visible_in_tree() && tileset_changed_needs_update) {
_update_bottom_panel();
_update_layers_selection();
@@ -3375,11 +3396,13 @@ void TileMapEditor::_notification(int p_what) {
CanvasItemEditor::get_singleton()->update_viewport();
tileset_changed_needs_update = false;
}
- break;
- case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED:
+ } break;
+
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
toggle_grid_button->set_pressed(EditorSettings::get_singleton()->get("editors/tiles_editor/display_grid"));
- break;
- case NOTIFICATION_VISIBILITY_CHANGED:
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
TileMap *tile_map = Object::cast_to<TileMap>(ObjectDB::get_instance(tile_map_id));
if (tile_map) {
if (is_visible_in_tree()) {
@@ -3388,7 +3411,7 @@ void TileMapEditor::_notification(int p_what) {
tile_map->set_selected_layer(-1);
}
}
- break;
+ } break;
}
}
@@ -4001,7 +4024,7 @@ TileMapEditor::TileMapEditor() {
// Layer selector.
layers_selection_popup = memnew(PopupMenu);
layers_selection_popup->connect("id_pressed", callable_mp(this, &TileMapEditor::_layers_selection_id_pressed));
- layers_selection_popup->set_close_on_parent_focus(false);
+ layers_selection_popup->set_flag(Window::FLAG_POPUP, false);
layers_selection_button = memnew(Button);
layers_selection_button->set_toggle_mode(true);
diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
index 9a16e3d682..0c78a0f1c0 100644
--- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
@@ -108,7 +108,7 @@ void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_id", "id"), &TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::set_id);
ClassDB::bind_method(D_METHOD("get_id"), &TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::get_id);
- ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "id", PROPERTY_HINT_RANGE, "0," + itos(INT_MAX) + ",1"), "set_id", "get_id");
ADD_SIGNAL(MethodInfo("changed", PropertyInfo(Variant::STRING, "what")));
}
@@ -2270,7 +2270,7 @@ void TileSetAtlasSourceEditor::_auto_remove_tiles() {
void TileSetAtlasSourceEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
tool_setup_atlas_source_button->set_icon(get_theme_icon(SNAME("Tools"), SNAME("EditorIcons")));
tool_select_button->set_icon(get_theme_icon(SNAME("ToolSelect"), SNAME("EditorIcons")));
tool_paint_button->set_icon(get_theme_icon(SNAME("CanvasItem"), SNAME("EditorIcons")));
@@ -2281,8 +2281,9 @@ void TileSetAtlasSourceEditor::_notification(int p_what) {
resize_handle = get_theme_icon(SNAME("EditorHandle"), SNAME("EditorIcons"));
resize_handle_disabled = get_theme_icon(SNAME("EditorHandleDisabled"), SNAME("EditorIcons"));
- break;
- case NOTIFICATION_INTERNAL_PROCESS:
+ } break;
+
+ case NOTIFICATION_INTERNAL_PROCESS: {
if (tile_set_changed_needs_update) {
// Update everything.
_update_source_inspector();
@@ -2298,9 +2299,7 @@ void TileSetAtlasSourceEditor::_notification(int p_what) {
tile_set_changed_needs_update = false;
}
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/plugins/tiles/tile_set_editor.cpp b/editor/plugins/tiles/tile_set_editor.cpp
index 97b342c6a7..49e589c9ef 100644
--- a/editor/plugins/tiles/tile_set_editor.cpp
+++ b/editor/plugins/tiles/tile_set_editor.cpp
@@ -333,14 +333,15 @@ void TileSetEditor::_set_source_sort(int p_sort) {
void TileSetEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
sources_delete_button->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
sources_add_button->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
source_sort_button->set_icon(get_theme_icon(SNAME("Sort"), SNAME("EditorIcons")));
sources_advanced_menu_button->set_icon(get_theme_icon(SNAME("GuiTabMenuHl"), SNAME("EditorIcons")));
missing_texture_texture = get_theme_icon(SNAME("TileSet"), SNAME("EditorIcons"));
- break;
- case NOTIFICATION_INTERNAL_PROCESS:
+ } break;
+
+ case NOTIFICATION_INTERNAL_PROCESS: {
if (tile_set_changed_needs_update) {
if (tile_set.is_valid()) {
tile_set->set_edited(true);
@@ -349,9 +350,7 @@ void TileSetEditor::_notification(int p_what) {
_update_patterns_list();
tile_set_changed_needs_update = false;
}
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
index acb6ffc77b..21ebcbd655 100644
--- a/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_scenes_collection_source_editor.cpp
@@ -330,12 +330,13 @@ void TileSetScenesCollectionSourceEditor::_update_scenes_list() {
void TileSetScenesCollectionSourceEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
- case NOTIFICATION_THEME_CHANGED:
+ case NOTIFICATION_THEME_CHANGED: {
scene_tile_add_button->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
scene_tile_delete_button->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
_update_scenes_list();
- break;
- case NOTIFICATION_INTERNAL_PROCESS:
+ } break;
+
+ case NOTIFICATION_INTERNAL_PROCESS: {
if (tile_set_scenes_collection_source_changed_needs_update) {
// Update everything.
_update_source_inspector();
@@ -344,14 +345,13 @@ void TileSetScenesCollectionSourceEditor::_notification(int p_what) {
_update_tile_inspector();
tile_set_scenes_collection_source_changed_needs_update = false;
}
- break;
- case NOTIFICATION_VISIBILITY_CHANGED:
+ } break;
+
+ case NOTIFICATION_VISIBILITY_CHANGED: {
// Update things just in case.
_update_scenes_list();
_update_action_buttons();
- break;
- default:
- break;
+ } break;
}
}
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index 5d43813572..a821faf6b3 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -3373,91 +3373,98 @@ void VisualShaderEditor::_sbox_input(const Ref<InputEvent> &p_ie) {
}
void VisualShaderEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- node_filter->set_clear_button_enabled(true);
-
- // collapse tree by default
-
- TreeItem *category = members->get_root()->get_first_child();
- while (category) {
- category->set_collapsed(true);
- TreeItem *sub_category = category->get_first_child();
- while (sub_category) {
- sub_category->set_collapsed(true);
- sub_category = sub_category->get_next();
- }
- category = category->get_next();
- }
- }
+ switch (p_what) {
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ graph->set_warped_panning(bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning")));
+ } break;
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
- graph->set_warped_panning(bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning")));
- }
+ case NOTIFICATION_ENTER_TREE: {
+ node_filter->set_clear_button_enabled(true);
- if (p_what == NOTIFICATION_DRAG_BEGIN) {
- Dictionary dd = get_viewport()->gui_get_drag_data();
- if (members->is_visible_in_tree() && dd.has("id")) {
- members->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM);
- }
- } else if (p_what == NOTIFICATION_DRAG_END) {
- members->set_drop_mode_flags(0);
- }
+ // collapse tree by default
+
+ TreeItem *category = members->get_root()->get_first_child();
+ while (category) {
+ category->set_collapsed(true);
+ TreeItem *sub_category = category->get_first_child();
+ while (sub_category) {
+ sub_category->set_collapsed(true);
+ sub_category = sub_category->get_next();
+ }
+ category = category->get_next();
+ }
- if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
- highend_label->set_modulate(get_theme_color(SNAME("vulkan_color"), SNAME("Editor")));
+ graph->get_panner()->setup((ViewPanner::ControlScheme)EDITOR_GET("editors/panning/sub_editors_panning_scheme").operator int(), ED_GET_SHORTCUT("canvas_item_editor/pan_view"), bool(EditorSettings::get_singleton()->get("editors/panning/simple_panning")));
+ graph->set_warped_panning(bool(EditorSettings::get_singleton()->get("editors/panning/warped_mouse_panning")));
+ [[fallthrough]];
+ }
+ case NOTIFICATION_THEME_CHANGED: {
+ highend_label->set_modulate(get_theme_color(SNAME("vulkan_color"), SNAME("Editor")));
- node_filter->set_right_icon(Control::get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
+ node_filter->set_right_icon(Control::get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
- preview_shader->set_icon(Control::get_theme_icon(SNAME("Shader"), SNAME("EditorIcons")));
+ preview_shader->set_icon(Control::get_theme_icon(SNAME("Shader"), SNAME("EditorIcons")));
- {
- Color background_color = EDITOR_GET("text_editor/theme/highlighting/background_color");
- Color text_color = EDITOR_GET("text_editor/theme/highlighting/text_color");
- Color keyword_color = EDITOR_GET("text_editor/theme/highlighting/keyword_color");
- Color control_flow_keyword_color = EDITOR_GET("text_editor/theme/highlighting/control_flow_keyword_color");
- Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
- Color symbol_color = EDITOR_GET("text_editor/theme/highlighting/symbol_color");
- Color function_color = EDITOR_GET("text_editor/theme/highlighting/function_color");
- Color number_color = EDITOR_GET("text_editor/theme/highlighting/number_color");
- Color members_color = EDITOR_GET("text_editor/theme/highlighting/member_variable_color");
+ {
+ Color background_color = EDITOR_GET("text_editor/theme/highlighting/background_color");
+ Color text_color = EDITOR_GET("text_editor/theme/highlighting/text_color");
+ Color keyword_color = EDITOR_GET("text_editor/theme/highlighting/keyword_color");
+ Color control_flow_keyword_color = EDITOR_GET("text_editor/theme/highlighting/control_flow_keyword_color");
+ Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
+ Color symbol_color = EDITOR_GET("text_editor/theme/highlighting/symbol_color");
+ Color function_color = EDITOR_GET("text_editor/theme/highlighting/function_color");
+ Color number_color = EDITOR_GET("text_editor/theme/highlighting/number_color");
+ Color members_color = EDITOR_GET("text_editor/theme/highlighting/member_variable_color");
- preview_text->add_theme_color_override("background_color", background_color);
+ preview_text->add_theme_color_override("background_color", background_color);
- for (const String &E : keyword_list) {
- if (ShaderLanguage::is_control_flow_keyword(E)) {
- syntax_highlighter->add_keyword_color(E, control_flow_keyword_color);
- } else {
- syntax_highlighter->add_keyword_color(E, keyword_color);
+ for (const String &E : keyword_list) {
+ if (ShaderLanguage::is_control_flow_keyword(E)) {
+ syntax_highlighter->add_keyword_color(E, control_flow_keyword_color);
+ } else {
+ syntax_highlighter->add_keyword_color(E, keyword_color);
+ }
}
- }
- preview_text->add_theme_font_override("font", get_theme_font(SNAME("expression"), SNAME("EditorFonts")));
- preview_text->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("expression_size"), SNAME("EditorFonts")));
- preview_text->add_theme_color_override("font_color", text_color);
- syntax_highlighter->set_number_color(number_color);
- syntax_highlighter->set_symbol_color(symbol_color);
- syntax_highlighter->set_function_color(function_color);
- syntax_highlighter->set_member_variable_color(members_color);
- syntax_highlighter->clear_color_regions();
- syntax_highlighter->add_color_region("/*", "*/", comment_color, false);
- syntax_highlighter->add_color_region("//", "", comment_color, true);
+ preview_text->add_theme_font_override("font", get_theme_font(SNAME("expression"), SNAME("EditorFonts")));
+ preview_text->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("expression_size"), SNAME("EditorFonts")));
+ preview_text->add_theme_color_override("font_color", text_color);
+ syntax_highlighter->set_number_color(number_color);
+ syntax_highlighter->set_symbol_color(symbol_color);
+ syntax_highlighter->set_function_color(function_color);
+ syntax_highlighter->set_member_variable_color(members_color);
+ syntax_highlighter->clear_color_regions();
+ syntax_highlighter->add_color_region("/*", "*/", comment_color, false);
+ syntax_highlighter->add_color_region("//", "", comment_color, true);
+
+ preview_text->clear_comment_delimiters();
+ preview_text->add_comment_delimiter("/*", "*/", false);
+ preview_text->add_comment_delimiter("//", "", true);
+
+ error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
+ error_label->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
+ error_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
+ error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ }
- preview_text->clear_comment_delimiters();
- preview_text->add_comment_delimiter("/*", "*/", false);
- preview_text->add_comment_delimiter("//", "", true);
+ tools->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Tools"), SNAME("EditorIcons")));
- error_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("panel"), SNAME("Panel")));
- error_label->add_theme_font_override("font", get_theme_font(SNAME("status_source"), SNAME("EditorFonts")));
- error_label->add_theme_font_size_override("font_size", get_theme_font_size(SNAME("status_source_size"), SNAME("EditorFonts")));
- error_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
- }
+ if (p_what == NOTIFICATION_THEME_CHANGED && is_visible_in_tree()) {
+ _update_graph();
+ }
+ } break;
- tools->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Tools"), SNAME("EditorIcons")));
+ case NOTIFICATION_DRAG_BEGIN: {
+ Dictionary dd = get_viewport()->gui_get_drag_data();
+ if (members->is_visible_in_tree() && dd.has("id")) {
+ members->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM);
+ }
+ } break;
- if (p_what == NOTIFICATION_THEME_CHANGED && is_visible_in_tree()) {
- _update_graph();
- }
+ case NOTIFICATION_DRAG_END: {
+ members->set_drop_mode_flags(0);
+ } break;
}
}
@@ -4451,8 +4458,8 @@ VisualShaderEditor::VisualShaderEditor() {
add_options.push_back(AddOption("ColorOp", "Color", "Common", "VisualShaderNodeColorOp", TTR("Color operator."), {}, VisualShaderNode::PORT_TYPE_VECTOR_3D));
add_options.push_back(AddOption("Grayscale", "Color", "Functions", "VisualShaderNodeColorFunc", TTR("Grayscale function."), { VisualShaderNodeColorFunc::FUNC_GRAYSCALE }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
- add_options.push_back(AddOption("HSV2RGB", "Color", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts HSV vector to RGB equivalent."), { VisualShaderNodeVectorFunc::FUNC_HSV2RGB }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
- add_options.push_back(AddOption("RGB2HSV", "Color", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts RGB vector to HSV equivalent."), { VisualShaderNodeVectorFunc::FUNC_RGB2HSV }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
+ add_options.push_back(AddOption("HSV2RGB", "Color", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts HSV vector to RGB equivalent."), { VisualShaderNodeVectorFunc::FUNC_HSV2RGB, VisualShaderNodeVectorFunc::OP_TYPE_VECTOR_3D }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
+ add_options.push_back(AddOption("RGB2HSV", "Color", "Functions", "VisualShaderNodeVectorFunc", TTR("Converts RGB vector to HSV equivalent."), { VisualShaderNodeVectorFunc::FUNC_RGB2HSV, VisualShaderNodeVectorFunc::OP_TYPE_VECTOR_3D }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
add_options.push_back(AddOption("Sepia", "Color", "Functions", "VisualShaderNodeColorFunc", TTR("Sepia function."), { VisualShaderNodeColorFunc::FUNC_SEPIA }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
add_options.push_back(AddOption("Burn", "Color", "Operators", "VisualShaderNodeColorOp", TTR("Burn operator."), { VisualShaderNodeColorOp::OP_BURN }, VisualShaderNode::PORT_TYPE_VECTOR_3D));
@@ -5052,8 +5059,10 @@ class VisualShaderNodePluginInputEditor : public OptionButton {
public:
void _notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- connect("item_selected", callable_mp(this, &VisualShaderNodePluginInputEditor::_item_selected));
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ connect("item_selected", callable_mp(this, &VisualShaderNodePluginInputEditor::_item_selected));
+ } break;
}
}
@@ -5100,8 +5109,10 @@ class VisualShaderNodePluginUniformRefEditor : public OptionButton {
public:
void _notification(int p_what) {
- if (p_what == NOTIFICATION_READY) {
- connect("item_selected", callable_mp(this, &VisualShaderNodePluginUniformRefEditor::_item_selected));
+ switch (p_what) {
+ case NOTIFICATION_READY: {
+ connect("item_selected", callable_mp(this, &VisualShaderNodePluginUniformRefEditor::_item_selected));
+ } break;
}
}
@@ -5514,29 +5525,31 @@ Size2 VisualShaderNodePortPreview::get_minimum_size() const {
}
void VisualShaderNodePortPreview::_notification(int p_what) {
- if (p_what == NOTIFICATION_DRAW) {
- Vector<Vector2> points = {
- Vector2(),
- Vector2(get_size().width, 0),
- get_size(),
- Vector2(0, get_size().height)
- };
-
- Vector<Vector2> uvs = {
- Vector2(0, 0),
- Vector2(1, 0),
- Vector2(1, 1),
- Vector2(0, 1)
- };
-
- Vector<Color> colors = {
- Color(1, 1, 1, 1),
- Color(1, 1, 1, 1),
- Color(1, 1, 1, 1),
- Color(1, 1, 1, 1)
- };
-
- draw_primitive(points, colors, uvs);
+ switch (p_what) {
+ case NOTIFICATION_DRAW: {
+ Vector<Vector2> points = {
+ Vector2(),
+ Vector2(get_size().width, 0),
+ get_size(),
+ Vector2(0, get_size().height)
+ };
+
+ Vector<Vector2> uvs = {
+ Vector2(0, 0),
+ Vector2(1, 0),
+ Vector2(1, 1),
+ Vector2(0, 1)
+ };
+
+ Vector<Color> colors = {
+ Color(1, 1, 1, 1),
+ Color(1, 1, 1, 1),
+ Color(1, 1, 1, 1),
+ Color(1, 1, 1, 1)
+ };
+
+ draw_primitive(points, colors, uvs);
+ } break;
}
}
diff --git a/editor/plugins/voxel_gi_editor_plugin.cpp b/editor/plugins/voxel_gi_editor_plugin.cpp
index 9ecdb56e50..6fc6c1ad39 100644
--- a/editor/plugins/voxel_gi_editor_plugin.cpp
+++ b/editor/plugins/voxel_gi_editor_plugin.cpp
@@ -65,41 +65,43 @@ bool VoxelGIEditorPlugin::handles(Object *p_object) const {
}
void VoxelGIEditorPlugin::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- if (!voxel_gi) {
- return;
- }
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ if (!voxel_gi) {
+ return;
+ }
- // Set information tooltip on the Bake button. This information is useful
- // to optimize performance (video RAM size) and reduce light leaking (individual cell size).
+ // Set information tooltip on the Bake button. This information is useful
+ // to optimize performance (video RAM size) and reduce light leaking (individual cell size).
- const Vector3i size = voxel_gi->get_estimated_cell_size();
+ const Vector3i size = voxel_gi->get_estimated_cell_size();
- const Vector3 extents = voxel_gi->get_extents();
+ const Vector3 extents = voxel_gi->get_extents();
- const int data_size = 4;
- const double size_mb = size.x * size.y * size.z * data_size / (1024.0 * 1024.0);
- // Add a qualitative measurement to help the user assess whether a VoxelGI node is using a lot of VRAM.
- String size_quality;
- if (size_mb < 16.0) {
- size_quality = TTR("Low");
- } else if (size_mb < 64.0) {
- size_quality = TTR("Moderate");
- } else {
- size_quality = TTR("High");
- }
+ const int data_size = 4;
+ const double size_mb = size.x * size.y * size.z * data_size / (1024.0 * 1024.0);
+ // Add a qualitative measurement to help the user assess whether a VoxelGI node is using a lot of VRAM.
+ String size_quality;
+ if (size_mb < 16.0) {
+ size_quality = TTR("Low");
+ } else if (size_mb < 64.0) {
+ size_quality = TTR("Moderate");
+ } else {
+ size_quality = TTR("High");
+ }
- String text;
- text += vformat(TTR("Subdivisions: %s"), vformat(String::utf8("%d × %d × %d"), size.x, size.y, size.z)) + "\n";
- text += vformat(TTR("Cell size: %s"), vformat(String::utf8("%.3f × %.3f × %.3f"), extents.x / size.x, extents.y / size.y, extents.z / size.z)) + "\n";
- text += vformat(TTR("Video RAM size: %s MB (%s)"), String::num(size_mb, 2), size_quality);
+ String text;
+ text += vformat(TTR("Subdivisions: %s"), vformat(String::utf8("%d × %d × %d"), size.x, size.y, size.z)) + "\n";
+ text += vformat(TTR("Cell size: %s"), vformat(String::utf8("%.3f × %.3f × %.3f"), extents.x / size.x, extents.y / size.y, extents.z / size.z)) + "\n";
+ text += vformat(TTR("Video RAM size: %s MB (%s)"), String::num(size_mb, 2), size_quality);
- // Only update the tooltip when needed to avoid constant redrawing.
- if (bake->get_tooltip(Point2()) == text) {
- return;
- }
+ // Only update the tooltip when needed to avoid constant redrawing.
+ if (bake->get_tooltip(Point2()) == text) {
+ return;
+ }
- bake->set_tooltip(text);
+ bake->set_tooltip(text);
+ } break;
}
}
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index 21163531d8..55a4dc2c67 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -61,6 +61,7 @@ void ProjectExportDialog::_notification(int p_what) {
EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "export", Rect2(get_position(), get_size()));
}
} break;
+
case NOTIFICATION_READY: {
duplicate_preset->set_icon(presets->get_theme_icon(SNAME("Duplicate"), SNAME("EditorIcons")));
delete_preset->set_icon(presets->get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 2a9f699ee6..87d008d144 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -647,8 +647,10 @@ private:
}
void _notification(int p_what) {
- if (p_what == NOTIFICATION_WM_CLOSE_REQUEST) {
- _remove_created_folder();
+ switch (p_what) {
+ case NOTIFICATION_WM_CLOSE_REQUEST: {
+ _remove_created_folder();
+ } break;
}
}
@@ -978,10 +980,12 @@ public:
hover = true;
update();
} break;
+
case NOTIFICATION_MOUSE_EXIT: {
hover = false;
update();
} break;
+
case NOTIFICATION_DRAW: {
if (hover) {
draw_style_box(get_theme_stylebox(SNAME("hover"), SNAME("Tree")), Rect2(Point2(), get_size()));
@@ -1143,18 +1147,20 @@ void ProjectList::update_icons_async() {
}
void ProjectList::_notification(int p_what) {
- if (p_what == NOTIFICATION_PROCESS) {
- // Load icons as a coroutine to speed up launch when you have hundreds of projects
- if (_icon_load_index < _projects.size()) {
- Item &item = _projects.write[_icon_load_index];
- if (item.control->icon_needs_reload) {
- load_project_icon(_icon_load_index);
- }
- _icon_load_index++;
+ switch (p_what) {
+ case NOTIFICATION_PROCESS: {
+ // Load icons as a coroutine to speed up launch when you have hundreds of projects
+ if (_icon_load_index < _projects.size()) {
+ Item &item = _projects.write[_icon_load_index];
+ if (item.control->icon_needs_reload) {
+ load_project_icon(_icon_load_index);
+ }
+ _icon_load_index++;
- } else {
- set_process(false);
- }
+ } else {
+ set_process(false);
+ }
+ } break;
}
}
@@ -1872,17 +1878,20 @@ void ProjectManager::_notification(int p_what) {
settings_hb->set_anchors_and_offsets_preset(Control::PRESET_TOP_RIGHT);
update();
} break;
+
case NOTIFICATION_ENTER_TREE: {
search_box->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
search_box->set_clear_button_enabled(true);
Engine::get_singleton()->set_editor_hint(false);
} break;
+
case NOTIFICATION_RESIZED: {
if (open_templates->is_visible()) {
open_templates->popup_centered();
}
} break;
+
case NOTIFICATION_READY: {
int default_sorting = (int)EditorSettings::get_singleton()->get("project_manager/sorting_order");
filter_option->select(default_sorting);
@@ -1898,12 +1907,15 @@ void ProjectManager::_notification(int p_what) {
search_box->grab_focus();
}
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
set_process_unhandled_key_input(is_visible_in_tree());
} break;
+
case NOTIFICATION_WM_CLOSE_REQUEST: {
_dim_window();
} break;
+
case NOTIFICATION_WM_ABOUT: {
_show_about();
} break;
diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp
index c0ff1d72ee..03179733d5 100644
--- a/editor/project_settings_editor.cpp
+++ b/editor/project_settings_editor.cpp
@@ -531,11 +531,13 @@ void ProjectSettingsEditor::_notification(int p_what) {
EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", Rect2(get_position(), get_size()));
}
} break;
+
case NOTIFICATION_ENTER_TREE: {
general_settings_inspector->edit(ps);
_update_action_map_editor();
_update_theme();
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
} break;
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index 40f7b86ffc..cd65ee7ae6 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -94,8 +94,10 @@ Ref<Resource> EditorResourceConversionPlugin::convert(const Ref<Resource> &p_res
}
void CustomPropertyEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_WM_CLOSE_REQUEST) {
- hide();
+ switch (p_what) {
+ case NOTIFICATION_WM_CLOSE_REQUEST: {
+ hide();
+ } break;
}
}
diff --git a/editor/property_selector.cpp b/editor/property_selector.cpp
index 825802d852..453ecb6b24 100644
--- a/editor/property_selector.cpp
+++ b/editor/property_selector.cpp
@@ -421,10 +421,14 @@ void PropertySelector::_hide_requested() {
}
void PropertySelector::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- connect("confirmed", callable_mp(this, &PropertySelector::_confirmed));
- } else if (p_what == NOTIFICATION_EXIT_TREE) {
- disconnect("confirmed", callable_mp(this, &PropertySelector::_confirmed));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ connect("confirmed", callable_mp(this, &PropertySelector::_confirmed));
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
+ disconnect("confirmed", callable_mp(this, &PropertySelector::_confirmed));
+ } break;
}
}
diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp
index 2a8ca67fe6..4e64aba1db 100644
--- a/editor/quick_open.cpp
+++ b/editor/quick_open.cpp
@@ -229,6 +229,7 @@ void EditorQuickOpen::_notification(int p_what) {
search_box->set_clear_button_enabled(true);
} break;
+
case NOTIFICATION_EXIT_TREE: {
disconnect("confirmed", callable_mp(this, &EditorQuickOpen::_confirmed));
} break;
diff --git a/editor/reparent_dialog.cpp b/editor/reparent_dialog.cpp
index 1a83a61534..8879085d86 100644
--- a/editor/reparent_dialog.cpp
+++ b/editor/reparent_dialog.cpp
@@ -35,12 +35,14 @@
#include "scene/gui/label.h"
void ReparentDialog::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- connect("confirmed", callable_mp(this, &ReparentDialog::_reparent));
- }
-
- if (p_what == NOTIFICATION_EXIT_TREE) {
- disconnect("confirmed", callable_mp(this, &ReparentDialog::_reparent));
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ connect("confirmed", callable_mp(this, &ReparentDialog::_reparent));
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
+ disconnect("confirmed", callable_mp(this, &ReparentDialog::_reparent));
+ } break;
}
}
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index db78546fd3..628e7880a1 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -1270,6 +1270,7 @@ void SceneTreeDock::_notification(int p_what) {
case NOTIFICATION_EXIT_TREE: {
clear_inherit_confirm->disconnect("confirmed", callable_mp(this, &SceneTreeDock::_tool_selected));
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
scene_tree->set_auto_expand_selected(EditorSettings::get_singleton()->get("docks/scene_tree/auto_expand_to_selected"), false);
button_add->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
@@ -1286,6 +1287,7 @@ void SceneTreeDock::_notification(int p_what) {
filter->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
filter->set_clear_button_enabled(true);
} break;
+
case NOTIFICATION_PROCESS: {
bool show_create_root = bool(EDITOR_GET("interface/editors/show_scene_tree_root_selection")) && get_tree()->get_edited_scene_root() == nullptr;
@@ -1298,7 +1300,6 @@ void SceneTreeDock::_notification(int p_what) {
scene_tree->show();
}
}
-
} break;
}
}
diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp
index c10dd2e2de..ba65828ac1 100644
--- a/editor/scene_tree_editor.cpp
+++ b/editor/scene_tree_editor.cpp
@@ -700,6 +700,7 @@ void SceneTreeEditor::_notification(int p_what) {
_update_tree();
} break;
+
case NOTIFICATION_EXIT_TREE: {
get_tree()->disconnect("tree_changed", callable_mp(this, &SceneTreeEditor::_tree_changed));
get_tree()->disconnect("tree_process_mode_changed", callable_mp(this, &SceneTreeEditor::_tree_process_mode_changed));
@@ -708,6 +709,7 @@ void SceneTreeEditor::_notification(int p_what) {
tree->disconnect("item_collapsed", callable_mp(this, &SceneTreeEditor::_cell_collapsed));
get_tree()->disconnect("node_configuration_warning_changed", callable_mp(this, &SceneTreeEditor::_warning_changed));
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_tree();
} break;
@@ -1283,13 +1285,16 @@ void SceneTreeDialog::_notification(int p_what) {
tree->update_tree();
}
} break;
+
case NOTIFICATION_ENTER_TREE: {
connect("confirmed", callable_mp(this, &SceneTreeDialog::_select));
_update_theme();
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
} break;
+
case NOTIFICATION_EXIT_TREE: {
disconnect("confirmed", callable_mp(this, &SceneTreeDialog::_select));
} break;
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp
index c60c253a65..bf43e11cdb 100644
--- a/editor/script_create_dialog.cpp
+++ b/editor/script_create_dialog.cpp
@@ -37,9 +37,73 @@
#include "editor/create_dialog.h"
#include "editor/editor_file_dialog.h"
#include "editor/editor_file_system.h"
+#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
+static String _get_parent_class_of_script(String p_path) {
+ if (!ResourceLoader::exists(p_path, "Script")) {
+ return "Object"; // A script eventually inherits from Object.
+ }
+
+ Ref<Script> script = ResourceLoader::load(p_path, "Script");
+ ERR_FAIL_COND_V(script.is_null(), "Object");
+
+ String class_name;
+ Ref<Script> base = script->get_base_script();
+
+ // Inherits from a built-in class.
+ if (base.is_null()) {
+ script->get_language()->get_global_class_name(script->get_path(), &class_name);
+ return class_name;
+ }
+
+ // Inherits from a script that has class_name.
+ class_name = script->get_language()->get_global_class_name(base->get_path());
+ if (!class_name.is_empty()) {
+ return class_name;
+ }
+
+ // Inherits from a plain script.
+ return _get_parent_class_of_script(base->get_path());
+}
+
+static Vector<String> _get_hierarchy(String p_class_name) {
+ Vector<String> hierarchy;
+
+ String class_name = p_class_name;
+ while (true) {
+ // A registered class.
+ if (ClassDB::class_exists(class_name)) {
+ hierarchy.push_back(class_name);
+
+ class_name = ClassDB::get_parent_class(class_name);
+ continue;
+ }
+
+ // A class defined in script with class_name.
+ if (ScriptServer::is_global_class(class_name)) {
+ hierarchy.push_back(class_name);
+
+ Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(class_name);
+ ERR_BREAK(script.is_null());
+ class_name = _get_parent_class_of_script(script->get_path());
+ continue;
+ }
+
+ break;
+ }
+
+ if (hierarchy.is_empty()) {
+ if (p_class_name.is_valid_identifier()) {
+ hierarchy.push_back(p_class_name);
+ }
+ hierarchy.push_back("Object");
+ }
+
+ return hierarchy;
+}
+
void ScriptCreateDialog::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE:
@@ -353,18 +417,6 @@ void ScriptCreateDialog::_load_exist() {
hide();
}
-Vector<String> ScriptCreateDialog::get_hierarchy(String p_object) const {
- Vector<String> hierarchy;
- hierarchy.append(p_object);
-
- String parent_class = ClassDB::get_parent_class(p_object);
- while (parent_class.is_valid_identifier()) {
- hierarchy.append(parent_class);
- parent_class = ClassDB::get_parent_class(parent_class);
- }
- return hierarchy;
-}
-
void ScriptCreateDialog::_language_changed(int l) {
language = ScriptServer::get_language(l);
@@ -553,14 +605,14 @@ void ScriptCreateDialog::_update_template_menu() {
}
String inherits_base_type = parent_name->get_text();
- // If it inherits from a script, select Object instead.
+ // If it inherits from a script, get its parent class first.
if (inherits_base_type[0] == '"') {
- inherits_base_type = "Object";
+ inherits_base_type = _get_parent_class_of_script(inherits_base_type.unquote());
}
// Get all ancestor node for selected base node.
// There templates will also fit the base node.
- Vector<String> hierarchy = get_hierarchy(inherits_base_type);
+ Vector<String> hierarchy = _get_hierarchy(inherits_base_type);
int last_used_template = -1;
int preselected_template = -1;
int previous_ancestor_level = -1;
@@ -1038,6 +1090,7 @@ ScriptCreateDialog::ScriptCreateDialog() {
internal_name = memnew(LineEdit);
internal_name->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ internal_name->connect("text_submitted", callable_mp(this, &ScriptCreateDialog::_path_submitted));
label = memnew(Label(TTR("Name:")));
gc->add_child(label);
gc->add_child(internal_name);
diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h
index aea9649abc..5c0f51812f 100644
--- a/editor/script_create_dialog.h
+++ b/editor/script_create_dialog.h
@@ -115,7 +115,6 @@ class ScriptCreateDialog : public ConfirmationDialog {
virtual void ok_pressed() override;
void _create_new();
void _load_exist();
- Vector<String> get_hierarchy(String p_object) const;
void _msg_script_valid(bool valid, const String &p_msg = String());
void _msg_path_valid(bool valid, const String &p_msg = String());
void _update_template_menu();
diff --git a/editor/shader_create_dialog.cpp b/editor/shader_create_dialog.cpp
index 3c807548ab..dbc78e846c 100644
--- a/editor/shader_create_dialog.cpp
+++ b/editor/shader_create_dialog.cpp
@@ -57,6 +57,7 @@ void ShaderCreateDialog::_notification(int p_what) {
current_mode = EditorSettings::get_singleton()->get_project_metadata("shader_setup", "last_selected_mode", 0);
mode_menu->select(current_mode);
} break;
+
case NOTIFICATION_THEME_CHANGED: {
_update_theme();
} break;
diff --git a/editor/shader_globals_editor.cpp b/editor/shader_globals_editor.cpp
index 034f6d4857..70a43d24ba 100644
--- a/editor/shader_globals_editor.cpp
+++ b/editor/shader_globals_editor.cpp
@@ -438,13 +438,16 @@ void ShaderGlobalsEditor::_bind_methods() {
}
void ShaderGlobalsEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (is_visible_in_tree()) {
- inspector->edit(interface);
- }
- }
- if (p_what == NOTIFICATION_PREDELETE) {
- inspector->edit(nullptr);
+ switch (p_what) {
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (is_visible_in_tree()) {
+ inspector->edit(interface);
+ }
+ } break;
+
+ case NOTIFICATION_PREDELETE: {
+ inspector->edit(nullptr);
+ } break;
}
}
diff --git a/editor/translations/af.po b/editor/translations/af.po
index f139124259..ad1b7ef436 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -521,8 +521,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1420,7 +1420,7 @@ msgid "Bus Options"
msgstr "Bus opsies"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliseer"
@@ -2243,8 +2243,8 @@ msgstr "Metode Beskrywing:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Daar is tans geen beskrywing vir hierdie metode nie. Help ons asseblief deur "
"[color=$color][url=$url]een by te dra[/url][/color]!"
@@ -3304,8 +3304,14 @@ msgid "Update Continuously"
msgstr "Deurlopend"
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Plaaslike veranderinge word gebêre..."
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Plaaslike veranderinge word gebêre..."
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -4053,6 +4059,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4176,7 +4190,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Dupliseer"
@@ -5024,19 +5038,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12813,6 +12827,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14167,10 +14189,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ongeldige naam."
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14217,17 +14235,195 @@ msgstr "Kon nie vouer skep nie."
msgid "Error starting HTTP server:"
msgstr "Leêr word gebêre:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ongeldige naam."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ongeldige Pad."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Ontkoppel"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Moet 'n geldige uitbreiding gebruik."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Moet 'n geldige uitbreiding gebruik."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nie gevind nie!"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Kon nie vouer skep nie."
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ongeldige naam."
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14238,6 +14434,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14296,6 +14555,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ongeldige Pad."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Moet 'n geldige uitbreiding gebruik."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ongeldige naam."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14646,8 +14926,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14891,7 +15171,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 37c6d1943e..29efa92a54 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -57,13 +57,17 @@
# Hareth Mohammed <harethpy@gmail.com>, 2021.
# Mohammed Mubarak <modymu9@gmail.com>, 2021.
# Spirit <i8bou3@gmail.com>, 2021, 2022.
+# TURKYM7MD <turkytb7700@gmail.com>, 2022.
+# zeyad majed <zmajd62@gmail.com>, 2022.
+# Whales State <whalesstate@gmail.com>, 2022.
+# Mr.k <mineshtine28546271@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: Nabeel20 <nabeelandnizam@gmail.com>\n"
+"PO-Revision-Date: 2022-02-16 08:44+0000\n"
+"Last-Translator: Mr.k <mineshtine28546271@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -72,7 +76,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -285,7 +289,7 @@ msgstr "تكرار الرسوم المتحركة"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr "الإعدادات:المهام:"
+msgstr "الدوال:"
#: editor/animation_track_editor.cpp
msgid "Audio Clips:"
@@ -427,7 +431,7 @@ msgstr "إدخال حركة"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr "العقدة (node) '%s'"
+msgstr "وحدة '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -557,8 +561,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -654,7 +658,7 @@ msgstr "إذهب إلى الخطوة السابقة"
#: editor/animation_track_editor.cpp
msgid "Apply Reset"
-msgstr "طَبق إعادة تعيين"
+msgstr "إعادة تعيين"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -998,7 +1002,7 @@ msgstr "تعديل..."
#: editor/connections_dialog.cpp
msgid "Go to Method"
-msgstr "إذهب إلى الدالة"
+msgstr "اذهب إلى الدالة"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1062,16 +1066,16 @@ msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"المشهد '%s' هو حالياً جاري تعديله.\n"
-"ستسري التغييرات Ùقط عند إعادة التحميل."
+"يتم حاليا تحرير المشهد '٪s'.\n"
+"لن تسري التغييرات إلا بعد إعادة تحميلها."
#: editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"المورد '%s' قيد الإستخدام.\n"
-" ستسري التغييرات Ùقط عند إعادة التحميل."
+"المورد '%s' هو قيد الإستخدام.\n"
+"لن تسري التغييرات إلا بعد إعادة التحميل."
#: editor/dependency_editor.cpp
#: modules/gdnative/gdnative_library_editor_plugin.cpp
@@ -1123,9 +1127,9 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ÙØ®ØªØ§Ø±Ø© من المشروع؟ (لا يمكن استعادتها).\n"
-"حسب Ø¥ÙØ¹Ø¯Ø§Ø¯Ø§Øª Ù…ÙØ¯ÙŠØ± Ù…Ù„ÙØ§ØªÙÙƒ, Ø¥Ùما سيتم نقل الملقات Ø¥Ùلى سلة المÙهملات Ø£ÙŽÙˆ سيتم حذÙها "
-"نهائياً."
+"هل تريد Ø­Ø°Ù Ø§Ù„Ù…Ù„ÙØ§Øª المحددة من المشروع؟ (لا يمكن التراجع.)\n"
+"إستنادًا إلى نظام تشغيل جهازك, قد يتم نقل Ø§Ù„Ù…Ù„ÙØ§Øª إلى سلة المهملات أو حذÙها "
+"نهائيًا."
#: editor/dependency_editor.cpp
msgid ""
@@ -1146,7 +1150,7 @@ msgstr "لا يمكن المسح:"
#: editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr "خطآ ÙÙŠ التحميل:"
+msgstr "خطأ ÙÙŠ التحميل:"
#: editor/dependency_editor.cpp
msgid "Load failed due to missing dependencies:"
@@ -1158,7 +1162,7 @@ msgstr "Ø¥ÙØªØ­ علي أية حال"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr "ماذا يجب أن ÙŠÙÙØ¹Ù„ØŸ"
+msgstr "ماذا الأجراء الذي يجب أن ÙŠÙØªØ®Ø°ØŸ"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
@@ -1170,7 +1174,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"
@@ -1210,7 +1214,7 @@ msgstr "شكراً من مجتمع غودوت!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr "انقر للنسخ"
+msgstr "انقر للنسخ."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1333,7 +1337,7 @@ msgstr "ÙØ´Ù„ استخراج Ø§Ù„Ù…Ù„ÙØ§Øª التالية من الحزمة \"
#: editor/editor_asset_installer.cpp
msgid "(and %s more files)"
-msgstr "و %s مل٠أكثر."
+msgstr "(Ùˆ ÙÙŽØ´ÙŽÙ„ÙŽ %s من Ø§Ù„Ù…Ù„ÙØ§Øª)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
@@ -1417,7 +1421,7 @@ msgid "Bus Options"
msgstr "‎خيارات مسار الصوت (BUS)"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "تكرير"
@@ -1529,7 +1533,7 @@ msgstr "اسم غير صالح."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "لا يمكن أن تبدأ برقم."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -1927,9 +1931,8 @@ msgid "Configure Selected Profile:"
msgstr "عدل على الحساب الحالي:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "إعدادات الص٠(Class):"
+msgstr "خيارات إضاÙية:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1960,7 +1963,6 @@ msgid "Select Current Folder"
msgstr "تحديد المجلد الحالي"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
msgstr "المل٠موجود، إستبدال؟"
@@ -2153,7 +2155,7 @@ msgstr "خاصيات"
#: editor/editor_help.cpp
#, fuzzy
msgid "overrides %s:"
-msgstr "يتجاوز:"
+msgstr "يتجاوز s%:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2168,28 +2170,25 @@ msgid "Theme Properties"
msgstr "خصائص الثÙمة"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "اللون"
+msgstr "الألوان"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
msgstr "ثوابت"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "الخط"
+msgstr "الخطوط"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "الأيقونة"
+msgstr "الأيقونات"
#: editor/editor_help.cpp
#, fuzzy
msgid "Styles"
-msgstr "الأسلوب"
+msgstr "الأنماط"
#: editor/editor_help.cpp
msgid "Enumerations"
@@ -2208,8 +2207,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"لا يوجد حاليا وص٠لهذه الخاصية. الرجاء المساعدة من خلال [color=$color][url="
-"$url]المساهمة واحد [/url][/color]!"
+"لا يوجد حاليا وص٠لهذه الخاصية. الرجاء المساعدة من خلال [color=$color]"
+"[url=$url]المساهمة واحد [/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2217,11 +2216,11 @@ msgstr "أوصا٠الدوال"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"لا يوجد حاليا وص٠لهذه الطريقة. الرجاء المساعدة من خلال [color=$color][url="
-"$url]المساهمة واحد[/url][/color] !"
+"لا يوجد حاليا وص٠لهذه الطريقة. الرجاء المساعدة من خلال [color=$color]"
+"[url=$url]المساهمة واحد[/url][/color] !"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2304,11 +2303,11 @@ msgstr "(القيمة)"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
-msgstr ""
+msgstr "تثبيت القيمةيجْبرَهٌ حتي لو كانت تساوي القيمة Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠØ©."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "القيمة المثبتة [معطلة لان '%s' هو/هي ÙÙŠ المحرر-Ùقط]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2323,21 +2322,19 @@ msgstr "تحديد التكرار:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "تم تثبيت %s"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "تم ÙÙƒ التثبيت s%"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "خاصيات"
+msgstr "نسخ ال"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "خاصيات"
+msgstr "لصق ال"
#: editor/editor_inspector.cpp
#, fuzzy
@@ -2515,9 +2512,8 @@ msgid ""
msgstr "لا يمكن Ø­ÙØ¸ المشهد. على الأرجح لا يمكن Ø¥Ø³ØªÙŠÙØ§Ø¡ التبعيات (مجسّدات)."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "لا يمكن بدء عملية جانبية!"
+msgstr "لم يتمكن من Ø­ÙØ¸ واحد أو أكثر من المشاهد!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2714,9 +2710,8 @@ msgid "Nothing to undo."
msgstr "لا شيء للتراجع عنه."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
-msgstr "تراجع"
+msgstr "تراجع: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
@@ -2727,9 +2722,8 @@ msgid "Nothing to redo."
msgstr "لا شيء لإعادة عمله مجدداً."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Redo: %s"
-msgstr "إعادة تراجع"
+msgstr "إعادة: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -2819,9 +2813,9 @@ msgid ""
"error in that script.\n"
"Disabling the addon at '%s' to prevent further errors."
msgstr ""
-"غير قادر علي تحميل النص البرمجي Ù„Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s'. يبدو أنه يوجد خطأ "
+"غير قادر علي تحميل النص البرمجي Ù„Ù„Ø¥Ø¶Ø§ÙØ© من المسار: '%s'. يبدو أنه يوجد خطأ "
"ÙÙŠ ذلك النص البرمجي.\n"
-" تعطيل Ø§Ù„Ø¥Ø¶Ø§ÙØ© ÙÙŠ '%s' كي لا تحصل أخطاء."
+"تعطيل Ø§Ù„Ø¥Ø¶Ø§ÙØ© ÙÙŠ '%s' كي لا تحصل أخطاء."
#: editor/editor_node.cpp
msgid ""
@@ -3333,10 +3327,16 @@ msgid "Update Continuously"
msgstr "تحديث متواصل"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "تحديث عند التغيير"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "تغيرات المادة:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ø¥Ø®ÙØ§Ø¡ دوران التحديث"
@@ -3462,9 +3462,8 @@ msgid "Select"
msgstr "حدد"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "تحديد الحالي"
+msgstr "حدد المشهد الحالي"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3703,9 +3702,8 @@ msgid "Paste"
msgstr "لصق"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
-msgstr "تحويل إلي %s"
+msgstr "حوّلْ إلى %s"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3754,10 +3752,10 @@ msgid "Did you forget the '_run' method?"
msgstr "هل نسيت الطريقة '_run' ؟"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"امسك Ctrl للتدوير للأعداد الصحيحة. اضغط على Shift لإجراء تغييرات أكثر دقة."
+"اضغط باستمرار s% للتقريب إلى اعداد صحيحة.اضغط باستمرار Shift لإجراء تغييرات "
+"أكثر دقة."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3790,9 +3788,8 @@ msgid "Uninstall these templates."
msgstr "إزالة تثبيت هذه القوالب."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "لا يوجد مل٠'%s'."
+msgstr "لا يوجد مرايا Ù…ØªÙˆÙØ±Ø©."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3808,24 +3805,20 @@ msgid "Error requesting URL:"
msgstr "خطأ ÙÙŠ طلب الرابط:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Connecting to the mirror..."
-msgstr "يتصل Ø¨Ø§Ù„Ø³Ø±ÙØ±..."
+msgstr "يتم الاتصال بالمرآة..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "لا يمكن حل أسم Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
+msgstr "لا يمكن حل العنوان المطلوب."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
+msgstr "لا يمكن الإتصال Ø¨Ø§Ù„Ù…ÙØ¶ÙŠÙ."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No response from the mirror."
-msgstr "لا ردّ من Ø§Ù„Ù…ÙØ¶ÙŠÙ:"
+msgstr "لا ردّ من Ø§Ù„Ù…ÙØ¶ÙŠÙ."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3833,14 +3826,12 @@ msgid "Request failed."
msgstr "ÙØ´Ù„ الطلب."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "ÙØ´Ù„ الطلب٫ السبب هو اعادة التحويل مرات اكثر من اللازم"
+msgstr "ÙØ´Ù„ الطلب, السبب هو انتهاء الطلب ÙÙŠ حلقة إعادة توجيه."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "ÙØ´Ù„ الطلب."
+msgstr "ÙÙŽØ´ÙŽÙ„ÙŽ الطلب:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3929,9 +3920,8 @@ msgid "Can't open the export templates file."
msgstr "لم نستطع ÙØªØ­ المل٠المضغوط المÙورد."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "صيغة غير صالحة ل version.txt داخل القالب: %s."
+msgstr "صيغة غير صالحة ل version.txt داخل مل٠القالب: %s."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3952,9 +3942,8 @@ msgid "Importing:"
msgstr "يستورد:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "ازالة نسخة القالب '%s'؟"
+msgstr "ازالة القوالب للنسخة '%s'؟"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -3990,14 +3979,12 @@ msgid "Uninstall"
msgstr "إلغاء التثبيت"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "القيمة المبدئية للعداد"
+msgstr "إلغاء تثبيت القوالب للنسخة الحالية."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "خطأ ÙÙŠ التحميل"
+msgstr "التحميل من:"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -4029,9 +4016,8 @@ msgid "Install from File"
msgstr "تثبيت من ملÙ"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "إستيراد القوالب من مل٠مضغوط بصيغة Zip"
+msgstr "تثبيت القوالب من مل٠محلي."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -4120,6 +4106,14 @@ msgstr "الأسم يحتوي علي أحر٠غير صالحة."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4127,7 +4121,10 @@ msgid ""
"\n"
"Do you wish to overwrite them?"
msgstr ""
-"تتعارض Ø§Ù„Ù…Ù„ÙØ§Øª أو المجلدات التالية مع العناصر الموجودة ÙÙŠ الموقع الهدÙ\n"
+"تتعارض Ø§Ù„Ù…Ù„ÙØ§Øª أو المجلدات التالية مع العناصر الموجودة ÙÙŠ الموقع الهد٠'%s'\n"
+"\n"
+"%s\n"
+"\n"
"هل ترغب ÙÙŠ الكتابة عليها؟"
#: editor/filesystem_dock.cpp
@@ -4233,11 +4230,10 @@ msgid "Sort by Last Modified"
msgstr "آخر ما تم تعديله"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "آخر ما تم تعديله"
+msgstr "رتب من أول ما تم تعديله"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "تكرير..."
@@ -4592,7 +4588,7 @@ msgstr "إجعل الموارد الجانبية مميزة"
#: editor/inspector_dock.cpp
msgid "Create a new resource in memory and edit it."
-msgstr "انشاء مورد جديد ÙÙ‰ الذاكرة Ùˆ تعديله"
+msgstr "انشاء مورد جديد ÙÙ‰ الذاكرة Ùˆ تعديله."
#: editor/inspector_dock.cpp
msgid "Load an existing resource from disk and edit it."
@@ -4640,9 +4636,8 @@ msgid "History of recently edited objects."
msgstr "تاريخ العناصر المعدلة حالياً."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "ÙØªØ­ الوثائق"
+msgstr "Ø¥ÙØªØ­ الوثائق لهذا الكائن."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -4902,9 +4897,8 @@ msgid "Blend:"
msgstr "الدمج:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "لقد تم تغيير المَعلم"
+msgstr "لقد تم تغيير المَعلم:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5050,6 +5044,10 @@ msgid "Rename Animation"
msgstr "إعادة تسمية الرسم المتحرك"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "تكرار الرسم المتحرك"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "دمج التغيير التالي"
@@ -5062,10 +5060,6 @@ msgid "Load Animation"
msgstr "تحميل الرسم المتحرك"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "تكرار الرسم المتحرك"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "لا رسم متحرك لنسخها!"
@@ -6045,14 +6039,12 @@ msgid "Drag: Rotate selected node around pivot."
msgstr "ازالة الكائن المحدد او الإنتقال المحدد."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+سحب: تحريك"
+msgstr "Alt + إسحب: لتحريك الوحدة المحددة."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+سحب: تحريك"
+msgstr "Alt+سحب: لتغيير حجم الوحدة المحددة."
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6061,11 +6053,10 @@ msgstr "ازالة الكائن المحدد او الإنتقال المحدد.
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"أظهر قائمة من كل العناصر ÙÙŠ المنطقة المضغوطة\n"
-"(تماماً مثل Alt+زر Ø§Ù„ÙØ£Ø±Ø© الأيمن ÙÙŠ وضع التحديد)."
+"Alt + زر Ø§Ù„ÙØ£Ø±Ø© الأيمن: أظهر قائمة لكل الوحدات ÙÙŠ المنطقة المضغوطة، متضمنة "
+"المقÙلة منها."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
@@ -6368,51 +6359,45 @@ msgid "Zoom to 12.5%"
msgstr "التكبير حتى 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "تصغير"
+msgstr "التكبير إلى 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "تصغير"
+msgstr "التكبير إلى 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "تصغير"
+msgstr "التكبير إلى 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "تصغير"
+msgstr "التكبير إلى 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "تصغير"
+msgstr "التكبير إلى 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "تصغير"
+msgstr "التكبير إلى 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr "التكبير حتى 1600%"
+msgstr "التكبير إلى 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Add %s"
-msgstr "أض٠%s"
+msgstr "أضÙÙ’ %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
-msgstr "Ø¥Ø¶Ø§ÙØ© %s..."
+msgstr "يتم Ø¥Ø¶Ø§ÙØ© %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Cannot instantiate multiple nodes without root."
-msgstr "لا يمكن إنشاء عقد متعددة بدون العقدة الجذر."
+msgstr "لا يمكن Ø¥Ø¶Ø§ÙØ© وحدات متعددة بدون الوحدةالرئيسية."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -6682,9 +6667,8 @@ msgid "No mesh to debug."
msgstr "لا ميش لتصحيحة."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "النموذج ليس لديه UV ÙÙŠ هذا الطابق"
+msgstr "المجسّم ليس لديه UV ÙÙŠ الطبقة %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -7435,12 +7419,12 @@ msgstr "القلب Ø£Ùقياً"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
msgid "Room Generate Points"
-msgstr "عدد النقاط المولدة:"
+msgstr "عدد النقاط المولدة"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
msgid "Generate Points"
-msgstr "عدد النقاط المولدة:"
+msgstr "عدد النقاط المولدة"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -8065,8 +8049,9 @@ msgstr " [auto]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid " [portals active]"
-msgstr " [portals active]"
+msgstr " [البوابات Ù…ÙØ¹Ù„Ø©]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -8103,7 +8088,7 @@ msgstr "وضع التدوير"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Translate"
-msgstr "الترجمة:"
+msgstr "الترجمة"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale"
@@ -8130,48 +8115,41 @@ msgid "Animation Key Inserted."
msgstr "Ø£ÙØ¯Ø®Ù„ Ù…ÙØªØ§Ø­ الرسوم المتحركة."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "حدّة"
+msgstr "حدّة:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
msgstr "ياو:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "الحجم: "
+msgstr "الحجم:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "كائنات مرسومة"
+msgstr "كائنات مرسومة:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "ØªÙØºÙŠØ±Ø§Øª المادة"
+msgstr "تغيرات المادة:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Shader Changes:"
-msgstr "تغيرات Ø§Ù„Ù…ÙØ¸Ù„Ù„"
+msgstr "تغيرات Ø§Ù„Ù…ÙØ¸Ù„Ù„:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "تغيرات السطح"
+msgstr "تغيرات السطح:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "رسم الاستدعاءات"
+msgstr "استدعاءات الرسم:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "القمم"
+msgstr "القمم:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -8353,8 +8331,8 @@ msgstr ""
"\n"
"العين Ø§Ù„Ù…ÙØªÙˆØ­Ø©: الأداة مرئية.\n"
"العين المغلقة: الأداة مخÙية.\n"
-"العين Ù†ØµÙ Ù…ÙØªÙˆØ­Ø©: الأداة مرئية أيضا من خلال الأسطح المعتمة (\"الأشعة السينية"
-"\")."
+"العين Ù†ØµÙ Ù…ÙØªÙˆØ­Ø©: الأداة مرئية أيضا من خلال الأسطح المعتمة (\"الأشعة "
+"السينية\")."
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8444,11 +8422,11 @@ msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ وضع الرؤية Ø§Ù„Ø­ÙØ±Ø©"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "قلّل مجال الرؤية"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "زدْ مجال الرؤية"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8867,16 +8845,15 @@ msgstr "{num} خط (خطوط)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "No fonts found."
-msgstr "لم يوجد!"
+msgstr "لم يوجد."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
msgstr "{num} أيقونة (أيقونات)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "لم يوجد!"
+msgstr "لم توجد ايقونات."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
@@ -8905,9 +8882,8 @@ msgid "Importing items {n}/{n}"
msgstr "استيراد العناصر {n}/{n}"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "خروج من Ø§Ù„Ù…ÙØ¹Ø¯Ù„ØŸ"
+msgstr "تحديث المحرر"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8924,9 +8900,8 @@ msgid "With Data"
msgstr "مع البيانات"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "اختر عÙقدة"
+msgstr "أخترْ بوساطة نوع المعلومة:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items."
@@ -8941,9 +8916,8 @@ msgid "Deselect all visible color items."
msgstr "أزل اختيار العناصر الملونة المرئية."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible constant items."
-msgstr "اختر عنصر إعدادات بدايةً!"
+msgstr "اختر كل العناصر الثابتة المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
@@ -8954,9 +8928,8 @@ msgid "Deselect all visible constant items."
msgstr "أزل اختيار العناصر الثابتة المرئية."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible font items."
-msgstr "اختر عنصر إعدادات بدايةً!"
+msgstr "اختر كل عناصر الخط المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
@@ -8967,19 +8940,16 @@ msgid "Deselect all visible font items."
msgstr "أزل اختيار جميع عناصر الخط المرئية."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items."
-msgstr "اختر عنصر إعدادات بدايةً!"
+msgstr "اختر كل عناصر الأيقونات المرئية."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all visible icon items and their data."
-msgstr "اختر عنصر إعدادات بدايةً!"
+msgstr "اختر كل عناصر الأيقونات المرئية و بياناتها."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect all visible icon items."
-msgstr "اختر عنصر إعدادات بدايةً!"
+msgstr "ألغ٠اختيار كل عناصر الأيقونات المرئية."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible stylebox items."
@@ -9002,42 +8972,37 @@ msgstr ""
"بصورة معتبرة."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "طوي الكل"
+msgstr "إطوي الأنواع."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "توسيع الكل"
+msgstr "توسيع كل الأنواع."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Select all Theme items."
-msgstr "حدد مل٠القالب"
+msgstr "حدد مل٠القالب."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "إختر النقاط"
+msgstr "إختر مع البيانات"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
msgstr "اختر جميع عناصر الثيم والبيانات المتعلقة بهم."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "تحديد الكل"
+msgstr "إلغاء تحديد الكل"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
msgstr "أزل اختيار جميع عناصر الثيم."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "إستيراد مشهد"
+msgstr "إستيراد المحدد"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -9058,9 +9023,8 @@ msgstr ""
"يمكنك Ø¥Ø¶Ø§ÙØ© نوع خاص أو استيراد نوع آخر متراÙÙ‚ من عناصره من ثيم آخر."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "إزالة جميع العناصر"
+msgstr "إزالة جميع عناصر الالوان"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9096,9 +9060,8 @@ msgstr ""
"ض٠المزيد من العناصر يدوياً أو عن طريق استيرادها من ثيم آخر."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Ø¥Ø¶Ø§ÙØ© بنود للصنÙ"
+msgstr "Ø¥Ø¶Ø§ÙØ© عنصر اللون"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9121,9 +9084,8 @@ msgid "Add Stylebox Item"
msgstr "Ø¥Ø¶Ø§ÙØ© جميع العناصر"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "حذ٠بنود من الصنÙ"
+msgstr "إعادة تسمية عنصر اللون"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9136,9 +9098,8 @@ msgid "Rename Font Item"
msgstr "إعادة تسمية العÙقدة"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "إعادة تسمية العÙقدة"
+msgstr "إعادة تسمية عنصر الأيقونة"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9160,24 +9121,20 @@ msgid "Manage Theme Items"
msgstr "إدارة القوالب"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "عنصر قابل للتعديل"
+msgstr "تحرير العناصر"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "نوع:"
+msgstr "أنواع:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "نوع:"
+msgstr "أضÙÙ’ نوع:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Ø¥Ø¶Ø§ÙØ© عنصر"
+msgstr "Ø¥Ø¶Ø§ÙØ© عنصر:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9185,9 +9142,8 @@ msgid "Add StyleBox Item"
msgstr "Ø¥Ø¶Ø§ÙØ© جميع العناصر"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "إزالة عنصر"
+msgstr "إزالة عنصر:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
@@ -9208,14 +9164,12 @@ msgid "Add Theme Item"
msgstr "عناصر ثيم واجهة المستخدم"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "إسم العقدة:"
+msgstr "الأسم القديم:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "استيراد الموضوع Theme"
+msgstr "إستَردْ العناصر"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9230,7 +9184,7 @@ msgstr "تحرير الموضوع"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "حذ٠المورد"
+msgstr "حذ٠المورد:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9243,7 +9197,7 @@ msgstr "Ø¥Ø¶Ø§ÙØ© نوع"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "قم بتصÙية قائمة الأنواع أو قم بأنشاء نوع جديد:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9251,24 +9205,20 @@ msgid "Available Node-based types:"
msgstr "Ø§Ù„Ù…Ù„ÙØ§Øª Ø§Ù„Ù…ØªÙˆØ§ÙØ±Ø©:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "اسم Ø§Ù„Ù…Ù„Ù ÙØ§Ø±Øº."
+msgstr "أسم النوع ÙØ§Ø±Øº!"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Are you sure you want to create an empty type?"
-msgstr "هل أنت واثق من ÙØªØ­ أكثر من مشروع؟"
+msgstr "هل أنت واثق من إنشاء نوع ÙØ§Ø±ØºØŸ"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "تغيير إسم مسار التحريك"
+msgstr "تأكيد اعادة تسمية العنصر"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "إعادة تسمية Ø§Ù„Ø¯ÙØ¹Ø©"
+msgstr "إلغاء إعادة تسمية العنصر"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override Item"
@@ -9287,18 +9237,16 @@ msgstr ""
"المشابهة ÙÙŠ جميع صناديق المظهر من هذا النوع."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "تحميل Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
+msgstr "أظهر Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr "أظهر عناصر النمط Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ Ø¥Ù„Ù‰ جانب العناصر التي تم تجاوزها."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "يتجاوز"
+msgstr "تجاوز الكل"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
@@ -9311,12 +9259,11 @@ msgstr "Ø¥Ø¶Ø§ÙØ© نوع للعنصر"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Theme:"
-msgstr "الموضوع"
+msgstr "الموضوع:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "إدارة قوالب التصدير..."
+msgstr "إدارة الأنواع..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
@@ -9376,9 +9323,8 @@ msgid "Checked Radio Item"
msgstr "عنصر Ù…ÙÙØ¹Ù„ اختياري"
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Named Separator"
-msgstr "Ø§Ù„ÙØ§ØµÙ„ Ø§Ù„Ù…ÙØ³Ù…ّى."
+msgstr "ÙØ§ØµÙ„ Ù…ÙØ³Ù…ّى"
#: editor/plugins/theme_editor_preview.cpp
msgid "Submenu"
@@ -9902,7 +9848,7 @@ msgstr "خطأ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
-msgstr ""
+msgstr "الإعدادت عن Ø¨ÙØ¹Ø¯ ÙØ§Ø±ØºØ©. يمكن أنْ لا تعمل خصائص VCS التي تستخدم الشبكة."
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9926,20 +9872,20 @@ msgstr "تغيرات Ø§Ù„Ù…ÙØ¸Ù„Ù„"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Commit:"
-msgstr "ارتكاب"
+msgstr "ارتكاب:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "تاريخ:"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Subtitle:"
-msgstr "الشجرة Ø§Ù„ÙØ±Ø¹ÙŠØ©"
+msgstr "العنوان:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "هل تريد إزالة ÙØ±Ø¹ s%ØŸ"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9971,27 +9917,27 @@ msgstr "إعادة التسمية"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "كلمة المرور"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "مسار Ø§Ù„Ù…ÙØªØ§Ø­ العام Ù„SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "أختر مسار Ø§Ù„Ù…ÙØªØ§Ø­ العام Ù„SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "مسار Ø§Ù„Ù…ÙØªØ§Ø­ الخاص Ù„SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "أختر مسار Ø§Ù„Ù…ÙØªØ§Ø­ الخاص Ù„SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "كلمة مرور SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
@@ -10000,12 +9946,12 @@ msgstr "الكش٠عن التغيرات الجديدة"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Discard all changes"
-msgstr "الإغلاق مع Ø­ÙØ¸ التعديلات؟"
+msgstr "إلغاء جميع التعديلات"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Stage all changes"
-msgstr "جاري تخزين التعديلات المحلية..."
+msgstr "تحضير جميع التغيرات"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -10043,9 +9989,8 @@ msgid "30"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "يطابق:"
+msgstr "ÙØ±ÙˆØ¹"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -10059,7 +10004,7 @@ msgstr "حذ٠مسار التحريك"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "أسم Ø§Ù„ÙØ±Ø¹"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -10077,14 +10022,13 @@ msgid "Remove Remote"
msgstr "إزالة عنصر"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "من بعد "
+msgstr "من Ø¨ÙØ¹Ø¯"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Remote URL"
-msgstr "من بعد "
+msgstr "من بعد"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
@@ -10101,7 +10045,7 @@ msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Force Push"
-msgstr "الميش المصدر:"
+msgstr "أنشر بإجبار"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10126,7 +10070,7 @@ msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "View:"
-msgstr "أظهر"
+msgstr "أظهر:"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -11026,7 +10970,7 @@ msgstr "Ø§Ù„Ù…ÙØ¸Ù„Ù„ البصري"
#: editor/plugins/visual_shader_editor_plugin.cpp
#, fuzzy
msgid "Edit Visual Property:"
-msgstr "تحرير الخاصية البصرية"
+msgstr "تحرير الخاصية البصرية:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -11470,12 +11414,12 @@ msgstr "هل أنت متأكد من ÙØªØ­ %d مشاريع مرّة واحدة؟
#: editor/project_manager.cpp
#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "اختر جهازاً من القائمة"
+msgstr "أتريد إزالة %d من المشاريع من القائمة؟"
#: editor/project_manager.cpp
#, fuzzy
msgid "Remove this project from the list?"
-msgstr "اختر جهازاً من القائمة"
+msgstr "أتريد إزالة هذا المشروع من القائمة؟"
#: editor/project_manager.cpp
msgid ""
@@ -11563,7 +11507,7 @@ msgstr "إزالة المÙقود"
#: editor/project_manager.cpp
msgid "About"
-msgstr "حول"
+msgstr "حول هذا المستند"
#: editor/project_manager.cpp
#, fuzzy
@@ -11851,7 +11795,7 @@ msgstr "إعدادات المشروع (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr "بشكل عام"
+msgstr "عام"
#: editor/project_settings_editor.cpp
msgid "Override For..."
@@ -12983,6 +12927,16 @@ msgstr "تعديل نص٠قطر الشكل الأسطواني"
msgid "Set Occluder Sphere Position"
msgstr "ضع الإنحناء ÙÙŠ الموقع"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "حدد موقع نقطة الإنحناء"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "حدد موقع نقطة الإنحناء"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "تغيير نص٠قطر الاسطوانة"
@@ -13708,24 +13662,23 @@ msgstr "تحديد التعبير"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "أرجعْ"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "رسوم متحركة"
+msgstr "شرط"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "إذا (الشرط) هو:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "رَيْثَما"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "ريثما (الشرط):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
@@ -13733,7 +13686,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "لكل (عنصر) ÙÙŠ (معلومات-الإدخال):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13768,7 +13721,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Type Cast"
-msgstr "نوع:"
+msgstr "نوع"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
@@ -13991,7 +13944,7 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "إنتظر"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14005,7 +13958,7 @@ msgstr "نسبة الإطار الÙيزيائي %"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "s% ثانية(ثواني)"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14057,12 +14010,11 @@ msgstr "يعمل على %s"
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Exporting APK..."
-msgstr "تصدير الكÙÙ„"
+msgstr "تصدير APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "إلغاء التثبيت"
+msgstr "إلغاء التثبيت..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -14072,7 +14024,7 @@ msgstr "يستقبل المرايا، من ÙØ¶Ù„Ùƒ إنتظر..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not install to device: %s"
-msgstr "لا يمكن بدء عملية جانبية!"
+msgstr "لم يتمكن من التثبيت على الجهاز: %s"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -14150,7 +14102,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
-msgstr "مل٠\"أدوات البناء\"build-tools Ù…Ùقود!"
+msgstr "مجلد 'أدوات البناء' (build-tools) Ù…Ùقود!"
#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
@@ -14240,16 +14192,13 @@ msgid "Signing debug %s..."
msgstr "يتم توقيع نسخة التنقيح البرمجي %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signing release %s..."
-msgstr ""
-"ÙŠÙØ­Øµ Ø§Ù„Ù…Ù„ÙØ§ØªØŒ\n"
-"من ÙØ¶Ù„Ùƒ إنتظر..."
+msgstr "التوقيع-الرقمي للاصدار %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "لا يمكن ÙØªØ­ القالب من أجل التصدير:"
+msgstr "لا يمكن ÙØªØ­ القالب, من أجل التصدير."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
@@ -14258,7 +14207,7 @@ msgstr "أعاد 'apksigner' الخطأ التالي #%d"
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Verifying %s..."
-msgstr "Ø¥Ø¶Ø§ÙØ© %s..."
+msgstr "التأكيد من %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
@@ -14279,8 +14228,9 @@ msgid "APK Expansion not compatible with Android App Bundle."
msgstr "توسيع APK غير متواÙÙ‚ مع حزمة تطبيق الأندرويد Android App Bundle."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr "إسم مل٠غير صالح! يتطلب مل٠APK اللاحقة ‭*.apk"
+msgstr "إسم مل٠غير صالح! يتطلب مل٠اندرويد APK اللاحقة ‭.*.apk"
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
@@ -14313,14 +14263,13 @@ msgstr ""
"تعذرت كتابة overwrite Ù…Ù„ÙØ§Øª res://android/build/res/*.xml مع اسم المشروع"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project\n"
-msgstr "لا قدرة على تحرير project.godot ÙÙŠ مسار المشروع."
+msgstr "لم يتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع إلى مشروع gradle\n"
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "لا يمكن كتابة الملÙ:"
+msgstr "لا يمكن كتابة الملÙ!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -14355,11 +14304,12 @@ msgid "Creating APK..."
msgstr "إنشاء المحيط..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "لا يمكن ÙØªØ­ القالب من أجل التصدير:"
+msgstr ""
+"لم يتم إيجاد قالب APK للتصدير:\n"
+"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -14380,7 +14330,7 @@ msgstr "Ø¥Ø¶Ø§ÙØ© %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid "Could not export project files"
-msgstr "لا يمكن كتابة الملÙ:"
+msgstr "لا يمكن كتابة الملÙ"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -14408,10 +14358,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ù…ÙØ­Ø¯Ø¯ غير صالح:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "الأيقونة المطلوبة لم ØªÙØ­Ø¯Ø¯ ÙÙŠ الإعدادات Ø§Ù„Ù…ÙØ³Ø¨Ù‚Ø©."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Ø¥ÙŠÙ‚Ø§Ù Ù…ÙØ®Ø¯Ù… HTTP"
@@ -14449,12 +14395,174 @@ msgstr "لا يمكن قراءة مل٠HTML مخصص:"
#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "لا يمكن إنشاء المجلد."
+msgstr "لا يمكن إنشاء المجلد:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "خطأ ÙÙŠ Ø­ÙØ¸ المشهد."
+msgstr "خطأ ÙÙŠ بدء تشغيل خادم HTTP:"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "اسم مشروع غير صالح."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "هندسياصً غير صالح، لا يمكن إنشاء Ù…ÙØ¶Ù„ّع."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "لا يمكن إنشاء المجلد."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "مسار غير صالح."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "ÙØ´Ù„ تحميل المورد."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "ÙØ´Ù„ تحميل المورد."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "صيغة غير صالحة."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "صيغة غير صالحة."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "لم توجد ايقونات."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "ينشئ الصورة المصغرة"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"لم يتم إيجاد قالب APK للتصدير:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
@@ -14462,11 +14570,34 @@ msgid "Invalid bundle identifier:"
msgstr "Ù…ÙØ­Ø¯Ø¯ غير صالح:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "التوثيق: إن توقيع Ø§Ù„Ø´ÙØ±Ø© البرمجية مطلوب."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "التوثيق: إن تمكين وقت التشغيل hardened runtime مطلوب."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "التوثيق: إن تمكين وقت التشغيل hardened runtime مطلوب."
#: platform/osx/export/export.cpp
@@ -14477,6 +14608,69 @@ msgstr "التوثيق: لم يتم تحديد اسم معر٠Apple ID."
msgid "Notarization: Apple ID password not specified."
msgstr "التوثيق: لم يتم تحديد كلمة مرور Apple ID."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "اسم Ø§Ù„Ø±ÙØ²Ù…Ø© القصير غير صالح."
@@ -14529,6 +14723,27 @@ msgstr "أبعاد صورة الشعار المربع 310x150 غير صالحة
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "أبعاد شاشة البداية غير صالحة (ينبغي أن تكون 620×300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "مسار غير صالح."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "صيغة غير صالحة."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ù…ÙØ¹Ø±Ù GUID (Ø§Ù„Ù…ÙØ¹Ø±Ù‘Ù Ø§Ù„ÙØ±ÙŠØ¯ العالمي) للمنتج غير صالح."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14584,8 +14799,8 @@ msgstr ""
#: scene/2d/collision_polygon_2d.cpp
msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode."
msgstr ""
-"مضلع غير صالح. يتطلب الأمر على الأقل نقطتين ÙÙŠ نمط البناء \"المتجزئ Segments"
-"\"."
+"مضلع غير صالح. يتطلب الأمر على الأقل نقطتين ÙÙŠ نمط البناء \"المتجزئ "
+"Segments\"."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -14623,8 +14838,8 @@ msgid ""
"\"Particles Animation\" enabled."
msgstr ""
"تتطلب الرسوم المتحركة للجسيمات-وحدة-المعالجة-المركزية-ثنائية-الأبعاد "
-"(CPUParticles2D) استخدام لوحة-مادة-العنصر (CanvasItemMaterial) مع ØªÙØ¹ÙŠÙ„"
-"\"الرسوم المتحركة للجزيئات\"."
+"(CPUParticles2D) استخدام لوحة-مادة-العنصر (CanvasItemMaterial) مع "
+"ØªÙØ¹ÙŠÙ„\"الرسوم المتحركة للجزيئات\"."
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be PhysicsBody2Ds"
@@ -14988,8 +15203,8 @@ msgstr "المعايير الموحدة هي المدعومة Ùقط."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"الجسيمات القائمة على وحدة معالجة الرسومات (GPU-based particles) لا تدعم "
"برنامج تشغيل الÙيديو GLES2 .\n"
@@ -15256,9 +15471,10 @@ msgstr ""
"ذلك."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"اللون: #%s\n"
diff --git a/editor/translations/az.po b/editor/translations/az.po
index 5aecfb0e5f..46738301a9 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -534,8 +534,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1413,7 +1413,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2188,8 +2188,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3217,7 +3217,12 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Dəyişdir"
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3945,6 +3950,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4057,7 +4070,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4848,19 +4861,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12322,6 +12335,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13622,10 +13643,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13666,16 +13683,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13686,6 +13873,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13738,6 +13988,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14088,8 +14356,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14329,7 +14597,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index a0e22270a6..7bb426d010 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -10,8 +10,8 @@
# Damyan Dichev <mwshock2@gmail.com>, 2019.
# Whod <whodizhod@gmail.com>, 2020.
# Stoyan <stoyan.stoyanov99@protonmail.com>, 2020.
-# zooid <the.zooid@gmail.com>, 2020.
-# Любомир ВаÑилев <lyubomirv@gmx.com>, 2020, 2021.
+# zooid <the.zooid@gmail.com>, 2020, 2022.
+# Любомир ВаÑилев <lyubomirv@gmx.com>, 2020, 2021, 2022.
# Ziv D <wizdavid@gmail.com>, 2020.
# Violin Iliev <violin.developer@gmail.com>, 2021.
msgid ""
@@ -19,8 +19,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-31 08:52+0000\n"
-"Last-Translator: Violin Iliev <violin.developer@gmail.com>\n"
+"PO-Revision-Date: 2022-02-16 08:44+0000\n"
+"Last-Translator: Любомир ВаÑилев <lyubomirv@gmx.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/bg/>\n"
"Language: bg\n"
@@ -28,7 +28,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -49,12 +49,12 @@ 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)"
msgstr ""
-"self не може да Ñе ползва, тъй като инÑтанциÑта е null (не е била подадена)"
+"self не може да Ñе използва, тъй като инÑтанциÑта е null (не е била подадена)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -70,11 +70,11 @@ msgstr "Ðевалидно наименован Ð¸Ð½Ð´ÐµÐºÑ '%s' за базоÐ
#: core/math/expression.cpp
msgid "Invalid arguments to construct '%s'"
-msgstr "Ðеправилни аргументи за Ñъздаване на „%s“"
+msgstr "Ðеправилни аргументи за изграждане на „%s“"
#: core/math/expression.cpp
msgid "On call to '%s':"
-msgstr "При обаждане към '%s':"
+msgstr "При извикване на „%s“:"
#: core/ustring.cpp
msgid "B"
@@ -110,7 +110,7 @@ msgstr "Свободно"
#: editor/animation_bezier_editor.cpp
msgid "Balanced"
-msgstr "БаланÑиран"
+msgstr "БаланÑирано"
#: editor/animation_bezier_editor.cpp
msgid "Mirror"
@@ -203,27 +203,27 @@ msgstr "Промени Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ†Ð¸ÐºÑŠÐ»"
#: editor/animation_track_editor.cpp
msgid "Property Track"
-msgstr "ПиÑта за промÑна на характериÑтики"
+msgstr "Пътечка за ÑвойÑтво"
#: editor/animation_track_editor.cpp
msgid "3D Transform Track"
-msgstr "ПиÑта за промÑна на триизмерна транÑформациÑ"
+msgstr "Пътечка за 3-измерна транÑформациÑ"
#: editor/animation_track_editor.cpp
msgid "Call Method Track"
-msgstr ""
+msgstr "Пътечка за извикване на метод"
#: editor/animation_track_editor.cpp
msgid "Bezier Curve Track"
-msgstr ""
+msgstr "Пътечка за крива на Безие"
#: editor/animation_track_editor.cpp
msgid "Audio Playback Track"
-msgstr ""
+msgstr "Пътечка за възпроизвеждане на звук"
#: editor/animation_track_editor.cpp
msgid "Animation Playback Track"
-msgstr ""
+msgstr "Пътечка за възпроизвеждане на анимациÑ"
#: editor/animation_track_editor.cpp
msgid "Animation length (frames)"
@@ -248,35 +248,36 @@ msgstr "Функции:"
#: editor/animation_track_editor.cpp
msgid "Audio Clips:"
-msgstr ""
+msgstr "Звукови клипове:"
#: editor/animation_track_editor.cpp
msgid "Anim Clips:"
-msgstr ""
+msgstr "Ðнимационни клипове:"
#: editor/animation_track_editor.cpp
msgid "Change Track Path"
-msgstr ""
+msgstr "ПромÑна на Ð¿ÑŠÑ‚Ñ Ð½Ð° пътечката"
#: editor/animation_track_editor.cpp
msgid "Toggle this track on/off."
-msgstr ""
+msgstr "Включване/изключване на тази пътечка."
#: editor/animation_track_editor.cpp
msgid "Update Mode (How this property is set)"
-msgstr ""
+msgstr "Режим на обновÑване (как Ñе задава ÑтойноÑÑ‚ на това ÑвойÑтво)"
#: editor/animation_track_editor.cpp
msgid "Interpolation Mode"
-msgstr ""
+msgstr "Режим на интерполациÑ"
#: editor/animation_track_editor.cpp
msgid "Loop Wrap Mode (Interpolate end with beginning on loop)"
msgstr ""
+"Режим на превъртане (интерполиране между ÐºÑ€Ð°Ñ Ð¸ началото при превъртане)"
#: editor/animation_track_editor.cpp
msgid "Remove this track."
-msgstr "Премахване на пътечката."
+msgstr "Премахване на тази пътечка."
#: editor/animation_track_editor.cpp
msgid "Time (s): "
@@ -284,15 +285,15 @@ msgstr "Време (Ñек): "
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
-msgstr ""
+msgstr "Включване/изключване на пътечката"
#: editor/animation_track_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "Плавно"
#: editor/animation_track_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "ДиÑкретно"
#: editor/animation_track_editor.cpp
msgid "Trigger"
@@ -304,7 +305,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Nearest"
-msgstr ""
+msgstr "Без интерполиране"
#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp
#: editor/property_editor.cpp
@@ -313,7 +314,7 @@ msgstr "Линейно"
#: editor/animation_track_editor.cpp
msgid "Cubic"
-msgstr ""
+msgstr "Кубично"
#: editor/animation_track_editor.cpp
msgid "Clamp Loop Interp"
@@ -326,7 +327,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr ""
+msgstr "Вмъкване на ключ"
#: editor/animation_track_editor.cpp
msgid "Duplicate Key(s)"
@@ -355,16 +356,16 @@ msgstr "ПромÑна на режима на повтарÑне на анима
#: editor/animation_track_editor.cpp
msgid "Remove Anim Track"
-msgstr ""
+msgstr "Премахване на анимационната пътечка"
#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
#: editor/animation_track_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr "Създаване на ÐОВРпътечка за %s и вмъкване на ключ?"
+msgstr "Да Ñе Ñъздаде ли ÐОВРпътечка за %s и да Ñе вмъкне ключ?"
#: editor/animation_track_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Да Ñе Ñъздадат ли %d ÐОВИ пътечки и да Ñе вмъкнат ключове?"
#: editor/animation_track_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp
@@ -381,12 +382,12 @@ msgstr "Създаване"
#: editor/animation_track_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Вмъкване на анимациÑ"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr "възел „%s“"
+msgstr "обект „%s“"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -404,15 +405,15 @@ msgstr "ÑвойÑтво „%s“"
#: 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"
@@ -425,6 +426,8 @@ msgstr "Пренареждане на пътечките"
#: editor/animation_track_editor.cpp
msgid "Transform tracks only apply to Spatial-based nodes."
msgstr ""
+"Пътечките за транÑÑ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð³Ð°Ñ‚ да работÑÑ‚ Ñамо Ñ Ð¾Ð±ÐµÐºÑ‚Ð¸, базирани на "
+"Spatial."
#: editor/animation_track_editor.cpp
msgid ""
@@ -433,14 +436,19 @@ msgid ""
"-AudioStreamPlayer2D\n"
"-AudioStreamPlayer3D"
msgstr ""
+"Пътечки за възпроизвеждане на звук могат да Ñочат Ñамо към обекти от тип:\n"
+"-AudioStreamPlayer\n"
+"-AudioStreamPlayer2D\n"
+"-AudioStreamPlayer3D"
#: editor/animation_track_editor.cpp
msgid "Animation tracks can only point to AnimationPlayer nodes."
msgstr ""
+"Ðнимационните пътечки могат да Ñочат Ñамо към обекти от тип AnimationPlayer."
#: editor/animation_track_editor.cpp
msgid "Not possible to add a new track without a root"
-msgstr ""
+msgstr "ДобавÑнето на нова пътечка без корен е невъзможно"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
@@ -511,8 +519,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -612,7 +620,7 @@ msgstr "ПочиÑтване на анимациÑта"
#: editor/animation_track_editor.cpp
msgid "Pick the node that will be animated:"
-msgstr "Изберете възелa, който да бъде анимиран:"
+msgstr "Изберете обекта, който да бъде анимиран:"
#: editor/animation_track_editor.cpp
msgid "Use Bezier Curves"
@@ -685,7 +693,7 @@ msgstr "Избиране на вÑичко/нищо"
#: editor/animation_track_editor_plugins.cpp
msgid "Add Audio Track Clip"
-msgstr "ДобавÑне на аудио клип"
+msgstr "ДобавÑне на звукова пътечка"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip Start Offset"
@@ -798,7 +806,7 @@ msgstr ""
#: editor/connections_dialog.cpp
msgid "Connect to Node:"
-msgstr "Свързване към възел:"
+msgstr "Свързване към обект:"
#: editor/connections_dialog.cpp
msgid "Connect to Script:"
@@ -995,23 +1003,27 @@ msgstr "ОпиÑание:"
#: editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr ""
+msgstr "ТърÑене на замеÑтител за:"
#: editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "ЗавиÑимоÑти за:"
#: editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will only take effect when reloaded."
msgstr ""
+"Сцената „%s“ в момента Ñе редактира.\n"
+"Промените ще влÑзат в Ñила Ñлед презареждане."
#: editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will only take effect when reloaded."
msgstr ""
+"РеÑурÑÑŠÑ‚ „%s“ Ñе използва.\n"
+"Промените ще влÑзат в Ñила Ñлед презареждане."
#: editor/dependency_editor.cpp
#: modules/gdnative/gdnative_library_editor_plugin.cpp
@@ -1020,12 +1032,12 @@ msgstr "ЗавиÑимоÑти"
#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
-msgstr ""
+msgstr "РеÑурÑ"
#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
#: editor/project_manager.cpp editor/project_settings_editor.cpp
msgid "Path"
-msgstr ""
+msgstr "Път"
#: editor/dependency_editor.cpp
msgid "Dependencies:"
@@ -1033,15 +1045,15 @@ msgstr "ЗавиÑимоÑти:"
#: editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "Поправка на грешките"
#: editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr ""
+msgstr "Редактор на завиÑимоÑти"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "ТърÑене на замеÑтващ реÑурÑ:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -1055,7 +1067,7 @@ msgstr "ОтварÑне"
#: editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "СобÑтвеници на:"
#: editor/dependency_editor.cpp
msgid ""
@@ -1063,9 +1075,9 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
-"Да Ñе премахнат ли избраните файлове от проекта? (ДейÑтвието е необратимо.)\n"
-"Според наÑтройката на файловата Ви ÑиÑтема, файловете ще бъдат или "
-"премеÑтени в кошчето, или окончателно изтрити."
+"Да Ñе премахнат ли избраните файлове от проекта? (Това е необратимо.)\n"
+"Ð’ завиÑимоÑÑ‚ от наÑтройките на файловата ÑиÑтема, файловете може да бъдат "
+"премеÑтени в кошчето или окончателно изтрити."
#: editor/dependency_editor.cpp
msgid ""
@@ -1075,6 +1087,10 @@ msgid ""
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
+"Файловете за премахване Ñа необходими за работата на други реÑурÑи.\n"
+"ÐаиÑтина ли иÑкате да ги премахнете? (Това е необратимо.)\n"
+"Ð’ завиÑимоÑÑ‚ от наÑтройките на файловата ÑиÑтема, файловете може да бъдат "
+"премеÑтени в кошчето или окончателно изтрити."
#: editor/dependency_editor.cpp
msgid "Cannot remove:"
@@ -1106,7 +1122,7 @@ msgstr "Грешки при зареждането!"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "ÐаиÑтина ли иÑкате да изтриете %d елемент(а)? (Това е необратимо!)"
#: editor/dependency_editor.cpp
msgid "Show Dependencies"
@@ -1349,7 +1365,7 @@ msgid "Bus Options"
msgstr "ÐаÑтройки на шината"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -1457,75 +1473,76 @@ msgstr ""
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Ðеправилно име."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Ðе може да започва Ñ Ñ†Ð¸Ñ„Ñ€Ð°."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Позволени знаци:"
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing engine class name."
-msgstr ""
+msgstr "Ðе може да Ñъвпада Ñ Ð¸Ð¼Ðµ на ÐºÐ»Ð°Ñ Ð¾Ñ‚ Godot."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing built-in type name."
-msgstr ""
+msgstr "Ðе може да Ñъвпада Ñ Ð¸Ð¼Ðµ на вграден тип."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing global constant name."
-msgstr ""
+msgstr "Ðе може да Ñъвпада Ñ Ð¸Ð¼Ðµ на ÑъщеÑтвуваща глобална конÑтанта."
#: editor/editor_autoload_settings.cpp
msgid "Keyword cannot be used as an autoload name."
-msgstr ""
+msgstr "Ðе може да Ñе ползва ключова дума като име на автозареждане."
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Вече ÑъщеÑтвува автозареждане „%s“!"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Преименуване на автозареждането"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr ""
+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 "%s is an invalid path. File does not exist."
-msgstr ""
+msgstr "Ðеправилен път: „%s“. Файлът не ÑъщеÑтвува."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
msgstr ""
+"Ðеправилен път: „%s“. ТрÑбва да Ñе намира в Ð¿ÑŠÑ‚Ñ Ð·Ð° реÑурÑите (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "ДобавÑне на автозареждане"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp
@@ -1536,13 +1553,13 @@ msgstr "Път:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Име на обекта:"
#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp
#: editor/editor_plugin_settings.cpp editor/editor_profiler.cpp
#: editor/project_manager.cpp editor/settings_config_dialog.cpp
msgid "Name"
-msgstr ""
+msgstr "Име"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
@@ -1550,7 +1567,7 @@ msgstr "Глобална променлива"
#: editor/editor_data.cpp
msgid "Paste Params"
-msgstr ""
+msgstr "ПоÑтавÑне на параметрите"
#: editor/editor_data.cpp
msgid "Updating Scene"
@@ -1695,7 +1712,7 @@ msgstr "Редактиране на дървото на Ñцената"
#: editor/editor_feature_profile.cpp
msgid "Node Dock"
-msgstr "Панел за възлите"
+msgstr "Панел за обектите"
#: editor/editor_feature_profile.cpp
msgid "FileSystem Dock"
@@ -1787,7 +1804,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Nodes and Classes:"
-msgstr "Възли и клаÑове:"
+msgstr "Обекти и клаÑове:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -2063,9 +2080,8 @@ msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "ЗамÑна на вÑичко"
+msgstr "Ð·Ð°Ð¼ÐµÐ½Ñ %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2096,9 +2112,8 @@ msgid "Icons"
msgstr "Иконки"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Styles"
-msgstr "Стил"
+msgstr "Стилове"
#: editor/editor_help.cpp
msgid "Enumerations"
@@ -2124,8 +2139,8 @@ msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð½Ð° методите"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -2202,9 +2217,8 @@ msgid "Property:"
msgstr ""
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(ÑтойноÑÑ‚)"
+msgstr "Закачане на ÑтойноÑтта"
#: editor/editor_inspector.cpp
msgid ""
@@ -2235,19 +2249,16 @@ msgid "Unpinned %s"
msgstr ""
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Копиране на ÑвойÑтвата"
+msgstr "Копиране на ÑвойÑтвото"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "ПоÑтавÑне на ÑвойÑтвата"
+msgstr "ПоÑтавÑне на ÑвойÑтвото"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Копиране на ÑвойÑтвата"
+msgstr "Копиране на Ð¿ÑŠÑ‚Ñ Ð½Ð° ÑвойÑтвото"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2295,7 +2306,7 @@ msgstr ""
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr "Възел"
+msgstr "Обект"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -2936,9 +2947,8 @@ msgid "Install Android Build Template..."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "ОтварÑне на папката Ñ Ð´Ð°Ð½Ð½Ð¸ на проекта"
+msgstr "ОтварÑне на папката Ñ Ð´Ð°Ð½Ð½Ð¸ на потребителÑ"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3024,6 +3034,12 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Ðко това е включено, ще Ñе използват резервните варианти на шейдърите (или "
+"видими чрез убершейдър, или Ñкрити) през цÑлото време на изпълнението.\n"
+"Това е полезно, ако иÑкате да видите как изглеждат и как Ñе държат "
+"резервните шейдъри, които обикновено Ñе виждат за много кратко време.\n"
+"За да работи това, в наÑтройките на проекта трÑбва да е включено "
+"аÑинхронното компилиране на шейдърите."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3179,8 +3195,14 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Премахване на вÑички промени от индекÑа за подаване"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Промени в материала:"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3219,9 +3241,8 @@ msgid "Install from file"
msgstr "ИнÑталиране от файл"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Изберете източник за полигонна мрежа:"
+msgstr "Изберете изходен файл за android"
#: editor/editor_node.cpp
msgid ""
@@ -3233,6 +3254,14 @@ msgid ""
"the \"Use Custom Build\" option should be enabled in the Android export "
"preset."
msgstr ""
+"Това ще наÑтрои проекта Ви за перÑонализирано компилиране за Android, като "
+"инÑталира Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½ в „res://android/build“.\n"
+"След това ще можете да го промените (като добавите модули, промените файла "
+"„AndroidManifest.xml“ и Ñ‚.н.) и да Ñъздадете Ñвой ÑобÑтвен APK за "
+"изнаÑÑнето.\n"
+"Имайте предвид, че за да ползвате перÑонализирани файлове APK, вмеÑто "
+"предварително готовите, в конфигурациÑта за изнаÑÑне за Android трÑбва да "
+"поÑтавена отметка в „Използване на ÑобÑтвена компилациÑ“."
#: editor/editor_node.cpp
msgid ""
@@ -3259,9 +3288,8 @@ msgid "Merge With Existing"
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "ПромÑна на транÑÑ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ (ÐнимациÑ)"
+msgstr "Прилагане на транÑформациите на MeshInstance"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3597,9 +3625,8 @@ msgstr ""
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Грешка!"
+msgstr "Грешка от %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3908,6 +3935,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4020,7 +4055,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4117,9 +4152,8 @@ msgid "Replace..."
msgstr "ЗамÑна..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "ЗамÑна на вÑички"
+msgstr "ЗамÑна във файловете"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4130,9 +4164,8 @@ msgid "Replace: "
msgstr "ЗамÑна: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "ЗамÑна на вÑички"
+msgstr "ЗамÑна на вÑички (ÐЕОБРÐТИМО)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4185,7 +4218,7 @@ msgstr ""
#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
#: editor/scene_tree_editor.cpp
msgid "Filter nodes"
-msgstr "Филтриране на възлите"
+msgstr "Филтриране на обектите"
#: editor/groups_editor.cpp
msgid "Nodes in Group"
@@ -4286,11 +4319,11 @@ msgstr "Запазване..."
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
-msgstr "Изберете метод на внаÑÑне"
+msgstr "Изберете вид внаÑÑне"
#: editor/import_defaults_editor.cpp
msgid "Importer:"
-msgstr "Метод на внаÑÑне:"
+msgstr "Вид внаÑÑне:"
#: editor/import_defaults_editor.cpp
msgid "Reset to Defaults"
@@ -4439,7 +4472,7 @@ 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"
@@ -4539,7 +4572,7 @@ msgstr "Зареждане..."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Move Node Point"
-msgstr "ПремеÑтване на точката на възела"
+msgstr "ПремеÑтване на точката на обекта"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Limits"
@@ -4554,12 +4587,12 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
msgid "This type of node can't be used. Only root nodes are allowed."
msgstr ""
-"Този тип възел не може да бъде използван. Разрешени Ñа Ñамо коренни възли."
+"Този тип обект не може да бъде използван. Разрешени Ñа Ñамо коренни обекти."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Add Node Point"
-msgstr "ДобавÑне на точка за възел"
+msgstr "ДобавÑне на точка за обект"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4584,7 +4617,7 @@ msgid ""
msgstr ""
"AnimationTree не е активен.\n"
"Ðктивирайте го, за да включите възпроизвеждането. Ðко не Ñтане, проверете "
-"дали има предупредителни ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно възлите."
+"дали има предупредителни ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно обектите."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4617,7 +4650,7 @@ msgstr "ОтварÑне на редактора"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Open Animation Node"
-msgstr "ОтварÑне на възела за анимациÑ"
+msgstr "ОтварÑне на обекта за анимациÑ"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Triangle already exists."
@@ -4645,7 +4678,7 @@ msgstr ""
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "BlendSpace2D does not belong to an AnimationTree node."
-msgstr "BlendSpace2D не принадлежи на възел от тип AnimationTree."
+msgstr "BlendSpace2D не принадлежи на обект от тип AnimationTree."
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "No triangles exist, so no blending can take place."
@@ -4687,11 +4720,11 @@ 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"
-msgstr "Възелът е премеÑтен"
+msgstr "Обектът е премеÑтен"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Unable to connect, port may be in use or connection may be invalid."
@@ -4702,12 +4735,12 @@ msgstr ""
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Nodes Connected"
-msgstr "Възлите Ñа Ñвързани"
+msgstr "Обектите Ñа Ñвързани"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Nodes Disconnected"
-msgstr "Възлите Ñа разкачени"
+msgstr "Обектите Ñа разкачени"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Set Animation"
@@ -4716,12 +4749,12 @@ msgstr "Задаване на анимациÑ"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Delete Node"
-msgstr "Изтриване на възела"
+msgstr "Изтриване на обекта"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr "Изтриване на възела/възлите"
+msgstr "Изтриване на обекта/обектите"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Toggle Filter On/Off"
@@ -4748,7 +4781,7 @@ msgstr ""
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Anim Clips"
-msgstr ""
+msgstr "Ðнимационни клипове"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Audio Clips"
@@ -4761,12 +4794,12 @@ msgstr "Функции"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Renamed"
-msgstr "Възелът е преименуван"
+msgstr "Обектът е преименуван"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Node..."
-msgstr "ДобавÑне на възел..."
+msgstr "ДобавÑне на обект…"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/root_motion_editor_plugin.cpp
@@ -4779,7 +4812,7 @@ msgstr "Включване на филтрирането"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr ""
+msgstr "Превключване на авт. възпроизвеждане"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
@@ -4817,6 +4850,10 @@ msgid "Rename Animation"
msgstr "Преименуване на анимациÑта"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дублиране на анимациÑта"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -4829,10 +4866,6 @@ msgid "Load Animation"
msgstr "Зареждане на анимациÑ"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Дублиране на анимациÑта"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "ÐÑма Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° копиране!"
@@ -4880,7 +4913,7 @@ msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð² анимациÑта (в Ñекунди)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
msgstr ""
-"Скалиране на ÑкороÑтта на възпроизвеждане на анимациÑта глобално за възела."
+"Скалиране на ÑкороÑтта на възпроизвеждане на анимациÑта глобално за обекта."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -4893,7 +4926,7 @@ msgstr "ÐнимациÑ"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/version_control_editor_plugin.cpp
msgid "New"
-msgstr ""
+msgstr "Ðова"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Transitions..."
@@ -4905,7 +4938,7 @@ 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"
@@ -4992,7 +5025,7 @@ msgstr "Времена на ÑмеÑване между анимациите"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Move Node"
-msgstr "ПремеÑтване на възела"
+msgstr "ПремеÑтване на обекта"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition exists!"
@@ -5005,7 +5038,7 @@ 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"
@@ -5037,7 +5070,7 @@ msgstr "ÐÑма реÑурÑ, който може да бъде изпълнеÐ
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
-msgstr "Възелът е премахнат"
+msgstr "Обектът е премахнат"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition Removed"
@@ -5056,15 +5089,15 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Create new nodes."
-msgstr "Създаване на нови възли."
+msgstr "Създаване на нови обекти."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Connect nodes."
-msgstr "Свързване на възли."
+msgstr "Свързване на обекти."
#: editor/plugins/animation_state_machine_editor.cpp
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."
@@ -5085,7 +5118,7 @@ msgstr "Режим на възпроизвеждане:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "AnimationTree"
-msgstr ""
+msgstr "AnimationTree"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "New name:"
@@ -5177,7 +5210,7 @@ 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"
@@ -5217,7 +5250,7 @@ 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..."
@@ -5756,7 +5789,7 @@ msgstr "ИзчиÑтване на водачите"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
-msgstr "Създаване на перÑонализирана(и) коÑÑ‚(и) от възела(възлите)"
+msgstr "Създаване на перÑонализирана/и коÑÑ‚(и) от обекта/обектите"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
@@ -5791,31 +5824,30 @@ msgstr "Режим на избиране"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Drag: Rotate selected node around pivot."
-msgstr "Влачене: Въртене на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð²ÑŠÐ·ÐµÐ» около централната му точка."
+msgstr "Влачене: въртене на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ около централната му точка."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Влачене: премеÑтване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð²ÑŠÐ·ÐµÐ»."
+msgstr "Alt+Влачене: премеÑтване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+Влачене: премеÑтване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð²ÑŠÐ·ÐµÐ»."
+msgstr "Alt+Влачене: Ñкалиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
-msgstr "V: Задаване на централната точка на възела."
+msgstr "V: задаване на централната точка на обекта."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Alt+ДеÑен бутон: Показване на ÑпиÑък Ñ Ð²Ñички обекти на щракнатата позициÑ, "
+"Alt+ДеÑен бутон: показване на ÑпиÑък Ñ Ð²Ñички обекти на щракнатата позициÑ, "
"включително заключените."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "ДеÑен бутон: добавÑне на обект на щракнатата позициÑ."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5912,7 +5944,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Node Sides"
-msgstr "Прилепване към Ñтраните на възела"
+msgstr "Прилепване към Ñтраните на обекта"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Node Center"
@@ -5920,7 +5952,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Other Nodes"
-msgstr "Прилепване към другите възли"
+msgstr "Прилепване към другите обекти"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Guides"
@@ -5929,13 +5961,12 @@ msgstr "Прилепване към водачите"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "Заключване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ на мÑÑто (за да не може да Ñе премеÑтва)."
+msgstr "Заключване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ на мÑÑто (за да не може да бъде меÑтен)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Заключване на избраното"
+msgstr "Заключване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚/обекти"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5944,9 +5975,8 @@ msgstr "Отключване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ (за да можÐ
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Изтриване на възела/възлите"
+msgstr "Отключване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚/обекти"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5955,9 +5985,8 @@ msgstr "Прави така, че децата на този обект да нÐ
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Групиране на избраното"
+msgstr "Групиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚/обекти"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5966,9 +5995,8 @@ msgstr "ВъзÑтановÑва на ÑпоÑобноÑтта да Ñе избÐ
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Разгрупиране на избраното"
+msgstr "Разгрупиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚/обекти"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -6025,7 +6053,7 @@ msgstr "Центриране върху избраното"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr ""
+msgstr "Мащабиране до побиране на избраното в изгледа"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
@@ -6077,11 +6105,11 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add Node Here"
-msgstr "ДобавÑне на възел тук"
+msgstr "ДобавÑне на обект тук"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Instance Scene Here"
-msgstr "ИнÑтанциране на Ñцената тук"
+msgstr "ИнÑтанциране на Ñцена тук"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6151,7 +6179,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr "Създаване на възел"
+msgstr "Създаване на обект"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -6254,7 +6282,7 @@ msgstr "Създаване на излъчващи точки от полигоÐ
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr "Създаване на излъчващи точки от възела"
+msgstr "Създаване на излъчващи точки от обекта"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 0"
@@ -6564,14 +6592,12 @@ msgid "Remove Selected Item"
msgstr ""
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Import from Scene (Ignore Transforms)"
-msgstr "ВнаÑÑне от Ñцена"
+msgstr "ВнаÑÑне от Ñцена (пренебрегване на транÑформациите)"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Import from Scene (Apply Transforms)"
-msgstr "ВнаÑÑне от Ñцена"
+msgstr "ВнаÑÑне от Ñцена (прилагане на транÑформациите)"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Update from Scene"
@@ -6579,8 +6605,7 @@ 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)."
@@ -7165,9 +7190,8 @@ msgid "Occluder Set Transform"
msgstr "ИзчиÑтване на транÑформациÑта"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Center Node"
-msgstr "Създаване на възел"
+msgstr "Центриране на обекта"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7301,12 +7325,10 @@ msgid "Move Down"
msgstr "ПремеÑтване надолу"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Следващ Ñкрипт"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Предишен Ñкрипт"
@@ -7596,9 +7618,8 @@ msgid "Find in Files..."
msgstr "ТърÑене във файловете…"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "ЗамÑна..."
+msgstr "ЗамÑна във файловете…"
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -7674,9 +7695,8 @@ msgid "Skeleton2D"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Връщане на Ñтандартните наÑтройки"
+msgstr "Връщане в поза на покой"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Overwrite Rest Pose"
@@ -7841,7 +7861,7 @@ msgstr "Размер:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn:"
-msgstr ""
+msgstr "Изчертани обекти:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Material Changes:"
@@ -7857,7 +7877,7 @@ msgstr "Промени в повърхнината:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Draw Calls:"
-msgstr ""
+msgstr "Ð˜Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° изчертаване:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Vertices:"
@@ -7865,7 +7885,7 @@ msgstr "ВертекÑи:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "Кадри/Ñек: %d (%s мÑек)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -7901,11 +7921,11 @@ msgstr "ПодравнÑване на ротациÑта Ñ Ð¸Ð·Ð³Ð»ÐµÐ´Ð°"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr ""
+msgstr "ÐÑма родител, към който да Ñе добави дъщерен обект."
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
-msgstr ""
+msgstr "Това дейÑтвие изиÑква да е избран Ñамо един обект."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Auto Orthogonal Enabled"
@@ -7913,7 +7933,7 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock View Rotation"
-msgstr ""
+msgstr "Заключване на въртенето на изгледа"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Normal"
@@ -7933,15 +7953,15 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Environment"
-msgstr ""
+msgstr "Показване на обкръжението"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Gizmos"
-msgstr ""
+msgstr "Показване на гизмота"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
-msgstr ""
+msgstr "Показване на информациÑ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View FPS"
@@ -7949,7 +7969,7 @@ msgstr "Показване на кадри/Ñек"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Half Resolution"
-msgstr ""
+msgstr "Половин резолюциÑ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
@@ -7961,11 +7981,11 @@ msgstr "Включване на Ð´Ð¾Ð¿Ð»ÐµÑ€Ð¾Ð²Ð¸Ñ ÐµÑ„ÐµÐºÑ‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Cinematic Preview"
-msgstr ""
+msgstr "КинематографÑки предварителен преглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Not available when using the GLES2 renderer."
-msgstr ""
+msgstr "Ðе е налично при използване на изчертаване чрез GLES2."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
@@ -7993,7 +8013,7 @@ msgstr "Свободен изглед отдолу"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Speed Modifier"
-msgstr ""
+msgstr "Модификатор за ÑкороÑтта на ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð¸Ñ Ð¸Ð·Ð³Ð»ÐµÐ´"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Slow Modifier"
@@ -8005,18 +8025,23 @@ msgstr "Превключване на изгледа за преглед на к
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
-msgstr ""
+msgstr "Въртенето на изгледа е заключено"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
"To zoom further, change the camera's clipping planes (View -> Settings...)"
msgstr ""
+"За да увеличите още мащаба, променете равнините на отÑичане на камерата "
+"(Изглед -> ÐаÑтройки…)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
"Note: The FPS value displayed is the editor's framerate.\n"
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
+"Забележка: Показаната ÑтойноÑÑ‚ за кадрите/Ñек е тази на редактора.\n"
+"Ð¢Ñ Ð½Ðµ бива да Ñе ползва като показател за реалната производителноÑÑ‚ на "
+"играта."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Convert Rooms"
@@ -8024,7 +8049,7 @@ msgstr "Преобразуване на Ñтаите"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
-msgstr ""
+msgstr "Диалогов прозорец XForm"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -8034,22 +8059,28 @@ msgid ""
"Closed eye: Gizmo is hidden.\n"
"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")."
msgstr ""
+"Щракнете, за да превключите между ÑÑŠÑтоÑниÑта на видимоÑÑ‚.\n"
+"\n"
+"Отворено око: гизмото е видимо.\n"
+"Затворено око: гизмото е Ñкрито.\n"
+"Полуотворено око: гизмото е видимо и през непрозрачни повърхноÑти "
+"(„рентген“)."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Nodes to Floor"
-msgstr "Прилепване на възлите към пода"
+msgstr "Прилепване на обектите към пода"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
-msgstr ""
+msgstr "Ðе е намерен твърд под, към който да Ñе прилепи избраното."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Local Space"
-msgstr ""
+msgstr "Използване на локалното проÑтранÑтво"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr ""
+msgstr "Използване на прилепването"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
@@ -8057,129 +8088,128 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr ""
+msgstr "Изглед отдолу"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
-msgstr ""
+msgstr "Изглед отгоре"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View"
-msgstr ""
+msgstr "Изглед отзад"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Front View"
-msgstr ""
+msgstr "Изглед отпред"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Left View"
-msgstr ""
+msgstr "Изглед отлÑво"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right View"
-msgstr ""
+msgstr "Изглед отдÑÑно"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Орбитален изглед отдолу"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Орбитален изглед отлÑво"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Орбитален изглед отдÑÑно"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Up"
-msgstr ""
+msgstr "Орбитален изглед отгоре"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Орбитален изглед 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
-msgstr ""
+msgstr "Превключване между перÑпективен/ортогонален изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Insert Animation Key"
-msgstr ""
+msgstr "Вмъкване на ключ за анимиране"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Origin"
-msgstr ""
+msgstr "ФокуÑиране върху отправната точка"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Selection"
-msgstr ""
+msgstr "ФокуÑиране върху избраното"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Toggle Freelook"
-msgstr ""
+msgstr "Превключване към Ñвободен изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "ÐамалÑване на полето на видимоÑÑ‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Увеличаване на полето на видимоÑÑ‚"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "Връщане на Ñтандартните наÑтройки"
+msgstr "Връщане на Ñтандартното поле на видимоÑÑ‚"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Transform"
-msgstr ""
+msgstr "ТранÑформиране"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Object to Floor"
-msgstr ""
+msgstr "ПрилепÑне на обекта към пода"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog..."
-msgstr ""
+msgstr "Прозорец за транÑформиране…"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
-msgstr ""
+msgstr "1 прозорец за изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports"
-msgstr ""
+msgstr "2 прозореца за изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports (Alt)"
-msgstr ""
+msgstr "2 прозореца за изглед (друг)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports"
-msgstr ""
+msgstr "3 прозореца за изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports (Alt)"
-msgstr ""
+msgstr "3 прозореца за изглед (друг)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "4 Viewports"
-msgstr ""
+msgstr "4 прозореца за изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
-msgstr ""
+msgstr "Гизмота"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
-msgstr ""
+msgstr "Показване на отправната точка"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Grid"
-msgstr ""
+msgstr "Показване на решетката"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Portal Culling"
@@ -8197,27 +8227,27 @@ msgstr "ÐаÑтройки…"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
-msgstr ""
+msgstr "ÐаÑтройки за прилепването"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate Snap:"
-msgstr ""
+msgstr "Прилепване при транÑлациÑ:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
-msgstr ""
+msgstr "Прилепване при Ñ€Ð¾Ñ‚Ð°Ñ†Ð¸Ñ (градуÑи):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr ""
+msgstr "Прилепване при Ñкалиране (%):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
-msgstr ""
+msgstr "ÐаÑтройки на прозореца за изглед"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective FOV (deg.):"
-msgstr ""
+msgstr "Поле на видимоÑÑ‚ в перÑпектива (градуÑи):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
@@ -8854,14 +8884,12 @@ msgid "Filter the list of types or create a new custom type:"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "Ðалични профили:"
+msgstr "Ðалични типове оÑновани на Node:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "Полигонната мрежа е празна!"
+msgstr "Името на типа е празно!"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Are you sure you want to create an empty type?"
@@ -9488,14 +9516,12 @@ msgid "Commit"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Промени в шейдъра:"
+msgstr "Промени в индекÑа за подаване"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Промени в шейдъра:"
+msgstr "Промени, които не Ñа в индекÑа за подаване"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit:"
@@ -9506,9 +9532,8 @@ msgid "Date:"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Поддърво"
+msgstr "Подзаглавие:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
@@ -9531,150 +9556,136 @@ msgid "Initialize"
msgstr "Инициализиране"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Премахване на точката"
+msgstr "Отдалечен вход"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Преименуван"
+msgstr "ПотребителÑко име"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Парола"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Път до Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð¸Ñ SSH ключ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Задайте Ð¿ÑŠÑ‚Ñ Ð´Ð¾ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð¸Ñ SSH ключ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Път до чаÑÑ‚Ð½Ð¸Ñ SSH ключ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Задайте Ð¿ÑŠÑ‚Ñ Ð´Ð¾ чаÑÑ‚Ð½Ð¸Ñ SSH ключ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Парола за SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "ЗаÑичане на новите промени"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "ЗатвÑране и запазване на промените?"
+msgstr "ОтмÑна на вÑички промени"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Запазване на локалните промени..."
+msgstr "ДобавÑне на вÑички промени в индекÑа за подаване"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Промени в материала:"
+msgstr "Премахване на вÑички промени от индекÑа за подаване"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Message"
-msgstr ""
+msgstr "Съобщение за подаването"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
-msgstr ""
+msgstr "Подаване на промените"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit List"
-msgstr ""
+msgstr "СпиÑък Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Размер на ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "СъвпадениÑ:"
+msgstr "Клони"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Създаване на нов проект"
+msgstr "Създаване на нов клон"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Премахване на проекта"
+msgstr "Премахване на клона"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Име на клона"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Отдалечен"
+msgstr "Отдалечени хранилища"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Създаване на нов проект"
+msgstr "Създаване на ново отдалечено хранилище"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Премахване на текÑтурата"
+msgstr "Премахване на отдалеченото хранилище"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Отдалечено "
+msgstr "Име на отдалеченото хранилище"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Отдалечено "
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° отдалеченото хранилище"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Извличане"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Получаване"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Изпращане"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Източник за полигонна мрежа:"
+msgstr "Принудително изпращане"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
-msgstr ""
+msgstr "Променен"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Renamed"
@@ -9686,28 +9697,27 @@ msgstr "Изтрит"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Typechange"
-msgstr ""
+msgstr "Променен тип"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "ÐеÑлÑÑ‚"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Преглед"
+msgstr "Преглед:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Split"
-msgstr ""
+msgstr "Разделен"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unified"
-msgstr ""
+msgstr "Обединен"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
-msgstr ""
+msgstr "(Ñамо GLES3)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Output"
@@ -9715,7 +9725,7 @@ msgstr "ДобавÑне на изход"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Scalar"
-msgstr ""
+msgstr "ЧиÑло"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector"
@@ -9767,7 +9777,7 @@ msgstr "Задаване на израз"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Resize VisualShader node"
-msgstr "ПреоразмерÑване на възела VisualShader"
+msgstr "ПреоразмерÑване на обекта VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
@@ -9783,20 +9793,20 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Node(s) Moved"
-msgstr "Възлите Ñа премеÑтени"
+msgstr "Обектът/обектите Ñа премеÑтени"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
-msgstr "Дублиране на възлите"
+msgstr "Дублиране на обектите"
#: editor/plugins/visual_shader_editor_plugin.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Paste Nodes"
-msgstr "ПоÑтавÑне на възлите"
+msgstr "ПоÑтавÑне на обектите"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Delete Nodes"
-msgstr "Изтриване на възлите"
+msgstr "Изтриване на обектите"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
@@ -9824,7 +9834,7 @@ msgstr "Показване на Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ на шейдъра."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Create Shader Node"
-msgstr "Създаване на възел Ñ ÑˆÐµÐ¹Ð´ÑŠÑ€"
+msgstr "Създаване на обект Ñ ÑˆÐµÐ¹Ð´ÑŠÑ€"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color function."
@@ -11357,24 +11367,23 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
-msgstr ""
+msgstr "Ðвтозареждане"
#: editor/project_settings_editor.cpp
msgid "Plugins"
msgstr "ПриÑтавки"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Import Defaults"
-msgstr "ВнаÑÑне на преводи"
+msgstr "ВнаÑÑниÑ"
#: editor/property_editor.cpp
msgid "Preset..."
-msgstr ""
+msgstr "КонфигурациÑ…"
#: editor/property_editor.cpp
msgid "Zero"
-msgstr ""
+msgstr "Ðула"
#: editor/property_editor.cpp
msgid "Easing In-Out"
@@ -11386,31 +11395,31 @@ msgstr ""
#: editor/property_editor.cpp
msgid "File..."
-msgstr ""
+msgstr "Файл…"
#: editor/property_editor.cpp
msgid "Dir..."
-msgstr ""
+msgstr "Папка…"
#: editor/property_editor.cpp
msgid "Assign"
-msgstr ""
+msgstr "Задаване"
#: editor/property_editor.cpp
msgid "Select Node"
-msgstr "Избиране на възел"
+msgstr "Избиране на обект"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr ""
+msgstr "Грешка при зареждането на файла: не е реÑурÑ!"
#: editor/property_editor.cpp
msgid "Pick a Node"
-msgstr "Изберете възел"
+msgstr "Изберете обект"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr ""
+msgstr "Бит %d, ÑтойноÑÑ‚ %d."
#: editor/property_selector.cpp
msgid "Select Property"
@@ -11426,15 +11435,15 @@ msgstr "Избиране на метод"
#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp
msgid "Batch Rename"
-msgstr ""
+msgstr "МаÑово преименуване"
#: editor/rename_dialog.cpp
msgid "Prefix:"
-msgstr ""
+msgstr "ПредÑтавка:"
#: editor/rename_dialog.cpp
msgid "Suffix:"
-msgstr ""
+msgstr "ÐаÑтавка:"
#: editor/rename_dialog.cpp
msgid "Use Regular Expressions"
@@ -11442,15 +11451,15 @@ msgstr "Използване на регулÑрни изрази"
#: editor/rename_dialog.cpp
msgid "Advanced Options"
-msgstr ""
+msgstr "Разширени наÑтройки"
#: editor/rename_dialog.cpp
msgid "Substitute"
-msgstr ""
+msgstr "ЗамеÑтване"
#: editor/rename_dialog.cpp
msgid "Node name"
-msgstr "Име на възела"
+msgstr "Име на обекта"
#: editor/rename_dialog.cpp
msgid "Node's parent name, if available"
@@ -11458,33 +11467,35 @@ msgstr ""
#: editor/rename_dialog.cpp
msgid "Node type"
-msgstr "Тип на възела"
+msgstr "Тип на обекта"
#: editor/rename_dialog.cpp
msgid "Current scene name"
-msgstr ""
+msgstr "Текущо име на Ñцената"
#: editor/rename_dialog.cpp
msgid "Root node name"
-msgstr ""
+msgstr "Име на ÐºÐ¾Ñ€ÐµÐ½Ð½Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚"
#: editor/rename_dialog.cpp
msgid ""
"Sequential integer counter.\n"
"Compare counter options."
msgstr ""
+"ПоÑледователен целочиÑлен броÑч.\n"
+"Сравнете наÑтройките на броÑча."
#: editor/rename_dialog.cpp
msgid "Per-level Counter"
-msgstr ""
+msgstr "БроÑч по нива"
#: editor/rename_dialog.cpp
msgid "If set, the counter restarts for each group of child nodes."
-msgstr ""
+msgstr "Ðко е зададено, броÑчът Ñе подновÑва за вÑÑка група дъщерни обекти."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
-msgstr ""
+msgstr "Ðачална ÑтойноÑÑ‚ на броÑча"
#: editor/rename_dialog.cpp
msgid "Step"
@@ -11492,17 +11503,19 @@ msgstr "Стъпка"
#: editor/rename_dialog.cpp
msgid "Amount by which counter is incremented for each node"
-msgstr ""
+msgstr "СтойноÑÑ‚, Ñ ÐºÐ¾Ñто броÑчът Ñе увеличава при вÑеки Ñледващ обект"
#: editor/rename_dialog.cpp
msgid "Padding"
-msgstr ""
+msgstr "ОтÑтъп"
#: editor/rename_dialog.cpp
msgid ""
"Minimum number of digits for the counter.\n"
"Missing digits are padded with leading zeros."
msgstr ""
+"Минимален брой цифри за броÑча.\n"
+"Ðко чиÑлото има по-малко цифри, ще Ñе допълни Ñ Ð½ÑƒÐ»Ð¸ отпред."
#: editor/rename_dialog.cpp
msgid "Post-Process"
@@ -11514,31 +11527,31 @@ msgstr "Стил"
#: editor/rename_dialog.cpp
msgid "Keep"
-msgstr ""
+msgstr "Запазване"
#: editor/rename_dialog.cpp
msgid "PascalCase to snake_case"
-msgstr ""
+msgstr "PascalCase към snake_case"
#: editor/rename_dialog.cpp
msgid "snake_case to PascalCase"
-msgstr ""
+msgstr "snake_case към PascalCase"
#: editor/rename_dialog.cpp
msgid "Case"
-msgstr ""
+msgstr "РегиÑтър"
#: editor/rename_dialog.cpp
msgid "To Lowercase"
-msgstr ""
+msgstr "Към долен региÑтър"
#: editor/rename_dialog.cpp
msgid "To Uppercase"
-msgstr ""
+msgstr "Към горен региÑтър"
#: editor/rename_dialog.cpp
msgid "Reset"
-msgstr ""
+msgstr "Ðулиране"
#: editor/rename_dialog.cpp
msgid "Regular Expression Error:"
@@ -11616,7 +11629,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Paste Node(s)"
-msgstr "ПоÑтавÑне на възела(възлите)"
+msgstr "ПоÑтавÑне на обекта/обектите"
#: editor/scene_tree_dock.cpp
msgid "Detach Script"
@@ -11652,15 +11665,15 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Make node as Root"
-msgstr "Превръщане на възела в корен"
+msgstr "Превръщане на обекта в коренен"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes and any children?"
-msgstr "Изтриване на %d възела и дъщерните им елементи?"
+msgstr "Изтриване на %d обекта и дъщерните им обекти?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
-msgstr "Изтриване на %d възела?"
+msgstr "Изтриване на %d обекта?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
@@ -11672,7 +11685,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
-msgstr "Изтриване на възела „%s“?"
+msgstr "Изтриване на обекта „%s“?"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11740,7 +11753,7 @@ msgstr "Ðов корен на Ñцената"
#: editor/scene_tree_dock.cpp
msgid "Create Root Node:"
-msgstr "Създаване на коренен възел:"
+msgstr "Създаване на коренен обект:"
#: editor/scene_tree_dock.cpp
msgid "2D Scene"
@@ -11756,7 +11769,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Other Node"
-msgstr "Друг възел"
+msgstr "Друг обект"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
@@ -11776,7 +11789,7 @@ msgstr "Закачане на Ñкрипт"
#: editor/scene_tree_dock.cpp
msgid "Cut Node(s)"
-msgstr "ИзрÑзване на възела(възлите)"
+msgstr "ИзрÑзване на обекта/обектите"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
@@ -11837,7 +11850,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Reparent to New Node"
-msgstr "ПремеÑтване под нов възел"
+msgstr "ПремеÑтване под нов обект"
#: editor/scene_tree_dock.cpp
msgid "Make Scene Root"
@@ -11861,7 +11874,7 @@ msgstr "Изтриване (без потвърждение)"
#: editor/scene_tree_dock.cpp
msgid "Add/Create a New Node."
-msgstr "ДобавÑне/Ñъздаване на нов възел."
+msgstr "ДобавÑне/Ñъздаване на нов обект."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11902,7 +11915,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Unlock Node"
-msgstr "Отключване на възела"
+msgstr "Отключване на обекта"
#: editor/scene_tree_editor.cpp
msgid "Button Group"
@@ -12357,6 +12370,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -12653,14 +12674,14 @@ msgstr "Запълване на избраното"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
-msgstr ""
+msgstr "Край на Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¸Ñ Ñтек на проÑледÑване за изключението"
#: modules/navigation/navigation_mesh_editor_plugin.cpp
#: scene/3d/navigation_mesh_instance.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
"ТрÑбва да Ñе зададе или Ñъздаде реÑÑƒÑ€Ñ Ð¾Ñ‚ тип NavigationMesh, за може да "
-"работи този възел."
+"работи този обект."
#: modules/navigation/navigation_mesh_editor_plugin.cpp
msgid "Bake NavMesh"
@@ -12862,11 +12883,11 @@ msgstr "ПромÑна на израза"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove VisualScript Nodes"
-msgstr "Премахване на възлите Ñ VisualScript"
+msgstr "Премахване на обектите Ñ VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Duplicate VisualScript Nodes"
-msgstr "Дублиране на възлите Ñ VisualScript"
+msgstr "Дублиране на обектите Ñ VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
@@ -12898,7 +12919,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s)"
-msgstr "ДобавÑне на възел(възли)"
+msgstr "ДобавÑне на обект(и)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -12924,7 +12945,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Move Node(s)"
-msgstr "ПремеÑтване на възела(възлите)"
+msgstr "ПремеÑтване на обекта/обектите"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove VisualScript Node"
@@ -12932,19 +12953,19 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Connect Nodes"
-msgstr "Свързване на възлите"
+msgstr "Свързване на обектите"
#: modules/visual_script/visual_script_editor.cpp
msgid "Disconnect Nodes"
-msgstr "Разкачане на възлите"
+msgstr "Разкачане на обектите"
#: modules/visual_script/visual_script_editor.cpp
msgid "Connect Node Data"
-msgstr "Свързване на данните на възела"
+msgstr "Свързване на данните на обекта"
#: modules/visual_script/visual_script_editor.cpp
msgid "Connect Node Sequence"
-msgstr "Свързване на поÑледователноÑÑ‚ от възли"
+msgstr "Свързване на поÑледователноÑÑ‚ от обекти"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
@@ -12964,7 +12985,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Paste VisualScript Nodes"
-msgstr "ПоÑтавÑне на възлите Ñ VisualScript"
+msgstr "ПоÑтавÑне на обектите Ñ VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
@@ -13020,7 +13041,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Nodes..."
-msgstr "ДобавÑне на възли…"
+msgstr "ДобавÑне на обекти…"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function..."
@@ -13048,7 +13069,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Cut Nodes"
-msgstr "ИзрÑзване на възлите"
+msgstr "ИзрÑзване на обектите"
#: modules/visual_script/visual_script_editor.cpp
msgid "Make Function"
@@ -13063,18 +13084,16 @@ msgid "Edit Member"
msgstr ""
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Задаване на израз"
+msgstr "Израз"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "анимациÑ"
+msgstr "УÑловие"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
@@ -13113,9 +13132,8 @@ msgid "Sequence"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Папка:"
+msgstr "в ред:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Switch"
@@ -13126,9 +13144,8 @@ msgid "'input' is:"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Типове:"
+msgstr "Преобразуване на типа"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
@@ -13155,30 +13172,28 @@ msgid "Divide %s"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "ДобавÑне на %s"
+msgstr "ОÑтатък от деление %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftLeft %s"
-msgstr ""
+msgstr "ОтмеÑтване налÑво %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "ОтмеÑтване надÑÑно %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "ДобавÑне на %s"
+msgstr "Побитово И %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Побитово ИЛИ %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Побитолво Изключващо ИЛИ %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13207,14 +13222,12 @@ msgid "Emit %s"
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Функции"
+msgstr "ФункциÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "ПреоразмерÑване на маÑива"
+msgstr "Създаване на маÑив"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13237,62 +13250,52 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Презареждане"
+msgstr "Предварително зареждане"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ Z"
+msgstr "Вземане на индекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ð¾ Z"
+msgstr "Задаване на индекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "КонÑтанта"
+msgstr "Глобална конÑтанта"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "КонÑтанта"
+msgstr "КонÑтанта от клаÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "КонÑтанта"
+msgstr "ПроÑта конÑтанта"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "КонÑтанта"
+msgstr "МатематичеÑка конÑтанта"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Get Engine Singleton"
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Ðов корен на Ñцената"
+msgstr "Вземане на обект от Ñцената"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Редактиране на дървото на Ñцената"
+msgstr "Вземане на дървото на Ñцената"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Get Self"
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "ИзрÑзване на възлите"
+msgstr "ПерÑонализиран обект"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13309,26 +13312,24 @@ msgid "SubCall"
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "КонÑтанти"
+msgstr "Създаване на %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Get Local Var"
-msgstr ""
+msgstr "Вземане на локална променлива"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Set Local Var"
-msgstr ""
+msgstr "Задаване на локална променлива"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "ДейÑтвие"
+msgstr "ДейÑтвие %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "ДеконÑтруиране на %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13340,66 +13341,64 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Изчакване"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "ПремеÑтване на кадъра"
+msgstr "Следващ кадър"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Next Physics Frame"
-msgstr ""
+msgstr "Следващ кадър на физичната ÑиÑтема"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s Ñек"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Сигнал"
+msgstr "Изчакване на Ñигнал"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Сигнал"
+msgstr "Изчакване на Ñигнал от обект"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "WaitInstanceSignal"
-msgstr ""
+msgstr "Изчакване на Ñигнал от инÑтанциÑ"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
-msgstr ""
+msgstr "ЛипÑва име на пакета."
#: platform/android/export/export_plugin.cpp
msgid "Package segments must be of non-zero length."
-msgstr ""
+msgstr "ЧаÑтите на пакета не могат да бъдат Ñ Ð½ÑƒÐ»ÐµÐ²Ð° дължина."
#: platform/android/export/export_plugin.cpp
msgid "The character '%s' is not allowed in Android application package names."
msgstr ""
+"Знакът „%s“ не може да Ñе ползва в името на пакет за приложение на Android."
#: platform/android/export/export_plugin.cpp
msgid "A digit cannot be the first character in a package segment."
-msgstr ""
+msgstr "ПървиÑÑ‚ знак в чаÑÑ‚ от пакет не може да бъде цифра."
#: platform/android/export/export_plugin.cpp
msgid "The character '%s' cannot be the first character in a package segment."
-msgstr ""
+msgstr "ПървиÑÑ‚ знак в чаÑÑ‚ от пакет не може да бъде „%s“."
#: platform/android/export/export_plugin.cpp
msgid "The package must have at least one '.' separator."
-msgstr ""
+msgstr "Пакетът трÑбва да има поне един разделител „.“ (точка)."
#: platform/android/export/export_plugin.cpp
msgid "Select device from the list"
-msgstr ""
+msgstr "Изберете уÑтройÑтво от ÑпиÑъка"
#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "Изпълнение на %s"
#: platform/android/export/export_plugin.cpp
msgid "Exporting APK..."
@@ -13419,7 +13418,7 @@ msgstr "Ðе може да Ñе инÑталира на уÑтройÑтво: %s
#: platform/android/export/export_plugin.cpp
msgid "Running on device..."
-msgstr ""
+msgstr "Изпълнение на уÑтройÑтво…"
#: platform/android/export/export_plugin.cpp
msgid "Could not execute on device."
@@ -13427,7 +13426,7 @@ msgstr "Изпълнението на уÑтройÑтвото е невъзмо
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
-msgstr ""
+msgstr "ИнÑтрументът „apksigner“ не може да бъде намерен."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13506,6 +13505,8 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
+"„Използване на ÑобÑтвена компилациÑ“ трÑбва да е включено, за да могат да Ñе "
+"използват приÑтавките."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13520,21 +13521,29 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"„ИзнаÑÑне на AAB“ може да Ñе ползва Ñамо когато е включено „Използване на "
+"ÑобÑтвена компилациÑ“."
#: platform/android/export/export_plugin.cpp
msgid ""
"Changing the \"Min Sdk\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"„Мин. верÑÐ¸Ñ Ð½Ð° SDK“ може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñамо когато „Използване на ÑобÑтвена "
+"компилациÑ“ е включено."
#: platform/android/export/export_plugin.cpp
msgid ""
"Changing the \"Target Sdk\" is only valid when \"Use Custom Build\" is "
"enabled."
msgstr ""
+"„Целева верÑÐ¸Ñ Ð½Ð° SDK“ може да Ñе Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñамо когато „Използване на "
+"ÑобÑтвена компилациÑ“ е включено."
#: platform/android/export/export_plugin.cpp
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+"„Целева верÑÐ¸Ñ Ð½Ð° SDK“ трÑбва да бъде по-голÑма или равна на „Мин. верÑÐ¸Ñ Ð½Ð° "
+"SDK“."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13561,7 +13570,7 @@ msgstr "Ðе е намерено хранилище за ключове. ИзнÐ
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "„apksigner“ завърши Ñ Ð³Ñ€ÐµÑˆÐºÐ° #%d"
#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
@@ -13569,7 +13578,7 @@ msgstr "Потвърждаване на %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "Проверката на %s от „apksigner“ беше неуÑпешна."
#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
@@ -13585,11 +13594,11 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr ""
+msgstr "Ðеправилно име! Android APK изиÑква разширение *.apk."
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Ðеподдържан формат за изнаÑÑне!\n"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13609,10 +13618,13 @@ msgstr ""
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"файловете res://android/build/res/*.xml не могат да бъдат презапиÑани Ñ "
+"името на проекта"
#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
msgstr ""
+"Файловете на проекта не могат да бъдат изнеÑени като проект на gradle.\n"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -13620,23 +13632,29 @@ msgstr "Файлът Ñ Ð¿Ð°ÐºÐµÑ‚Ð° за разширение не може дÐ
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
-msgstr ""
+msgstr "Компилиране на проект за Android (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
+"Компилирането на проекта за Android беше неуÑпешно. Вижте изхода за "
+"грешката.\n"
+"Може Ñъщо да разгледате документациÑта за компилиране за Android на docs."
+"godotengine.org."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
-msgstr ""
+msgstr "ПремеÑтване на изходÑщите данни"
#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"ИзнеÑениÑÑ‚ файл не може да бъде копиран и преименуван. ПотърÑете резултатите "
+"в папката на проекта на gradle."
#: platform/android/export/export_plugin.cpp
msgid "Package not found: %s"
@@ -13661,6 +13679,9 @@ msgid ""
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"Ð’ шаблона за изнаÑÑне липÑват библиотеки за избраните архитектури: %s.\n"
+"МолÑ, Ñъздайте шаблон Ñ Ð²Ñички необходими библиотеки или махнете отметките "
+"от липÑващите архитектури в конфигурациÑта за изнаÑÑне."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
@@ -13694,10 +13715,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13738,16 +13755,199 @@ msgstr "Папката на HTTP-Ñървъра не може да бъде ÑÑŠ
msgid "Error starting HTTP server:"
msgstr "Грешка при Ñтартирането на HTTP-Ñървър:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ðеправилно име на проекта."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Ðеправилна геометриÑ, не може да Ñе Ñъздаде полигон."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Папката не може да бъде Ñъздадена."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ðеправилен базов път."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "РеÑурÑÑŠÑ‚ не може да бъде зареден."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "РеÑурÑÑŠÑ‚ не може да бъде зареден."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Ðеправилно разширение."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Ðеправилно разширение."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "ÐÑма намерени конÑтанти."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Създаване на полигонна мрежа…"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Ðе е намерен шаблонен файл APK за изнаÑÑне:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðеправилен идентификатор на пакета:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13758,6 +13958,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Ðеправилно кратко име на пакет."
@@ -13810,6 +14073,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ðеправилен път."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Ðеправилно разширение."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ðеправилен продуктов GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13840,8 +14124,8 @@ 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, "
+"CollisionPolygon2D Ñлужи Ñамо, за да даде форма за колизии на обект оÑнован "
+"на CollisionObject2D. МолÑ, използвайте го като наÑледник на Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D и Ñ‚.н. Ñамо, за да им дадете "
"форма."
@@ -13863,7 +14147,7 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D Ñлужи Ñамо, за да даде форма за колизии на "
+"CollisionShape2D Ñлужи Ñамо, за да даде форма за колизии на обект оÑнован на "
"CollisionObject2D. МолÑ, използвайте го като наÑледник на Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, и Ñ‚.н. Ñамо, за да им дадете "
"форма."
@@ -13944,7 +14228,7 @@ 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
@@ -13952,13 +14236,15 @@ 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."
+msgstr ""
+"ParallaxLayer работи Ñамо, когато е дъщерен на обект от тип "
+"ParallaxBackground."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -13990,7 +14276,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
-msgstr "PathFollow2D работи Ñамо, когато е наÑледник на Path2D."
+msgstr "PathFollow2D работи Ñамо, когато е дъщерен на обект от тип Path2D."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -14002,7 +14288,8 @@ msgstr ""
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-"СвойÑтвото Path трÑбва да Ñочи към дейÑтвителен възел Node2D, за да работи."
+"СвойÑтвото „Path“ трÑбва да Ñочи към дейÑтвителен обект от тип Node2D, за да "
+"работи."
#: scene/2d/skeleton_2d.cpp
msgid "This Bone2D chain should end at a Skeleton2D node."
@@ -14174,7 +14461,7 @@ msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance трÑбва да бъде дъщерен или под-дъщерен на възел от "
+"NavigationMeshInstance трÑбва да бъде дъщерен или под-дъщерен на обект от "
"тип Navigation. Той Ñамо предоÑÑ‚Ð°Ð²Ñ Ð´Ð°Ð½Ð½Ð¸Ñ‚Ðµ за навигирането."
#: scene/3d/navigation_obstacle.cpp
@@ -14194,8 +14481,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14221,7 +14508,7 @@ msgstr ""
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
-msgstr "PathFollow работи Ñамо когато е дъщерен елемент на възел от тип Path."
+msgstr "PathFollow работи Ñамо когато е дъщерен обект на обект от тип Path."
#: scene/3d/path.cpp
msgid ""
@@ -14273,7 +14560,7 @@ msgid ""
"The \"Remote Path\" property must point to a valid Spatial or Spatial-"
"derived node to work."
msgstr ""
-"СвойÑтвото „Remote Path“ трÑбва да Ñочи към дейÑтвителен възел от тип "
+"СвойÑтвото „Remote Path“ трÑбва да Ñочи към дейÑтвителен обект от тип "
"Spatial или негов наÑледник, за да работи."
#: scene/3d/room.cpp
@@ -14441,7 +14728,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 6af9541a8e..b8b8ccbf84 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -516,8 +516,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1417,7 +1417,7 @@ msgid "Bus Options"
msgstr "বাস অপশন"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট"
@@ -2274,8 +2274,8 @@ msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"à¦à¦‡ মেথড সমà§à¦ªà¦°à§à¦•ে বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯ লিপিবদà§à¦§ করা হয়নি। অনà§à¦—à§à¦°à¦¹ করে তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° মাধà§à¦¯à¦®à§‡ "
"সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] ফরমà§à¦¯à¦¾à¦Ÿ "
@@ -3444,7 +3444,12 @@ msgstr "অবিচà§à¦›à¦¿à¦¨à§à¦¨/নিরবচà§à¦›à¦¿à¦¨à§à¦¨"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr "পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ হাল-নাগাদ করà§à¦¨"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ হাল-নাগাদ করà§à¦¨"
#: editor/editor_node.cpp
@@ -4275,6 +4280,14 @@ msgstr "গà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ অকà§à¦·à¦°à¦¸à¦®à§‚হ:"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4402,7 +4415,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট"
@@ -5296,6 +5309,10 @@ msgid "Rename Animation"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "পরবরà§à¦¤à§€ পরিবরà§à¦¤à¦¨à§‡à¦° সাথে বà§à¦²à§‡à¦¨à§à¦¡ করà§à¦¨"
@@ -5308,10 +5325,6 @@ msgid "Load Animation"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ লোড করà§à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "No animation to copy!"
msgstr "ভà§à¦²: পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করার মতো কোনো অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ নেই!"
@@ -13576,6 +13589,16 @@ msgstr "Capsule Shape à¦à¦° বà§à¦¯à¦¾à¦¸à¦¾à¦°à§à¦§ পরিবরà§à¦¤à¦
msgid "Set Occluder Sphere Position"
msgstr "আনà§à¦¤-বকà§à¦°à¦°à§‡à¦–ার সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "বকà§à¦°à¦°à§‡à¦–ার বিনà§à¦¦à§à¦° সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "বকà§à¦°à¦°à§‡à¦–ার বিনà§à¦¦à§à¦° সà§à¦¥à¦¾à¦¨ নিরà§à¦§à¦¾à¦°à¦£ করà§à¦¨"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -15032,10 +15055,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -15084,17 +15103,197 @@ msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নà¦
msgid "Error starting HTTP server:"
msgstr "দৃশà§à¦¯ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে।"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° নাম:"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "বেস পথ অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "রিসোরà§à¦¸ লোড বà§à¦¯à¦°à§à¦¥ হয়েছে।"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "রিসোরà§à¦¸ লোড বà§à¦¯à¦°à§à¦¥ হয়েছে।"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "খà§à¦à¦œà§‡ পাওয়া যায়নি!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦² তৈরি হচà§à¦›à§‡"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -15105,6 +15304,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -15160,6 +15422,27 @@ msgstr "৩১০x১৫০ পà§à¦°à¦¶à¦¸à§à¦¤ লোগোর (logo) ছবà
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "সà§à¦ªà§à¦²à§à¦¯à¦¾à¦¶ পরà§à¦¦à¦¾à¦° (splash screen) ছবির অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ মাতà§à¦°à¦¾ (৬২০x৩০০ হতে হবে)।"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "অকারà§à¦¯à¦•র পথ।"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "পণà§à¦¯à§‡à¦° অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ GUID।"
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -15556,8 +15839,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15810,7 +16093,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/br.po b/editor/translations/br.po
index 77c78f55b8..574adeb121 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -511,8 +511,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1348,7 +1348,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2122,8 +2122,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3149,7 +3149,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3875,6 +3879,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3987,7 +3999,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4773,19 +4785,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12220,6 +12232,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13516,10 +13536,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13560,16 +13576,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13580,6 +13766,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13632,6 +13881,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13982,8 +14249,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14223,7 +14490,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 15c6342076..144cbbad2e 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -519,8 +519,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -529,8 +529,8 @@ msgstr ""
"\n"
"Per habilitar la possibilitat d’afegir pistes personalitzades, navegueu a la "
"configuració d’importació de l’escena i establiu\n"
-"\"Animation > Storage\" a \"Files\", activeu \"Animation > Keep Custom Tracks"
-"\", i, després, reimporteu.\n"
+"\"Animation > Storage\" a \"Files\", activeu \"Animation > Keep Custom "
+"Tracks\", i, després, reimporteu.\n"
"També podeu fer servir una configuració preestablerta que importi animacions "
"a fitxers separats."
@@ -1399,7 +1399,7 @@ msgid "Bus Options"
msgstr "Opcions del Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplica"
@@ -2207,8 +2207,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Aquesta propietat no disposa de cap descripció. Podeu contribuir [color="
-"$color][url=$url] tot aportant-ne una[/url][/color]!"
+"Aquesta propietat no disposa de cap descripció. Podeu contribuir "
+"[color=$color][url=$url] tot aportant-ne una[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2216,8 +2216,8 @@ msgstr "Descripcions dels Mètodes"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Aquest mètode no disposa de cap descripció. Podeu contribuir [color=$color]"
"[url=$url] tot aportant-ne una[/url][/color]!"
@@ -3345,10 +3345,16 @@ msgid "Update Continuously"
msgstr "Actualitzar contínuament"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Actualitzar quan es canvia"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Canvis de Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Amaga l'Indicador d'Actualització"
@@ -4149,6 +4155,14 @@ msgstr "El Nom conté caràcters que no són vàlids."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4268,7 +4282,7 @@ msgstr "Ordenar per Última Modificació"
msgid "Sort by First Modified"
msgstr "Ordenar per Primera Modificació"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplica..."
@@ -5097,6 +5111,10 @@ msgid "Rename Animation"
msgstr "Reanomena l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplica l'Animació"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Mesclar Següent Canviat"
@@ -5109,10 +5127,6 @@ msgid "Load Animation"
msgstr "Carrega l'Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplica l'Animació"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "No hi ha animacions per copiar!"
@@ -13156,6 +13170,16 @@ msgstr "Modifica el radi d'una Forma Càpsula"
msgid "Set Occluder Sphere Position"
msgstr "Estableix la Posició d'Entrada de la Corba"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Estableix la Posició del Punt de la Corba"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Estableix la Posició del Punt de la Corba"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Canviar Radi del Cilindre"
@@ -14594,12 +14618,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificador no vàlid:"
-#: platform/iphone/export/export.cpp
-#, fuzzy
-msgid "Required icon is not specified in the preset."
-msgstr ""
-"La icona necessària no està especificada a la configuració preestablerta."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Atura el servidor HTTP"
@@ -14644,17 +14662,200 @@ msgstr "No s'ha pogut crear el directori:"
msgid "Error starting HTTP server:"
msgstr "Error en desar l'escena:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "El nom del Projecte no és vàlid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "La geometria no és valida, no es pot crear el polígon."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "No s'ha pogut crear el directori."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "El Camí base no és vàlid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "No s'ha pogut carregar el recurs."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "No s'ha pogut carregar el recurs."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "L'extensió no és vàlida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "L'extensió no és vàlida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "No s'ha trobat cap icona."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creant Miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"No s'ha trobat la plantilla APK per a exportar:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Identificador no vàlid:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14665,6 +14866,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14721,6 +14985,27 @@ msgstr ""
"Imatge de la pantalla de presentació no vàlida. La mida hauria de ser "
"620x300."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Camí no vàlid."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "L'extensió no és vàlida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID del producte no vàlid."
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -15153,8 +15438,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15419,7 +15704,7 @@ msgstr "Aquest node està en desús. Fes servir AnimationTree."
#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Color: #%s\n"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 24933836f4..3908694615 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -19,7 +19,7 @@
# Emil Jiří Tywoniak <emil.tywoniak@gmail.com>, 2020, 2021.
# Filip Vincůrek <vincurek.f@gmail.com>, 2020.
# Ondrej Pavelka <ondrej.pavelka@outlook.com>, 2020.
-# Zbyněk <zbynek.fiala@gmail.com>, 2020, 2021.
+# Zbyněk <zbynek.fiala@gmail.com>, 2020, 2021, 2022.
# Daniel Kříž <Daniel.kriz@protonmail.com>, 2020.
# VladimirBlazek <vblazek042@gmail.com>, 2020.
# kubajz22 <til.jakubesko@seznam.cz>, 2020.
@@ -28,13 +28,14 @@
# swifterik <blaha.j502@gmail.com>, 2021.
# Daniel <dan@ger.cz>, 2021.
# Jakub Janšta <jansta.ja@gmail.com>, 2021.
+# Petr Voparil <voparil.petr96@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-03 03:55+0000\n"
-"Last-Translator: Vojtěch Šamla <auzkok@seznam.cz>\n"
+"PO-Revision-Date: 2022-02-10 07:50+0000\n"
+"Last-Translator: Zbyněk <zbynek.fiala@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
"Language: cs\n"
@@ -42,7 +43,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -532,8 +533,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -630,7 +631,6 @@ msgid "Go to Previous Step"
msgstr "Přejít k předchozímu kroku"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
msgstr "Resetovat"
@@ -1397,7 +1397,7 @@ msgid "Bus Options"
msgstr "Možnosti sběrnice"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikovat"
@@ -2194,8 +2194,8 @@ msgstr "Popisy metod"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"V souÄasné dobÄ› neexistuje žádný popis pro tuto metodu. Prosím pomozte nám "
"tím, že ho [color=$color][url=$url]vytvoříte[/url][/color]!"
@@ -3303,10 +3303,16 @@ msgid "Update Continuously"
msgstr "Aktualizovat průběžně"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Akualizovat při změně"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Změny materiálu:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Schovat aktualizaÄní koleÄko"
@@ -4072,6 +4078,14 @@ msgstr "Jméno obsahuje neplatné znaky."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4190,7 +4204,7 @@ msgstr "Seřadit podle poslední změny"
msgid "Sort by First Modified"
msgstr "Seřadit podle první změny"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplikovat..."
@@ -4996,6 +5010,10 @@ msgid "Rename Animation"
msgstr "Přejmenovat animaci"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplikovat animaci"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Upraveno prolnutí na další"
@@ -5008,10 +5026,6 @@ msgid "Load Animation"
msgstr "NaÄíst animaci"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplikovat animaci"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Žádná animace pro kopírování!"
@@ -10837,16 +10851,16 @@ 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\"."
+"(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\"."
+"(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"
@@ -12790,6 +12804,16 @@ msgstr "Změnit poloměr Cylinder Shape"
msgid "Set Occluder Sphere Position"
msgstr "Nastavit bod do křivky"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Nastavit pozici bodu křivky"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Nastavit pozici bodu křivky"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Změnit poloměr Cylinder"
@@ -13555,9 +13579,8 @@ msgid "in order:"
msgstr "Přejmenování složky:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Stoupání:"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
@@ -13955,8 +13978,8 @@ 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"
+"Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / "
+"moduly\" (změněno v Godot 3.2.2).\n"
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
@@ -14172,10 +14195,6 @@ msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat."
msgid "Invalid Identifier:"
msgstr "Neplatný identifikátor:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "V profilu není nastavena požadovaná ikona."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Zastavit HTTP Server"
@@ -14217,17 +14236,200 @@ msgstr "Nepodařilo se vytvořit adresář serveru HTTP:"
msgid "Error starting HTTP server:"
msgstr "Chyba při spuštění serveru HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Neplatný název projektu."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Neplatná geometrie, nelze vytvořit polygon."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Nelze vytvořit složku."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Neplatná základní cesta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Selhalo nahrání zdroje."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Selhalo nahrání zdroje."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Neplatná přípona."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Neplatná přípona."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nebyly nalezeny žádné ikony."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Vytvářím náhled"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Nepodařilo se najít šablonu APK pro export:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Neplatný identifikátor:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14238,6 +14440,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Neplatné krátké jméno balíÄku."
@@ -14290,6 +14555,27 @@ msgstr "Neplatné rozměry Square 310x150 Logo obrázku (měly by být 310x150).
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Neplatné rozměry obrázku uvítací obrazovky (měly by být 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Neplatná cesta."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Neplatná přípona."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Neplatné GUID produktu."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14451,8 +14737,8 @@ msgid ""
"CPUParticles2D\" toolbar 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"
-"\"."
+"Použijte uzel CPUParticles2D. Na převod lze použít \"Převést na "
+"CPUParticles\"."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14711,8 +14997,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar 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 "
@@ -14975,9 +15261,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Podpora tohoto uzlu byla ukonÄena. Použijte místo nÄ›ho AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Barva: #%s\n"
@@ -15020,8 +15307,8 @@ msgid ""
"\"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"
-"\"."
+"Chcete-li tento problém vyřešit, nastavte filtr myši na \"Stop\" nebo "
+"\"Pass\"."
#: scene/gui/dialogs.cpp
msgid "Alert!"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 94f5d4b033..0fe9e67693 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -535,8 +535,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1436,7 +1436,7 @@ msgid "Bus Options"
msgstr "Bus muligheder"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikér"
@@ -2277,8 +2277,8 @@ msgstr "Metode beskrivelser"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Der er i øjeblikket ingen beskrivelse af denne metode. Det vil være en stor "
"hjælp, hvis du kan [color=$color][url=$url]bidrage[/url][/color] med en "
@@ -3413,11 +3413,16 @@ msgstr "Kontinuerlig"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Opdater Ændringer"
#: editor/editor_node.cpp
#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Skift Shader"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Hide Update Spinner"
msgstr "Slå Opdaterings Snurrer Fra"
@@ -4196,6 +4201,14 @@ msgstr "Navnet indeholder ugyldige karakterer."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4321,7 +4334,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Duplikere"
@@ -5192,6 +5205,10 @@ msgid "Rename Animation"
msgstr "Omdøb animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Lav en kopi af animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -5204,10 +5221,6 @@ msgid "Load Animation"
msgstr "Indlæs animation"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Lav en kopi af animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "No animation to copy!"
msgstr "FEJL: Der er ingen animation der kan kopieres!"
@@ -13137,6 +13150,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Fjern Signal"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Fjern Kurve Punktets Position"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Fjern Kurve Punktets Position"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14532,10 +14555,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Navnet er ikke et gyldigt id:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14583,17 +14602,197 @@ msgstr "Kunne ikke oprette mappe."
msgid "Error starting HTTP server:"
msgstr "Error loading skrifttype."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ugyldigt navn."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Kunne ikke oprette mappe."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ugyldig Sti."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Fejler med at indlæse ressource."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Fejler med at indlæse ressource."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Du skal bruge en gyldig udvidelse."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Du skal bruge en gyldig udvidelse."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ikke fundet!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Opretter Thumbnail"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Navnet er ikke et gyldigt id:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14604,6 +14803,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14662,6 +14924,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ugyldig Sti."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Du skal bruge en gyldig udvidelse."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ugyldig skriftstørrelse."
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -15057,8 +15340,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15311,7 +15594,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 33f5042f4d..88904ba7d7 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -75,13 +75,14 @@
# Zae Chao <zaevi@live.com>, 2021.
# Tim <tim14speckenwirth@gmail.com>, 2021.
# Antonio Noack <corperateraider@gmail.com>, 2022.
+# ‎ <artism90@googlemail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: So Wieso <sowieso@dukun.de>\n"
+"PO-Revision-Date: 2022-02-16 08:44+0000\n"
+"Last-Translator: ‎ <artism90@googlemail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
"Language: de\n"
@@ -89,7 +90,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -577,8 +578,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1449,7 +1450,7 @@ msgid "Bus Options"
msgstr "Audiobusoptionen"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplizieren"
@@ -2249,8 +2250,9 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Es gibt zurzeit keine Beschreibung dieses Objekts. [color=$color][url="
-"$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!"
+"Es gibt zurzeit keine Beschreibung dieses Objekts. [color=$color]"
+"[url=$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr "
+"erwünscht!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2258,11 +2260,12 @@ msgstr "Methoden-Beschreibung"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Es gibt zurzeit keine Beschreibung dieser Methode. [color=$color][url="
-"$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr erwünscht!"
+"Es gibt zurzeit keine Beschreibung dieser Methode. [color=$color]"
+"[url=$url]Ergänzungen durch eigene Beiträge[/url][/color] sind sehr "
+"erwünscht!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3121,9 +3124,8 @@ msgid "Install Android Build Template..."
msgstr "Android-Build-Vorlage installieren..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Editordateiverzeichnis öffnen"
+msgstr "Datei-Ordner des Nutzers öffnen"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3334,7 +3336,7 @@ msgstr "Dokumentationsvorschläge senden"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr "Gemeinschaft"
+msgstr "Community"
#: editor/editor_node.cpp
msgid "About Godot"
@@ -3394,10 +3396,16 @@ msgid "Update Continuously"
msgstr "Fortlaufend aktualisieren"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Bei Änderungen aktualisieren"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materialänderungen:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Aktualisierungsanzeigerad ausblenden"
@@ -3842,9 +3850,8 @@ msgstr "Aus Node importieren:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Fehler"
+msgstr "%s Fehler"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4169,6 +4176,14 @@ msgstr "Name enthält ungültige Zeichen."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4287,7 +4302,7 @@ msgstr "Nach Bearbeitungszeit sortieren (Aktuelles zuerst)"
msgid "Sort by First Modified"
msgstr "Nach Bearbeitungszeit sortieren (Aktuelles zuletzt)"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplizieren..."
@@ -5105,6 +5120,10 @@ msgid "Rename Animation"
msgstr "Animation umbenennen"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Animation duplizieren"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Blende über in nächste Geänderte"
@@ -5117,10 +5136,6 @@ msgid "Load Animation"
msgstr "Animation laden"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Animation duplizieren"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Keine Animation zum kopieren!"
@@ -8023,7 +8038,7 @@ msgstr "IK abspielen"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr "Senkrecht"
+msgstr "Orthogonal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
@@ -9830,7 +9845,6 @@ msgid "TileSet"
msgstr "Kachelsatz"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
msgstr "Keine Versionsverwaltungserweiterungen verfügbar."
@@ -9842,53 +9856,48 @@ msgstr "Fehler"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Keine Remote-Einstellungen vorhanden. VCS-Netzwerk-Funktionen werden "
+"wahrscheinlich nicht funktionieren."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Kein Name angegeben."
+msgstr "Keine Commit-Nachricht angegeben."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Speicherpunkt"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Shader-Änderungen:"
+msgstr "Vorgemerkte Änderungen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Shader-Änderungen:"
+msgstr "Nicht vorgemerkte Änderungen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Speicherpunkt"
+msgstr "Commit:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Datum:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Unterbaum"
+msgstr "Untertitel:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Soll Zweig %s wirklich entfernt werden?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Soll wirklich ein leerer Typ erstellt werden?"
+msgstr "Soll die Remote %s wirklich entfernt werden?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Zurücksetzen durchführen"
+msgstr "Anwenden"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9899,148 +9908,132 @@ msgid "Initialize"
msgstr "Initialisieren"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Punkt entfernen"
+msgstr "Remote-Logininformationen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Umbenennen"
+msgstr "Nutzername"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Passwort"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Pfad des öffentlichen SSH-Schlüssels"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Pfad zum öffentlichen SSH-Schlüssel auswählen"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Pfad des privaten SSH-Schlüssels"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Pfad des privaten SSH-Schlüssels auswählen"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH-Passphrase"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Neue Veränderungen beachten"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Schließen und Änderungen speichern?"
+msgstr "Alle Änderungen verwerfen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Speichere lokale Änderungen..."
+msgstr "Alle Änderungen vormerken"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Materialänderungen:"
+msgstr "Alle Änderungen nicht vormerken"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Änderungen als Speicherpunkt sichern"
+msgstr "Commit-Nachricht"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Änderungen als Speicherpunkt sichern"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Speicherpunkt"
+msgstr "Commit-Liste"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Größe der Commit-Liste"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Treffer:"
+msgstr "Zweige"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Erstelle neues Projekt"
+msgstr "Neuen Zweig erstellen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Spur entfernen"
+msgstr "Zweig entfernen"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Zweigname"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Fern"
+msgstr "Remotes"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Erstelle neues Projekt"
+msgstr "Neues Remote eintragen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Entferne Element"
+msgstr "Remote entfernen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Fern "
+msgstr "Remote-Name"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Fern "
+msgstr "Remote-URL"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Fetch"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Pull"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Push"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Quell-Mesh:"
+msgstr "Force Push"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10060,22 +10053,19 @@ msgstr "Dateitypänderung"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Nicht zusammengeführt"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Ansicht"
+msgstr "Ansicht:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Pfad aufteilen"
+msgstr "Teilen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Bearbeitet"
+msgstr "Vereinheitlicht"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12299,7 +12289,7 @@ msgstr "Benutzerschnittstelle"
#: editor/scene_tree_dock.cpp
msgid "Other Node"
-msgstr "Anderes Node"
+msgstr "Anderer Node"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
@@ -12927,6 +12917,16 @@ msgstr "Occluder-Sphärenradius festlegen"
msgid "Set Occluder Sphere Position"
msgstr "Occluder-Sphärenposition festlegen"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Portal-Point-Position festlegen"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Kurvenpunktposition festlegen"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Zylinderradius ändern"
@@ -13643,38 +13643,36 @@ msgid "Edit Member"
msgstr "Mitglied bearbeiten"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Ausdruck eintragen"
+msgstr "Ausdruck"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Rückgabewert"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "Animation"
+msgstr "Bedingung"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "if (Bedingung) ist:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Während"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "while (Bedinung):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iterator"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "for (Element) in (Eingabe):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13690,79 +13688,71 @@ msgstr "Iterator wurde ungültig: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Sequenz"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Benenne Ordner um:"
+msgstr "in Reihenfolge:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Neigung:"
+msgstr "Durchwechseln"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "‚input‘ ist:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Typen:"
+msgstr "Typkonvertierung"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "Ist %s?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "auf %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Selbst"
+msgstr "Auf selbst"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "Bei Zeichen %s"
+msgstr "%s abziehen"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "%s multiplizieren"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Durch %s dividieren"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "%s hinzufügen"
+msgstr "modulo %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "%s setzen"
+msgstr "Linksshift %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "Rechtsshift %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "%s angeheftet"
+msgstr "Bitweises Und %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Bitweises Oder %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Bitweises Exklusivoder %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13787,19 +13777,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Ungültiger Indexeigenschaftsname ‚%s‘ in Node %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "%s setzen"
+msgstr "%s emittieren"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Funktionen"
+msgstr "Funktion"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Größe des Arrays ändern"
+msgstr "Array zusammenstellen"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13811,7 +13798,7 @@ msgstr ": Ungültige Parameter: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "Falls Bedingung a, ansonsten b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13822,64 +13809,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet nicht im Skript gefunden: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Neu laden"
+msgstr "Vorladen"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z-Index"
+msgstr "Index lesen"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z-Index"
+msgstr "Index schreiben"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Konstante"
+msgstr "Globale Konstante"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Konstante"
+msgstr "Klassenkonstante"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Konstante"
+msgstr "Normale Konstante"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Konstante"
+msgstr "Mathematische Konstante"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "GDNative Singleton wurde aktiviert"
+msgstr "Engine-Singleton erhalten"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Zeitsuch-Node"
+msgstr "Szenen-Node erhalten"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Szenenbaum-Bearbeitung"
+msgstr "Szenenbaum erhalten"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Selbst"
+msgstr "Selbst erhalten"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Nodes trennen"
+msgstr "Benutzerdefiniertes Node"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13896,33 +13871,28 @@ msgstr ""
"String (für Fehler) sein."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Aufrufe"
+msgstr "Unteraufruf"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Konstanten"
+msgstr "%s konstruieren"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Lokalkoordinaten verwenden"
+msgstr "Lokale Variable erhalten"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Lokalkoordinaten verwenden"
+msgstr "Lokale Variable setzen"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "Aktion"
+msgstr "Aktion %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Zerlege %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13930,40 +13900,35 @@ msgstr "VisualScript suchen"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Übergebe"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Warte"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Frame verschieben"
+msgstr "Nächster Frame"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Physik-relative Renderzeit %"
+msgstr "Nächster Physik-Frame"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s sek"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Ereignis"
+msgstr "Wartesignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Ereignis"
+msgstr "Node-Wartesignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Instanz"
+msgstr "Instanz-Wartesignal"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14334,10 +14299,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ungültiger Bezeichner:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Benötigtes Icon wurde nicht in der Vorlage festgelegt."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "HTTP Server Anhalten"
@@ -14378,16 +14339,202 @@ msgstr "Konnte HTTP-Server-Verzeichnis nicht erstellen:"
msgid "Error starting HTTP server:"
msgstr "Fehler beim Starten des HTTP-Servers:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ungültiger Projektname."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Ungültige Geometrie, Polygon kann nicht erzeugt werden."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Ordner konnte nicht erstellt werden."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ungültiger Basispfad."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Laden der Ressource gescheitert."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Laden der Ressource gescheitert."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Ungültige Dateiendung."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Ungültige Dateiendung."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Keine Symbole gefunden."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Erzeuge Miniaturansicht"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Konnte keine APK-Vorlage zum Exportieren finden:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ungültiger Bundle-Bezeichner:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Beglaubigung: Code-Signierung wird benötigt."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Beglaubigung: Abgehärtete Ausführungsumgebung wird benötigt."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Beglaubigung: Abgehärtete Ausführungsumgebung wird benötigt."
#: platform/osx/export/export.cpp
@@ -14398,6 +14545,69 @@ msgstr "Beglaubigung: Apple-ID-Name nicht angegeben."
msgid "Notarization: Apple ID password not specified."
msgstr "Beglaubigung: Apple-ID-Passwort nicht angegeben."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Ungültiger Paket-Kurzname."
@@ -14450,6 +14660,27 @@ msgstr "Ungültige Abmessungen für 310x150-Breitlogo (sollte 310x150 sein)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ungültige Abmessungen für Startbildschirm (sollte 620x300 sein)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ungültiger Pfad."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Ungültige Dateiendung."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ungültige Produkt-GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14484,8 +14715,8 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D liefert nur eine Kollisionsform für ein von "
-"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, "
+"CollisionPolygon2D liefert nur eine Kollisionsform für einen von "
+"CollisionObject2D abgeleiteten Node. Es kann nur als Unterobjekt von Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden, um diesen "
"eine Form zu geben."
@@ -14511,8 +14742,8 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D liefert nur eine Kollisionsform für ein von "
-"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, "
+"CollisionShape2D liefert nur eine Kollisionsform für einen von "
+"CollisionObject2D abgeleiteten Node. Es kann nur als Unterobjekt von Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden, um diesen "
"eine Form zu geben."
@@ -14620,15 +14851,14 @@ msgstr ""
"ParallaxBackground-Node verwenden."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
"GPU-basierte Partikel werden vom GLES2-Grafiktreiber nicht unterstützt.\n"
-"Stattdessen bitte CPUParticles2D-Nodes verwenden. Die „In CPU-Partikel "
-"konvertieren“-Funktion kann dazu verwendet werden."
+"Stattdessen bitte CPUParticles2D-Nodes verwenden. Die Funktion „Zu "
+"CPUParticles2D konvertieren“ der Werkzeugleiste kann dazu verwendet werden."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14638,6 +14868,12 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"Unter MacOS ist das Rendern von Particles2Ds wesentlich langsamer als "
+"CPUParticles2Ds, da die Transforms über die CPU statt über die GPU "
+"abgewickelt werden.\n"
+"Für MacOS als Zielplattform werden CPUParticles2D empfohlen.\n"
+"Die Option „Zu CPUParticles2D konvertieren“ der Werkzeugleiste kann dafür "
+"verwendet werden."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14675,7 +14911,7 @@ msgstr ""
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-"Die Pfad-Eigenschaft muss auf ein gültiges Node2D-Node zeigen um zu "
+"Die Pfad-Eigenschaft muss auf ein gültiges Node2D-Node zeigen, um zu "
"funktionieren."
#: scene/2d/skeleton_2d.cpp
@@ -14704,7 +14940,7 @@ msgstr ""
"Eine TileMap mit aktivierter „Use Parent“-Option benötigt ein Eltern-Node "
"des Typs CollisionObject2D, welcher der TileMap eine Form verleiht. Sie "
"sollte als Unterobjekt von Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D, usw. verwendet werden, um ihnen eine Form zu geben."
+"KinematicBody2D, usw. verwendet werden, um diesen eine Form zu geben."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -14901,15 +15137,14 @@ msgid "Only uniform scales are supported."
msgstr "Es werden nur gleichförmige Skalierungen unterstützt."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPU-basierte Partikel werden vom GLES2-Grafiktreiber nicht unterstützt.\n"
-"Stattdessen bitte CPUParticles-Nodes verwenden. Die „In CPU-Partikel "
-"konvertieren“-Funktion kann dazu verwendet werden."
+"Stattdessen bitte CPUParticles-Nodes verwenden. Die Funktion „Zu "
+"CPUParticles konvertieren“ der Werkzeugleiste kann dazu verwendet werden."
#: scene/3d/particles.cpp
msgid ""
@@ -14918,6 +15153,12 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"Unter MacOS ist das Rendern von Particles wesentlich langsamer als "
+"CPUParticles, da die Transforms über die CPU statt über die GPU abgewickelt "
+"werden.\n"
+"Für MacOS als Zielplattform werden CPUParticles empfohlen.\n"
+"Die Option „Zu CPUParticles konvertieren“ der Werkzeugleiste kann dafür "
+"verwendet werden."
#: scene/3d/particles.cpp
msgid ""
@@ -15075,7 +15316,7 @@ msgid ""
"Check the portal is facing outwards from the source room."
msgstr ""
"Portal-Autolink fehlgeschlagen, siehe Log-Ausgabe für Details.\n"
-"Zeigt das Portal nach außen vom Quellraum ausgesehen?"
+"Portal muss vom Quellraum nach außen zeigen."
#: scene/3d/room_manager.cpp
msgid ""
@@ -15202,9 +15443,10 @@ msgstr ""
"AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Farbe: #%s\n"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index e41400290d..f9d1c47b88 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -491,8 +491,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1326,7 +1326,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2099,8 +2099,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3125,7 +3125,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3849,6 +3853,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3961,7 +3973,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4747,19 +4759,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12186,6 +12198,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13477,10 +13497,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13521,16 +13537,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13541,6 +13727,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13593,6 +13842,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13943,8 +14210,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14184,7 +14451,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/el.po b/editor/translations/el.po
index b24b443b09..d3cbb4b072 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -13,13 +13,15 @@
# Michalis <michalisntovas@yahoo.gr>, 2021.
# leriaz <leriaz@live.com>, 2021.
# Shadofer <shadowrlrs@gmail.com>, 2021.
+# thealexanton <greektechmania@gmail.com>, 2022.
+# Παναγιώτης Παπαηλίου <pan.papail@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-09 14:32+0000\n"
-"Last-Translator: Shadofer <shadowrlrs@gmail.com>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: Παναγιώτης Παπαηλίου <pan.papail@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/"
"el/>\n"
"Language: el\n"
@@ -27,7 +29,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -402,7 +404,7 @@ msgstr "Ένα AnimationPlayer δεν μποÏεί να κινήσει τον ε
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "property '%s'"
-msgstr "Η ιδιότητα '%s' δεν υπάÏχει."
+msgstr "Η ιδιότητα '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -523,8 +525,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -993,7 +995,7 @@ msgstr "Κανένα αποτέλεσμα για \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Δεν υπάÏχει διαθέσιμη πεÏιγÏαφή για %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1297,6 +1299,8 @@ msgstr "%s (ΥπάÏχει ήδη)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
+"Τα πεÏιεχόμενα του πόÏου \"%s\" - %d αÏχείο(α) έÏχονται σε αντίθεση με το "
+"έÏγο σου:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
@@ -1401,7 +1405,7 @@ msgid "Bus Options"
msgstr "Επιλογές διαÏλου"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ΑναπαÏαγωγή"
@@ -1513,7 +1517,7 @@ msgstr "Μη έγκυÏο όνομα."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Δεν μποÏείς να ξεκινήσεις με ψηφίο."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2214,8 +2218,8 @@ msgstr "ΠεÏιγÏαφές μεθόδων"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Δεν υπάÏχει ακόμη πεÏιγÏαφή για αυτήν την μέθοδο. ΠαÏακαλοÏμε βοηθήστε μας "
"[color=$color][url=$url]γÏάφοντας μία[/url][/color]!"
@@ -2909,7 +2913,7 @@ msgstr "ΔιαγÏαφή διάταξης"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "ΠÏοεπιλογή"
+msgstr "ΠÏοεπιλεγμένο"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
@@ -3349,10 +3353,16 @@ msgid "Update Continuously"
msgstr "Συνεχόμενη Ανανέωση"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Ανανέωση στην Αλλαγή"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Αλλαγές υλικοÏ"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "ΑπόκÏυψη Δείκτη ΕνημέÏωσης"
@@ -4149,6 +4159,14 @@ msgstr "Το όνομα πεÏιέχει άκυÏους χαÏακτήÏες."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4156,8 +4174,8 @@ msgid ""
"\n"
"Do you wish to overwrite them?"
msgstr ""
-"Τα ακόλουθα αÏχεία ή φάκελοι συγκÏοÏονται με στοιχεία στον Ï€ÏοοÏισμό \"%s"
-"\":\n"
+"Τα ακόλουθα αÏχεία ή φάκελοι συγκÏοÏονται με στοιχεία στον Ï€ÏοοÏισμό "
+"\"%s\":\n"
"\n"
"%s\n"
"\n"
@@ -4270,7 +4288,7 @@ msgstr "Τελευταία ΤÏοποποιημένα"
msgid "Sort by First Modified"
msgstr "Τελευταία ΤÏοποποιημένα"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "ΑναπαÏαγωγή..."
@@ -5090,6 +5108,10 @@ msgid "Rename Animation"
msgstr "Μετονομασία κίνησης"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "ΑναπαÏαγωγή κίνησης"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Το επόμενο στην μείξη κίνησης άλλαξε"
@@ -5102,10 +5124,6 @@ msgid "Load Animation"
msgstr "ΦόÏτωση κίνησης"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "ΑναπαÏαγωγή κίνησης"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Καμία κίνηση για αντÏιγÏαφή!"
@@ -13042,6 +13060,16 @@ msgstr "Αλλαγή Ακτίνας Σχήματος ΚυλίνδÏου"
msgid "Set Occluder Sphere Position"
msgstr "ΟÏισμός θέσης εισόδου καμπÏλης"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "ΟÏισμός θέσης σημείου καμπÏλης"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "ΟÏισμός θέσης σημείου καμπÏλης"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Αλλαγή Ακτίνας ΚυλίνδÏου"
@@ -14464,10 +14492,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "ΆκυÏο ΑναγνωÏιστικό:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Το απαιτοÏμενο εικονίδιο δεν έχει καθοÏιστεί στην διαμόÏφωση."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "ΤεÏματισμός Διακομιστή HTTP"
@@ -14512,17 +14536,198 @@ msgstr "ΑδÏνατη η δημιουÏγία φακέλου."
msgid "Error starting HTTP server:"
msgstr "Σφάλμα κατά την αποθήκευση σκηνής."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "ΆκυÏο όνομα έÏγου."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "ΆκυÏη γεωμετÏία, αδÏνατη η δημιουÏγία πολυγώνου."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "ΑδÏνατη η δημιουÏγία φακέλου."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "ΆκυÏη βασική διαδÏομή."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Απέτυχε η φόÏτωση πόÏου."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Απέτυχε η φόÏτωση πόÏου."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "ΆκυÏη επέκταση."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "ΆκυÏη επέκταση."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Δεν βÏέθηκε!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "ΔημιουÏγία μικÏογÏαφίας"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "ΆκυÏο ΑναγνωÏιστικό:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14533,6 +14738,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "ΆκυÏο σÏντομο όνομα πακέτου."
@@ -14585,6 +14853,27 @@ msgstr "ΆκυÏη εικόνα ευÏÏ Î»Î¿Î³ÏŒÏ„Ï…Ï€Î¿Ï… 310x150 (Ï€ÏέπεÎ
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "ΆκυÏες διαστάσεις εικόνας οθόνης εκκίνησης (Ï€Ïέπει να είναι 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "ΆκυÏη διαδÏομή."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "ΆκυÏη επέκταση."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "ΆκυÏο GUID Ï€Ïοϊόντος."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -15025,8 +15314,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Τα σωματίδια GPU δεν υποστηÏίζονται από τον οδηγό βίντεο GLES2.\n"
"ΧÏησιμοποιήστε τον κόμβο CPUParticles. ΜποÏείτε να χÏησιμοποιήσετε την "
@@ -15292,9 +15581,10 @@ msgstr ""
"Αυτός ο κόμβος έχει καταÏγηθεί. ΧÏησιμοποιήστε το AnimationTree αντ 'αυτοÏ."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"ΧÏώμα: #%s\n"
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 0049194bfe..1a95fb6702 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -512,8 +512,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1378,7 +1378,7 @@ msgid "Bus Options"
msgstr "Agordoj de buso"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duobligi"
@@ -2171,8 +2171,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Estas aktuale ne priskribo por ĉi tiu atributo. Bonvolu helpi nin per [color="
-"$color][url=$url]kontribui unu[/url][/color]!"
+"Estas aktuale ne priskribo por ĉi tiu atributo. Bonvolu helpi nin per "
+"[color=$color][url=$url]kontribui unu[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2180,11 +2180,11 @@ msgstr "Metodaj priskriboj"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Estas aktuale ne priskribo por ĉi tiu metodo. Bonvolu helpi nin per [color="
-"$color][url=$url]kontribui unu[/url][/color]!"
+"Estas aktuale ne priskribo por ĉi tiu metodo. Bonvolu helpi nin per "
+"[color=$color][url=$url]kontribui unu[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3300,10 +3300,15 @@ msgstr "Äœisdatigi kontinue"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Äœisdatigi kiam ÅanÄitis"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Parametro ÅanÄiÄis"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "KaÅi la Äisdatan indikilon"
@@ -4087,6 +4092,14 @@ msgstr "Nomo enhavas malvalidajn signojn."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4208,7 +4221,7 @@ msgstr "Lastaj modifitaj"
msgid "Sort by First Modified"
msgstr "Lastaj modifitaj"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duobligi..."
@@ -5026,6 +5039,10 @@ msgid "Rename Animation"
msgstr "Renomi animaĵon"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplikati animacion"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Mikso sekvo ÅanÄiÄis"
@@ -5038,10 +5055,6 @@ msgid "Load Animation"
msgstr "Åœargi animacion"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplikati animacion"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ne animacio por kopii!"
@@ -12731,6 +12744,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Krei okludan plurlateron"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Krei okludan plurlateron"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Krei okludan plurlateron"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14086,10 +14109,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14134,16 +14153,195 @@ msgstr "Ne povis krei dosierujon."
msgid "Error starting HTTP server:"
msgstr "Eraras konservi TileSet!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nevalida nomo de projekto."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Ne povis krei dosierujon."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Malvalida baza dosierindiko."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Ne eblas Åargi risurcon."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Ne eblas Åargi risurcon."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Nevalida kromprogramo."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Nevalida kromprogramo."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ne sub-risurcojn trovis."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Kreas bildeton"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14154,6 +14352,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14207,6 +14468,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Nevalida dosierindiko."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Nevalida kromprogramo."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nevalida nomo de projekto."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14557,8 +14839,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14798,7 +15080,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/es.po b/editor/translations/es.po
index 058549cbd4..d4f2364598 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -14,7 +14,7 @@
# Diego López <diegodario21@gmail.com>, 2017.
# eon-s <emanuel.segretin@gmail.com>, 2018, 2019, 2020.
# Gustavo Leon <gleondiaz@gmail.com>, 2017-2018.
-# Javier Ocampos <xavier.ocampos@gmail.com>, 2018, 2019, 2020, 2021.
+# Javier Ocampos <xavier.ocampos@gmail.com>, 2018, 2019, 2020, 2021, 2022.
# Jose Maria Martinez <josemar1992@hotmail.com>, 2018.
# Juan Quiroga <juanquiroga9@gmail.com>, 2017.
# Kiji Pixel <raccoon.fella@gmail.com>, 2017.
@@ -78,8 +78,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: Alfonso V <alfonsov96@gmail.com>\n"
+"PO-Revision-Date: 2022-01-16 13:19+0000\n"
+"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -392,9 +392,8 @@ msgid "Duplicate Key(s)"
msgstr "Duplicar Clave(s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Añadir %d Fotograma(s)"
+msgstr "Añadir Valor(es) de RESET"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -570,9 +569,8 @@ msgstr ""
"única."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Escalar Claves de Animación"
+msgstr "Añadir Claves de Animación de RESET"
#: editor/animation_track_editor.cpp
msgid ""
@@ -581,8 +579,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -591,8 +589,8 @@ msgstr ""
"\n"
"Para habilitar la capacidad de añadir pistas personalizadas, ve a la "
"configuración de importación de la escena y establece\n"
-"\"Animation > Storage\" a \"Files\", activa \"Animation > Keep Custom Tracks"
-"\", y luego reimporta.\n"
+"\"Animation > Storage\" a \"Files\", activa \"Animation > Keep Custom "
+"Tracks\", y luego reimporta.\n"
"También puedes usar un preset de importación que importa animaciones para "
"separar archivos."
@@ -1449,7 +1447,7 @@ msgid "Bus Options"
msgstr "Opciones de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -1561,7 +1559,7 @@ msgstr "Nombre inválido."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "No puede comenzar con un dígito."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2177,11 +2175,11 @@ msgstr "Clase:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr "Hereda de:"
+msgstr "Herencia:"
#: editor/editor_help.cpp
msgid "Inherited by:"
-msgstr "Heredada por:"
+msgstr "Heredado de:"
#: editor/editor_help.cpp
msgid "Description"
@@ -2196,9 +2194,8 @@ msgid "Properties"
msgstr "Propiedades"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "anulación:"
+msgstr "anula %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2258,8 +2255,8 @@ msgstr "Descripciones de Métodos"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Actualmente no existe descripción para este método. Por favor ¡ayúdanos con "
"[color=$color][url=$url] contribuyendo con una[ /url][/color]!"
@@ -2338,18 +2335,17 @@ msgid "Property:"
msgstr "Propiedad:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(valor)"
+msgstr "Valor de fijación"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
-msgstr ""
+msgstr "Fijar un valor obliga a guardarlo aunque sea igual al predeterminado."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Valor de fijación [Desactivado porque '%s' es solo para el editor]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2364,26 +2360,23 @@ msgstr "Asignar Múltiples:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "Fijado %s"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "Desfijado %s"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Copiar Propiedades"
+msgstr "Copiar Propiedad"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Pegar Propiedades"
+msgstr "Pegar Propiedad"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Copiar Ruta del Script"
+msgstr "Copiar Ruta de Propiedad"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2951,7 +2944,6 @@ msgstr "Eliminar Layout"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Default"
msgstr "Por defecto"
@@ -3120,9 +3112,8 @@ msgid "Install Android Build Template..."
msgstr "Instalar plantilla de compilación de Android..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Abrir Carpeta de Editor de Datos"
+msgstr "Abrir Carpeta de Datos del Usuario"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3211,7 +3202,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr ""
+msgstr "Forzar Shader Fallbacks"
#: editor/editor_node.cpp
msgid ""
@@ -3222,6 +3213,13 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Cuando esta opción está activada, los shaders se utilizarán en su forma de "
+"fallback (ya sea visible a través de un ubershader u oculto) durante todo el "
+"tiempo de ejecución.\n"
+"Esto es útil para verificar el aspecto y el rendimiento de los fallbacks, "
+"que normalmente se muestran brevemente.\n"
+"La compilación asíncrona de los shaders debe estar activada en la "
+"configuración del proyecto para que esta opción suponga una diferencia."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3387,10 +3385,16 @@ msgid "Update Continuously"
msgstr "Actualizar Continuamente"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Actualizar Al Cambiar"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Cambios del Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ocultar Spinner de Actualización"
@@ -3838,9 +3842,8 @@ msgstr "Importar Desde Nodo:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Error"
+msgstr "Error %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4170,6 +4173,14 @@ msgstr "El nombre contiene caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4288,7 +4299,7 @@ msgstr "Ordenar por Última Modificación"
msgid "Sort by First Modified"
msgstr "Ordenar por Primera Modificación"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicar..."
@@ -4389,9 +4400,8 @@ msgid "Replace..."
msgstr "Reemplazar..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "Reemplazar Todo"
+msgstr "Reemplazar en Archivos"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4402,9 +4412,8 @@ msgid "Replace: "
msgstr "Reemplazar: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "Reemplazar Todo"
+msgstr "Reemplazar Todo (NO SE PUEDE DESHACER)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4630,6 +4639,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"Selecciona un archivo de recursos en el sistema de archivos o en el "
+"inspector para ajustar la configuración de importación."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5104,6 +5115,10 @@ msgid "Rename Animation"
msgstr "Renombrar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Mezclar el Siguiente Cambio"
@@ -5116,10 +5131,6 @@ msgid "Load Animation"
msgstr "Cargar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicar Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "¡No hay animaciones para copiar!"
@@ -6101,9 +6112,8 @@ msgid "Alt+Drag: Move selected node."
msgstr "Alt+Arrastrar: Mover el nodo seleccionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+Arrastrar: Mover el nodo seleccionado."
+msgstr "Alt+Arrastrar: Escala el nodo seleccionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
@@ -6137,7 +6147,7 @@ msgstr "Modo de Escalado"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Shift: Scale proportionally."
-msgstr ""
+msgstr "Shift: Escala proporcional."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6237,9 +6247,8 @@ msgstr "Bloquear el objeto seleccionado en su sitio (no se puede mover)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Bloqueo Seleccionado"
+msgstr "Bloquear Nodo(s) Seleccionado(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6248,9 +6257,8 @@ msgstr "Desbloquear el objeto seleccionado (puede ser movido)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Desbloquear Seleccionado"
+msgstr "Desbloquear Nodo(s) Seleccionado(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6259,9 +6267,8 @@ msgstr "Asegura que los hijos del objeto no sean seleccionables."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Agrupar Seleccionados"
+msgstr "Grupo Nodo(s) Seleccionado(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6270,9 +6277,8 @@ msgstr "Restaura la capacidad de selección de los hijos del objeto."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Desagrupar Seleccionados"
+msgstr "Desagrupar Nodo(s) Seleccionado(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -6569,11 +6575,11 @@ msgstr "Crear Puntos de Emisión Desde el Nodo"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 0"
-msgstr "Flat 0"
+msgstr "Plano 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "Flat 1"
+msgstr "Plano 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -7827,7 +7833,7 @@ msgstr "Seleccionar Color"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Convert Case"
-msgstr "Convertir Mayúsculas"
+msgstr "Convertir Mayúsculas/Minúsculas"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Uppercase"
@@ -7926,9 +7932,8 @@ msgid "Find in Files..."
msgstr "Buscar en Archivos..."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "Reemplazar..."
+msgstr "Reemplazar en Archivos..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -8091,7 +8096,7 @@ msgstr " [auto]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [portals active]"
-msgstr " [portals active]"
+msgstr " [portales activos]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -8456,16 +8461,15 @@ msgstr "Act./Desact. Vista Libre"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "Disminuir el Campo de Visión"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Incrementar el Campo de Visión"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "Restablecer Valores por Defecto"
+msgstr "Restablecer el Campo de Visión por Defecto"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -9195,22 +9199,19 @@ msgstr "Añadir Tipo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "Filtra la lista de tipos o crea un nuevo tipo personalizado:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "Perfiles Disponibles:"
+msgstr "Tipos disponibles basados en nodos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "El nombre del archivo está vacío."
+msgstr "¡El nombre del tipo está vacío!"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Are you sure you want to create an empty type?"
-msgstr "¿Seguro que quieres abrir más de un proyecto?"
+msgstr "¿Estás seguro de que quieres crear un tipo vacío?"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Confirm Item Rename"
@@ -9834,9 +9835,8 @@ msgid "TileSet"
msgstr "TileSet"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "No hay addons de VCS disponibles."
+msgstr "No hay plugins VCS disponibles."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9846,53 +9846,48 @@ msgstr "Error"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"La configuración remota está vacía. Las funciones de VCS que utilizan la red "
+"pueden no funcionar."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Nombre no proporcionado."
+msgstr "No se proporcionó ningún mensaje de confirmación."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Confirmar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Cambios de sombreado:"
+msgstr "Cambios Progresivos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Cambios de sombreado:"
+msgstr "Cambios Indeterminados"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Confirmar"
+msgstr "Commit:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Fecha:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Subárbol"
+msgstr "Subtítulo:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "¿Quieres eliminar la rama %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "¿Seguro que quieres abrir más de un proyecto?"
+msgstr "¿Quieres eliminar el %s remoto?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Aplicar Restablecer"
+msgstr "Aplicar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9903,148 +9898,132 @@ msgid "Initialize"
msgstr "Inicializar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Eliminar Punto"
+msgstr "Inicio de Sesión Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Renombrar"
+msgstr "Nombre de usuario"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Contraseña"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Ruta de la clave pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Selecciona la ruta de la clave pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Ruta de la Clave Privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Selecciona la ruta de la clave privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Contraseña SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Detectar nuevos cambios"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "¿Cerrar y guardar cambios?"
+msgstr "Descartar todos los cambios"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Guardando cambios locales..."
+msgstr "Realizar todos los cambios"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Cambios del Material:"
+msgstr "Anular todos los cambios"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Confirmar Cambios"
+msgstr "Mensaje de Confirmación"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Confirmar Cambios"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Confirmar"
+msgstr "Lista de Confirmación"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Tamaño de la lista de confirmación"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Coincidencias:"
+msgstr "Ramas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Crear Nuevo Proyecto"
+msgstr "Crear Nueva Rama"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Eliminar Pista de Animación"
+msgstr "Eliminar Rama"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Nombre de la Rama"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Remoto"
+msgstr "Remotos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Crear Nuevo Proyecto"
+msgstr "Crear un Nuevo Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Eliminar Elemento"
+msgstr "Eliminar Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Remoto "
+msgstr "Nombre Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Remoto "
+msgstr "URL Remota"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Buscar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Pull"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Push"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Malla de Origen:"
+msgstr "Forzar Push"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10064,22 +10043,19 @@ msgstr "Cambio de Tipo"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Sin fusionar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Ver"
+msgstr "Ver:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Dividir Ruta"
+msgstr "Dividir"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Modificado/s"
+msgstr "Unificado"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -11162,8 +11138,8 @@ msgstr "Error al abrir el archivo del paquete (no está en formato ZIP)."
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
msgstr ""
-"Archivo de proyecto \".zip\" inválido; no contiene un archivo \"project.godot"
-"\"."
+"Archivo de proyecto \".zip\" inválido; no contiene un archivo \"project."
+"godot\"."
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
@@ -12237,6 +12213,10 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"No se puede guardar una rama que es hija de una escena ya instanciada.\n"
+"Para guardar esta rama en su propia escena, abre la escena original, haz "
+"clic con el botón derecho del ratón en esta rama y selecciona \"Guardar Rama "
+"como Escena\"."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12244,6 +12224,10 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"No se puede guardar una rama que forma parte de una escena heredada.\n"
+"Para guardar esta rama en la propia escena, abre la escena original, haz "
+"clic con el botón derecho en esta rama y selecciona \"Guardar Rama como "
+"Escena\"."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12920,6 +12904,16 @@ msgstr "Establecer Radio de la Esfera de Oclusión"
msgid "Set Occluder Sphere Position"
msgstr "Establecer Posición de la Esfera de Oclusión"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Establecer Posición del Portal Point"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Establecer Posición de Punto de Curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Cambiar Radio de Cylinder"
@@ -13637,38 +13631,36 @@ msgid "Edit Member"
msgstr "Editar Miembro"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Establecer expresión"
+msgstr "Expresión"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Regresar"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animación"
+msgstr "Condición"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "if (cond) is:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "While"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "while (cond):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iterador"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "for (elem) in (input):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13684,79 +13676,71 @@ msgstr "El iterador ya no es correcto: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Secuencia"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Renombrar carpeta:"
+msgstr "en orden:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Eje de paso:"
+msgstr "Cambiar"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "'entrada' es:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Tipos:"
+msgstr "Tipo de Proyección"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "¿Es %s?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "En %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Propio"
+msgstr "Sobre Sí Mismo"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "En el carácter %s"
+msgstr "Restar %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Multiplicar %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Dividir %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Añadir %s"
+msgstr "Mod %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Establecer %s"
+msgstr "ShiftLeft %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "ShiftRight %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Añadir %s"
+msgstr "BitAnd %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "BitOr %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "BitXor %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13781,19 +13765,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Ãndice inválido de nombre de propiedad '%s' en el nodo %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Establecer %s"
+msgstr "Emitir %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Funciones"
+msgstr "Función"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Redimensionar Array"
+msgstr "Ordenar Array"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13805,7 +13786,7 @@ msgstr ": Argumentos incorrectos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a si cond, sino b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13816,64 +13797,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet no encontrado en el script: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Recargar"
+msgstr "Precarga"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Ãndice Z"
+msgstr "Obtener Ãndice"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Ãndice Z"
+msgstr "Establecer Ãndice"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Constante"
+msgstr "Constante Global"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Constante"
+msgstr "Constante de Clase"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Constante"
+msgstr "Constante Básica"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Constante"
+msgstr "Constante Matemática"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "Activar Singleton GDNative"
+msgstr "Obtener Engine Singleton"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Nodo TimeSeek"
+msgstr "Obtener Nodo de Escena"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Editor del Ãrbol de Escenas"
+msgstr "Obtener Ãrbol de Escenas"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Propio"
+msgstr "Obtener Propio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Cortar Nodos"
+msgstr "CustomNode"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13890,33 +13859,28 @@ msgstr ""
"o string/cadena (error)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Llamadas"
+msgstr "SubCall"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Constantes"
+msgstr "Construir %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Usar Espacio Local"
+msgstr "Obtener Var local"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Usar Espacio Local"
+msgstr "Establecer Var Local"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "Acción"
+msgstr "Acción %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Deconstruir %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13924,40 +13888,35 @@ msgstr "Buscar en VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Yield"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Wait"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Mover Fotograma"
+msgstr "Siguiente Fotograma"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Fotogramas de Física %"
+msgstr "Siguiente Fotograma de Física"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s seg(s)"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Señal"
+msgstr "WaitSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Señal"
+msgstr "WaitNodeSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Instanciar"
+msgstr "WaitInstanceSignal"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14118,8 +14077,8 @@ msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" "
"or \"OpenXR\"."
msgstr ""
-"\"Hand Tracking\" solo es válido cuando \"Xr Mode\" es \"Oculus Mobile VrApi"
-"\" u \"OpenXR\"."
+"\"Hand Tracking\" solo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
+"VrApi\" u \"OpenXR\"."
#: platform/android/export/export_plugin.cpp
msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"."
@@ -14331,10 +14290,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificador inválido:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "El icono requerido no está especificado en el preset."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Detener Servidor HTTP"
@@ -14375,16 +14330,202 @@ msgstr "No se pudo crear el directorio del servidor HTTP:"
msgid "Error starting HTTP server:"
msgstr "Error al iniciar el servidor HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nombre de Proyecto Inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometría inválida, no es posible crear un polígono."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "No se pudo crear la carpeta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ruta base incorrecta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Error al cargar el recurso."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Error al cargar el recurso."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "No se han encontrado icons."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creando Miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"No se pudo encontrar la plantilla APK para exportar:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de paquete no válido:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarización: se requiere firma de código."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarización: se requiere tiempo de ejecución reforzado."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarización: se requiere tiempo de ejecución reforzado."
#: platform/osx/export/export.cpp
@@ -14395,6 +14536,69 @@ msgstr "Notarización: nombre de ID de Apple no especificado."
msgid "Notarization: Apple ID password not specified."
msgstr "Notarización: contraseña de ID de Apple no especificada."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nombre corto del paquete inválido."
@@ -14460,13 +14664,34 @@ msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
"Las dimensiones de la imagen del splash son inválidas (debería ser 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ruta inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extensión inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID de producto inválido."
+
#: 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 ""
-"Se debe crear o establecer un recurso SpriteFrames en la propiedad \"Frames"
-"\" para que AnimatedSprite pueda mostrar los fotogramas."
+"Se debe crear o establecer un recurso SpriteFrames en la propiedad "
+"\"Frames\" para que AnimatedSprite pueda mostrar los fotogramas."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14593,13 +14818,15 @@ msgstr ""
#: scene/2d/navigation_agent_2d.cpp
msgid "The NavigationAgent2D can be used only under a Node2D node."
-msgstr ""
+msgstr "El NavigationAgent2D sólo puede utilizarse bajo un nodo Node2D."
#: scene/2d/navigation_obstacle_2d.cpp
msgid ""
"The NavigationObstacle2D only serves to provide collision avoidance to a "
"Node2D object."
msgstr ""
+"El NavigationObstacle2D sólo sirve para evitar la colisión de un objeto "
+"Node2D."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14625,16 +14852,15 @@ msgstr ""
"nodo ParallaxBackground."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
-"Las partículas basadas en la GPU no son compatibles con el controlador de "
-"vídeo GLES2.\n"
-"En su lugar, utiliza el nodo CPUParticles2D. Para ello puedes utilizar la "
-"opción \"Convertir a CPUParticles\"."
+"Las partículas basadas en la GPU no son soportadas por el controlador de "
+"video GLES2.\n"
+"Utiliza el nodo CPUParticles2D en su lugar. Puedes usar la opción de la "
+"barra de herramientas \"Convertir a CPUParticles2D\" para este propósito."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14644,6 +14870,12 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"En macOS, el renderizado de Particles2D es mucho más lento que el de "
+"CPUParticles2D debido a que la retroalimentación de las transformaciones se "
+"implementa en la CPU en lugar de la GPU.\n"
+"Considera usar CPUParticles2D en su lugar cuando te dirijas a macOS.\n"
+"Puedes usar la opción de la barra de herramientas \"Convertir a "
+"CPUParticles2D\" para este propósito."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14872,7 +15104,7 @@ msgstr ""
#: scene/3d/navigation_agent.cpp
msgid "The NavigationAgent can be used only under a spatial node."
-msgstr ""
+msgstr "El NavigationAgent sólo puede utilizarse bajo un nodo spatial."
#: scene/3d/navigation_mesh_instance.cpp
msgid ""
@@ -14887,6 +15119,8 @@ msgid ""
"The NavigationObstacle only serves to provide collision avoidance to a "
"spatial object."
msgstr ""
+"El NavigationObstacle sólo sirve para evitar la colisión de un objeto "
+"spatial."
#: scene/3d/occluder.cpp
msgid "No shape is set."
@@ -14897,16 +15131,15 @@ msgid "Only uniform scales are supported."
msgstr "Sólo se admiten escalas uniformes."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
-"Las partículas basadas en la GPU no son compatibles con el controlador de "
-"vídeo GLES2.\n"
-"En su lugar, utiliza el nodo CPUParticles. Para ello puedes utilizar la "
-"opción \"Convertir a CPUParticles\"."
+"Las partículas basadas en la GPU no son soportadas por el controlador de "
+"video GLES2.\n"
+"Utiliza el nodo CPUParticles en su lugar. Puedes usar la opción de la barra "
+"de herramientas \"Convertir a CPUParticles\" para este propósito."
#: scene/3d/particles.cpp
msgid ""
@@ -14915,6 +15148,12 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"En macOS, el renderizado de Particles es mucho más lento que el de "
+"CPUParticles debido a que la retroalimentación de las transformaciones se "
+"implementa en la CPU en lugar de la GPU.\n"
+"Considera usar CPUParticles en su lugar cuando te dirijas a macOS.\n"
+"Puedes usar la opción de la barra de herramientas \"Convertir a "
+"CPUParticles\" para este propósito."
#: scene/3d/particles.cpp
msgid ""
@@ -15108,8 +15347,8 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Se debe crear o establecer un recurso SpriteFrames en la propiedad \"Frames"
-"\" para que AnimatedSprite3D pueda mostrar los fotogramas."
+"Se debe crear o establecer un recurso SpriteFrames en la propiedad "
+"\"Frames\" para que AnimatedSprite3D pueda mostrar los fotogramas."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -15190,9 +15429,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Este nodo ha quedado obsoleto. Usa AnimationTree en su lugar."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Color: #%s\n"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index b7dd76951e..25d0908e26 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -524,8 +524,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -534,8 +534,8 @@ msgstr ""
"\n"
"Para habilitar la capacidad de añadir pistas personalizadas, andá a la "
"configuración de importación de la escena y establece\n"
-"\"Animation > Storage\" a \"Files\", activa \"Animation > Keep Custom Tracks"
-"\", y luego reimportá.\n"
+"\"Animation > Storage\" a \"Files\", activa \"Animation > Keep Custom "
+"Tracks\", y luego reimportá.\n"
"También podés usar un preset de importación que importa animaciones a "
"archivos separados."
@@ -1393,7 +1393,7 @@ msgid "Bus Options"
msgstr "Opciones de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2199,8 +2199,8 @@ msgstr "Descripción de Método"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Actualmente no existe descripción para este método. Por favor ayúdanos "
"[color=$color][url=$url]contribuyendo una[/url][/color]!"
@@ -3326,10 +3326,16 @@ msgid "Update Continuously"
msgstr "Actualizar Continuamente"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Actualizar Al Cambiar"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Cambios de Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ocultar Spinner de Actualización"
@@ -4109,6 +4115,14 @@ msgstr "El nombre indicado contiene caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4227,7 +4241,7 @@ msgstr "Ordenar por Ultima Modificación"
msgid "Sort by First Modified"
msgstr "Ordenar por Primera Modificación"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicar..."
@@ -5043,6 +5057,10 @@ msgid "Rename Animation"
msgstr "Renombrar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Blendear Próximo Cambiado"
@@ -5055,10 +5073,6 @@ msgid "Load Animation"
msgstr "Cargar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicar Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "No hay animaciones para copiar!"
@@ -11094,8 +11108,8 @@ msgstr "Error al abrir el archivo de paquete (no esta en formato ZIP)."
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
msgstr ""
-"Archivo de projecto \".zip\" inválido; no contiene un archivo \"project.godot"
-"\"."
+"Archivo de projecto \".zip\" inválido; no contiene un archivo \"project."
+"godot\"."
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
@@ -12854,6 +12868,16 @@ msgstr "Establecer Radio de la Esfera de Oclusión"
msgid "Set Occluder Sphere Position"
msgstr "Establecer Posición de la Esfera de Oclusión"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Establecer Posición del Portal Point"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Setear Posición de Punto de Curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Cambiar Radio de Cilindro"
@@ -14044,8 +14068,8 @@ msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" "
"or \"OpenXR\"."
msgstr ""
-"\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile VrApi"
-"\" o \"OpenXR\"."
+"\"Hand Tracking\" sólo es válido cuando \"Xr Mode\" es \"Oculus Mobile "
+"VrApi\" o \"OpenXR\"."
#: platform/android/export/export_plugin.cpp
msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"."
@@ -14074,8 +14098,8 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
-"La versión de \"Target Sdk\" debe ser mayor o igual a la versión de \"Min Sdk"
-"\"."
+"La versión de \"Target Sdk\" debe ser mayor o igual a la versión de \"Min "
+"Sdk\"."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -14258,10 +14282,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificador inválido:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "El icono requerido no esta especificado en el preset."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Detener Servidor HTTP"
@@ -14302,16 +14322,202 @@ msgstr "No se pudo crear el directorio del servidor HTTP:"
msgid "Error starting HTTP server:"
msgstr "Error al iniciar el servidor HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nombre de proyecto Inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometría inválida, no es posible crear un polígono."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "No se pudo crear la carpeta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ruta base inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Fallo al cargar recurso."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Fallo al cargar recurso."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "No se encontraron íconos."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creando Miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"No se pudo encontrar la plantilla APK para exportar:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de paquete no válido:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarización: se requiere firma de código."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarización: se requiere hardened runtime."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarización: se requiere hardened runtime."
#: platform/osx/export/export.cpp
@@ -14322,6 +14528,69 @@ msgstr "Notarización: nombre de ID de Apple no especificado."
msgid "Notarization: Apple ID password not specified."
msgstr "Notarización: contraseña de ID de Apple no especificada."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nombre corto de paquete inválido."
@@ -14385,13 +14654,34 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Dimensiones de la imagen del splash inválidas (debería ser 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ruta inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extensión inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID de producto inválido."
+
#: 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 ""
-"Se debe crear o establecer un recurso SpriteFrames en la propiedad \"Frames"
-"\" para que AnimatedSprite pueda mostrar frames."
+"Se debe crear o establecer un recurso SpriteFrames en la propiedad "
+"\"Frames\" para que AnimatedSprite pueda mostrar frames."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14825,8 +15115,8 @@ msgstr "Sólo se admiten escalas uniformes."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Las partículas basadas en la GPU no son compatibles con el controlador de "
"vídeo GLES2.\n"
@@ -15031,8 +15321,8 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Se debe crear o establecer un recurso SpriteFrames en la propiedad \"Frames"
-"\" para que AnimatedSprite3D pueda mostrar frames."
+"Se debe crear o establecer un recurso SpriteFrames en la propiedad "
+"\"Frames\" para que AnimatedSprite3D pueda mostrar frames."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -15113,9 +15403,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Este nodo ha sido deprecado. Usá AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Color: #%s\n"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index db162ecca8..9b70c32d20 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -505,8 +505,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1350,7 +1350,7 @@ msgid "Bus Options"
msgstr "Klassi valikud"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikeeri"
@@ -2158,8 +2158,8 @@ msgstr "Meetodi kirjeldused"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3208,8 +3208,14 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Materjali muutused"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materjali muutused"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3944,6 +3950,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4057,7 +4071,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplikeeri..."
@@ -4853,19 +4867,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -10938,8 +10952,8 @@ msgid ""
"the \"Application\" category."
msgstr ""
"Projekti ei saa käivitada: peastseeni ei ole määratud.\n"
-"Redigeerige project.godot faili ja määrake projekti peastseen \"application"
-"\" alajaotuses."
+"Redigeerige project.godot faili ja määrake projekti peastseen "
+"\"application\" alajaotuses."
#: editor/project_manager.cpp
msgid ""
@@ -12404,6 +12418,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13727,10 +13749,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13775,16 +13793,194 @@ msgstr "Ei saanud luua kausta."
msgid "Error starting HTTP server:"
msgstr "Viga TileSeti salvestamisel!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Vigane nimi."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Ei saanud luua kausta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Vigane nimi."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Salvesta käesolevalt muudetud ressurss."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Vigane nimi."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Vigane nimi."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ainult konstandid"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Loon pisipilti"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13795,6 +13991,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13847,6 +14106,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Kehtetu tee."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Paigaldatud pistikprogrammid:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Vigane nimi."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14198,8 +14478,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14439,7 +14719,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 448788dc2e..2918926ac7 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -507,8 +507,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1358,7 +1358,7 @@ msgid "Bus Options"
msgstr "Klaseko aukerak"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Bikoiztu"
@@ -2139,8 +2139,8 @@ msgstr "Metodo-deskripzioak"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3176,7 +3176,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3920,6 +3924,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4033,7 +4045,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4829,6 +4841,10 @@ msgid "Rename Animation"
msgstr "Aldatu izena animazioari"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Bikoiztu animazioa"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -4841,10 +4857,6 @@ msgid "Load Animation"
msgstr "Kargatu animazioa"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Bikoiztu animazioa"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ez dago animaziorik kopiatzeko!"
@@ -12350,6 +12362,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13666,10 +13686,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13711,16 +13727,189 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Animazio izen baliogabea!"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Animazio izen baliogabea!"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Konstanteak bakarrik"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13731,6 +13920,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13783,6 +14035,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Animazio izen baliogabea!"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Instalatutako bertsioak:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Animazio izen baliogabea!"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14133,8 +14406,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14374,7 +14647,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index dee445a3d1..e75b0277a6 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -523,8 +523,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1386,7 +1386,7 @@ msgid "Bus Options"
msgstr "گزینه های اتوبوس"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "تکثیر کردن"
@@ -2181,8 +2181,8 @@ msgstr "توضیحات تابع"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3229,7 +3229,12 @@ msgstr "مستمر"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr "تغییر بده"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "تغییر بده"
#: editor/editor_node.cpp
@@ -4006,6 +4011,14 @@ msgstr "کاراکترهای معتبر:"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4130,7 +4143,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "انتخاب شده را به دو تا تکثیر کن"
@@ -4987,19 +5000,19 @@ msgid "Rename Animation"
msgstr "تغییر نام انیمیشن"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12972,6 +12985,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "برداشتن موج"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "برداشتن موج"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "برداشتن موج"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14382,10 +14405,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "نام یک شناسه‌ی معتبر نیست:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14433,17 +14452,195 @@ msgstr "ناتوان در ساختن پوشه."
msgid "Error starting HTTP server:"
msgstr "خطا در بارگذاری:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "نام پروژه:"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "ناتوان در ساختن پوشه."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "مسیر نامعتبر."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "اتصال قطع شده"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "باید از یک پسوند معتبر Ø§Ø³ØªÙØ§Ø¯Ù‡ شود."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "باید از یک پسوند معتبر Ø§Ø³ØªÙØ§Ø¯Ù‡ شود."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "چیزی ÛŒØ§ÙØª نشد!"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "نام یک شناسه‌ی معتبر نیست:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14454,6 +14651,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14512,6 +14772,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "مسیر نامعتبر."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "باید از یک پسوند معتبر Ø§Ø³ØªÙØ§Ø¯Ù‡ شود."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "اندازه‌ی قلم نامعتبر."
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -14909,8 +15190,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15165,7 +15446,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index ab1acf1db8..bd2dd36308 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -17,7 +17,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-02-04 13:45+0000\n"
"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
@@ -26,7 +26,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -510,8 +510,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1374,7 +1374,7 @@ msgid "Bus Options"
msgstr "Väylän asetukset"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Monista"
@@ -2088,7 +2088,7 @@ msgstr "Tuodaan (uudelleen) assetteja"
#: editor/editor_help.cpp
msgid "Top"
-msgstr "Yläpuoli"
+msgstr "Alku"
#: editor/editor_help.cpp
msgid "Class:"
@@ -2168,8 +2168,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Tälle ominaisuudelle ei vielä löydy kuvausta. Voit auttaa meitä [color="
-"$color][url=$url]kirjoittamalla sellaisen[/url][/color]!"
+"Tälle ominaisuudelle ei vielä löydy kuvausta. Voit auttaa meitä "
+"[color=$color][url=$url]kirjoittamalla sellaisen[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2177,8 +2177,8 @@ msgstr "Metodien kuvaukset"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Tälle metodille ei vielä löydy kuvausta. Voit auttaa meitä [color=$color]"
"[url=$url]kirjoittamalla sellaisen[/url][/color]!"
@@ -3023,9 +3023,8 @@ msgid "Install Android Build Template..."
msgstr "Asenna Androidin käännösmalli..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Avaa editorin datakansio"
+msgstr "Avaa käyttäjän datakansio"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3294,10 +3293,16 @@ msgid "Update Continuously"
msgstr "Päivitä jatkuvasti"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Päivitä kun muuttuu"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materiaalimuutokset:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Piilota päivitysanimaatio"
@@ -3742,9 +3747,8 @@ msgstr "Tuo solmusta:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Virhe"
+msgstr "%s virhe"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4066,6 +4070,14 @@ msgstr "Nimi sisältää virheellisiä kirjainmerkkejä."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4184,7 +4196,7 @@ msgstr "Lajittele viimeksi muokatun mukaan"
msgid "Sort by First Modified"
msgstr "Lajittele ensiksi muokatun mukaan"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Kahdenna..."
@@ -4999,6 +5011,10 @@ msgid "Rename Animation"
msgstr "Nimeä animaatio uudelleen"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Monista animaatio"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Sulauta seuraavaan vaihdettu"
@@ -5011,10 +5027,6 @@ msgid "Load Animation"
msgstr "Lataa animaatio"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Monista animaatio"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ei kopioitavaa animaatiota!"
@@ -6882,7 +6894,7 @@ msgstr "Luo navigointipolygoni"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Convert to CPUParticles"
-msgstr "Muunna CPUPartikkeleiksi"
+msgstr "Muunna CPUParticles solmuksi"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generating Visibility Rect"
@@ -9705,7 +9717,6 @@ msgid "TileSet"
msgstr "Laattavalikoima"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
msgstr "VCS-lisäosia ei ole saatavilla."
@@ -9717,53 +9728,48 @@ msgstr "Virhe"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Etäasetukset ovat tyhjät. VCS-ominaisuudet, jotka käyttävät verkkoa eivät "
+"välttämättä toimi."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Nimeä ei annettu."
+msgstr "Muutoksen vahvistuksen viestiä ei annettu."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Vahvista muutos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Sävytinmuutokset:"
+msgstr "Valmistellut muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Sävytinmuutokset:"
+msgstr "Valmistelemattomat muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Vahvista muutos"
+msgstr "Vahvistettu muutos:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Päivämäärä:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Alipuu"
+msgstr "Alaotsikko:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Haluatko poistaa haaran %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Haluatko varmasti luoda tyhjän tyypin?"
+msgstr "Haluatko poistaa etäsäilön %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Tee palautus"
+msgstr "Käytä"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9774,148 +9780,132 @@ msgid "Initialize"
msgstr "Alusta"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Poista piste"
+msgstr "Etäkirjautuminen"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Nimeä uudelleen"
+msgstr "Käyttäjänimi"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Salasana"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Julkisen SSH-avaimen polku"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Valitse julkisen SSH-avaimen polku"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Yksityisen SSH-avaimen polku"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Valitse yksityisen SSH-avaimen polku"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH tunnuslause"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Havaitse uudet muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Sulje ja tallenna muutokset?"
+msgstr "Hylkää kaikki muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Varastoidaan paikalliset muutokset..."
+msgstr "Valmistele kaikki muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Materiaalimuutokset:"
+msgstr "Poista kaikkien muutosten valmistelu"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Vahvista muutokset"
+msgstr "Muutosten vahvistusviesti"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Vahvista muutokset"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Vahvista muutos"
+msgstr "Vahvistettujen muutosten lista"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Vahvistuslistan koko"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Osumat:"
+msgstr "Haarat"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Luo uusi projekti"
+msgstr "Luo uusi haara"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Poista animaatioraita"
+msgstr "Poista haara"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Haaran nimi"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Etäinen"
+msgstr "Etäsäilöt"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Luo uusi projekti"
+msgstr "Luo uusi etäsäilö"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Poista"
+msgstr "Poista etäsäilö"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Etäinen "
+msgstr "Etäsäilön nimi"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Etäinen "
+msgstr "Etäsäilön URL"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Nouda"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Vedä"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Työnnä"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Lähde Mesh:"
+msgstr "Työnnä väkisin"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9935,22 +9925,19 @@ msgstr "Tyyppimuunnos"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Yhdistämätön"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Näytä"
+msgstr "Näkymä:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Puolita polku"
+msgstr "Osita"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Muutettu"
+msgstr "Yhdistetty"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12784,6 +12771,16 @@ msgstr "Aseta peittopallon säde"
msgid "Set Occluder Sphere Position"
msgstr "Aseta peittopallon sijainti"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Aseta portaalin pisteen sijainti"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Aseta käyräpisteen sijainti"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Muuta sylinterin sädettä"
@@ -13499,38 +13496,36 @@ msgid "Edit Member"
msgstr "Muokkaa jäsentä"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Aseta lauseke"
+msgstr "Lauseke"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Palauta"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animaatio"
+msgstr "Ehto"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "jos (ehto) on:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Kun"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "kun (ehto):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iteraattori"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "kullekin (elementille) (syötteessä):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13546,79 +13541,71 @@ msgstr "Iteraattori muuttui epäkelvoksi: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Sarja"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Nimetään kansio uudelleen:"
+msgstr "järjestyksessä:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Nyökkäyskulma:"
+msgstr "Valitsin"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "'syöte' on:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Tyypit:"
+msgstr "Tyyppimuunnos"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "On %s?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "Kullekin %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Itse"
+msgstr "Itselle"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "Merkissä %s"
+msgstr "Vähennä %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Monista %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Jaa %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Lisää %s"
+msgstr "Jakojäännös %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Aseta %s"
+msgstr "Siirrä vasemmalle %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "Siirrä oikealle %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Kiinnitetty %s"
+msgstr "Binääri JA %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Binääri TAI %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Binääri XOR %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13643,19 +13630,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Virheellinen osoitinominaisuuden nimi '%s' solmussa %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Aseta %s"
+msgstr "Lähetä %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Funktiot"
+msgstr "Funktio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Muuta taulukon kokoa"
+msgstr "Laadi taulukko"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13667,7 +13651,7 @@ msgstr ": Virheelliset argumentit: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a jos ehto, muutoin b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13678,64 +13662,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet ei löytynyt skriptistä: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Lataa uudelleen"
+msgstr "Esilataa"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z-indeksi"
+msgstr "Hae indeksi"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z-indeksi"
+msgstr "Aseta indeksi"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Vakio"
+msgstr "Globaali vakio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Vakio"
+msgstr "Luokkavakio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Vakio"
+msgstr "Perusvakio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Vakio"
+msgstr "Matemaattinen vakio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "GDNative singleton on otettu käyttöön"
+msgstr "Hae pelimoottorin singleton"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Ajanhakusolmu"
+msgstr "Hae skenen solmu"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Skenepuun muokkaus"
+msgstr "Hae skenepuu"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Itse"
+msgstr "Hae itse"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Leikkaa solmut"
+msgstr "Mukautettu solmu"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13751,33 +13723,28 @@ msgstr ""
"tai merkkijono (virhe)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Kutsuja"
+msgstr "Alikutsu"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Vakiot"
+msgstr "Muodosta %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Käytä paikallisavaruutta"
+msgstr "Hae paikallinen muuttuja"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Käytä paikallisavaruutta"
+msgstr "Aseta paikallinen muuttuja"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "Toiminto"
+msgstr "Toiminto %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Pura %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13785,40 +13752,35 @@ msgstr "Hae VisualScriptistä"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Väistä"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Odota"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Siirrä ruutua"
+msgstr "Seuraava ruutu"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Fysiikkaruutujen %"
+msgstr "Seuraava fysiikkaruutu"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s sekuntia"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Signaali"
+msgstr "Odota signaalia"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Signaali"
+msgstr "Odota solmun signaalia"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Luo ilmentymä"
+msgstr "Odota ilmentymän signaalia"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14002,8 +13964,8 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
-"\"Target Sdk\" versionumeron on oltava suurempi tai yhtä suuri kuin \"Min Sdk"
-"\" versionumeron."
+"\"Target Sdk\" versionumeron on oltava suurempi tai yhtä suuri kuin \"Min "
+"Sdk\" versionumeron."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -14183,10 +14145,6 @@ msgstr "App Store Team ID ei ole määritetty - ei voida konfiguroida projektia.
msgid "Invalid Identifier:"
msgstr "Virheellinen Identifier osio:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Vaadittavaa ikonia ei ole määritetty esiasetuksissa."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Pysäytä HTTP-palvelin"
@@ -14227,16 +14185,202 @@ msgstr "Ei voitu luoda HTTP-palvelimen hakemistoa:"
msgid "Error starting HTTP server:"
msgstr "Virhe käynnistettäessä HTTP-palvelinta:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Virheellinen projektin nimi."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Virheellinen geometria, ei voida luoda polygonia."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Kansiota ei voitu luoda."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Virheellinen kantapolku."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Resurssin lataaminen epäonnistui."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Resurssin lataaminen epäonnistui."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Virheellinen tiedostopääte."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Virheellinen tiedostopääte."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Kuvakkeita ei löytynyt."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Luodaan pienoiskuvaa"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Ei löydetty APK-vientimallia vientiä varten:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Virheellinen bundle-tunniste:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarisointi: koodin allekirjoitus tarvitaan."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarisointi: hardened runtime tarvitaan."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarisointi: hardened runtime tarvitaan."
#: platform/osx/export/export.cpp
@@ -14247,6 +14391,69 @@ msgstr "Notarointi: Apple ID nimeä ei ole määritetty."
msgid "Notarization: Apple ID password not specified."
msgstr "Notarointi: Apple ID salasanaa ei ole määritetty."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Paketin lyhyt nimi on virheellinen."
@@ -14301,6 +14508,27 @@ msgstr "Virheellinen leveän 310x150 logon kuvakoko (pitäisi olla 310x150)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Virheellinen käynnistyskuvan kuvakoko (pitäisi olla 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Virheellinen polku."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Virheellinen tiedostopääte."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Tuotteen GUID (yleisesti yksilöllinen tunniste) on virheellinen."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14464,15 +14692,14 @@ msgstr ""
"alla."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
"GPU-pohjaiset partikkelit eivät ole tuettuja GLES2 näyttöajurilla.\n"
-"Käytä sen sijaan CPUParticles2D solmua. Voit käyttää \"Muunna "
-"CPUPartikkeleiksi\" toimintoa tähän tarkoitukseen."
+"Käytä sen sijaan CPUParticles2D solmua. Voit käyttää työkalupalkin toimintoa "
+"\"Muunna CPUParticles2D solmuksi\" tähän tarkoitukseen."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14482,6 +14709,11 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"MacOS:llä Particles2D:n renderöinti on paljon hitaampaa kuin CPUParticles2D:"
+"n, koska muunnoksen palautus on toteutettu CPU:lla GPU:n sijaan.\n"
+"Harkitse CPUParticles2D solmun käyttöä silloin kun kohdealustana on macOS.\n"
+"Voit käyttää työkalupalkin toimintoa \"Muunna CPUParticles2D solmuksi\" "
+"tähän tarkoitukseen."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14739,15 +14971,14 @@ msgid "Only uniform scales are supported."
msgstr "Vain uniform-skaalat ovat tuettuja."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPU-pohjaiset partikkelit eivät ole tuettuja GLES2 näyttöajurilla.\n"
-"Käytä sen sijaan CPUParticles solmua. Voit käyttää \"Muunna CPUPartikkeleiksi"
-"\" toimintoa tähän tarkoitukseen."
+"Käytä sen sijaan CPUParticles solmua. Voit käyttää työkalupalkin toimintoa "
+"\"Muunna CPUParticles solmuksi\" tähän tarkoitukseen."
#: scene/3d/particles.cpp
msgid ""
@@ -14756,6 +14987,11 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"MacOS:llä Particles:n renderöinti on paljon hitaampaa kuin CPUParticles:n, "
+"koska muunnoksen palautus on toteutettu CPU:lla GPU:n sijaan.\n"
+"Harkitse CPUParticles solmun käyttöä silloin kun kohdealustana on macOS.\n"
+"Voit käyttää työkalupalkin toimintoa \"Muunna CPUParticles solmuksi\" tähän "
+"tarkoitukseen."
#: scene/3d/particles.cpp
msgid ""
@@ -15026,9 +15262,10 @@ msgstr ""
"Tämä solmu on poistettu käytöstä. Käytä sen sijaan AnimationTree solmua."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Väri: #%s\n"
@@ -15071,9 +15308,9 @@ 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 ""
-"Työkaluvihjettä ei näytettä, sillä ohjaimen Mouse Filter asetus on \"Ignore"
-"\". Ratkaistaksesi tämän, laita Mouse Filter asetukseksi \"Stop\" tai \"Pass"
-"\"."
+"Työkaluvihjettä ei näytettä, sillä ohjaimen Mouse Filter asetus on "
+"\"Ignore\". Ratkaistaksesi tämän, laita Mouse Filter asetukseksi \"Stop\" "
+"tai \"Pass\"."
#: scene/gui/dialogs.cpp
msgid "Alert!"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index 200793ff14..1cab78fd72 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -506,8 +506,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1342,7 +1342,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2118,8 +2118,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3149,7 +3149,12 @@ msgid "Update Continuously"
msgstr "Tuloy-tuloy"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Baguhin"
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3879,6 +3884,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3991,7 +4004,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4781,19 +4794,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12257,6 +12270,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13560,10 +13581,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13604,16 +13621,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13624,6 +13811,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13676,6 +13926,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14026,8 +14294,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14267,7 +14535,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 722d9bdbf8..03dff89a24 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -85,13 +85,16 @@
# Blackiris <divjvc@free.fr>, 2021.
# Olivier Monnom <olivier.monnom@gmail.com>, 2021.
# Timothée MB <timothee.me@gmail.com>, 2021.
+# Maxime Leroy <lisacintosh@gmail.com>, 2022.
+# Adi-df <adidf-web@laposte.net>, 2022.
+# MinusKube <minuskube@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n"
+"PO-Revision-Date: 2022-02-10 07:50+0000\n"
+"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -99,7 +102,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -109,7 +112,7 @@ msgstr ""
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "Une chaîne de caractères de longueur 1 est attendue (un caractère)."
+msgstr "Une chaîne de caractères de longueur 1 était attendue (un caractère)."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -402,9 +405,8 @@ msgid "Duplicate Key(s)"
msgstr "Dupliquer clé(s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Ajouter %d Trame(s)"
+msgstr "Ajouter la valeur(s) RESET"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -581,9 +583,8 @@ msgstr ""
"s’agit que d’une seule piste."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Mettre à l’échelle les clés d’animation"
+msgstr "Ajouter les clés RESET à l'animation"
#: editor/animation_track_editor.cpp
msgid ""
@@ -592,8 +593,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1464,7 +1465,7 @@ msgid "Bus Options"
msgstr "Options de bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliquer"
@@ -1622,7 +1623,7 @@ msgstr "Supprimer l'AutoLoad"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
-msgstr "Enable"
+msgstr "Activer"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
@@ -2274,8 +2275,8 @@ msgstr "Descriptions des méthodes"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Il n'y a pas de description disponible pour cette méthode. Aidez-nous en "
"[color=$color][url=$url]en créant[/url][/color] une !"
@@ -2354,18 +2355,19 @@ msgid "Property:"
msgstr "Propriété :"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(valeur)"
+msgstr "Épingler la valeur"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
msgstr ""
+"Épingler une valeur pour forcer son enregistrement même si elle est égale à "
+"sa valeur par défaut."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Épingler la valeur [Désativé par '%s' n'est que dans l'éditeur]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2444,7 +2446,7 @@ msgstr "Monter"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr "Node"
+msgstr "Nœud"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -2770,7 +2772,7 @@ msgstr "La scène actuelle n'est pas enregistrée. Ouvrir quand même ?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr "Impossible d'annuler quand les boutons de la souris sont activés."
+msgstr "Impossible d'annuler quand les boutons de la souris sont pressés."
#: editor/editor_node.cpp
msgid "Nothing to undo."
@@ -2778,11 +2780,11 @@ msgstr "Rien à annuler."
#: editor/editor_node.cpp
msgid "Undo: %s"
-msgstr "Annuler %s"
+msgstr "Annuler : %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr "Impossible de rétablir quand les boutons de la souris sont activés."
+msgstr "Impossible de rétablir quand les boutons de la souris sont pressés."
#: editor/editor_node.cpp
msgid "Nothing to redo."
@@ -2971,7 +2973,7 @@ msgstr "Supprimer la disposition"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "Par défaut"
+msgstr "Défaut"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
@@ -3138,9 +3140,8 @@ msgid "Install Android Build Template..."
msgstr "Installer un modèle de compilation Android..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Ouvrir le dossier de données de l'éditeur"
+msgstr "Ouvrir le dossier de données utilisateur"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3231,7 +3232,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr ""
+msgstr "Forcer les replis du shader"
#: editor/editor_node.cpp
msgid ""
@@ -3242,6 +3243,13 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Lorsque cette option est activée, les shaders seront utilisés sous leur "
+"forme de fallback (soit visibles via un ubershader, soit cachés) pendant "
+"toute la durée de l'exécution.\n"
+"Ceci est utile pour vérifier l'aspect et les performances des fallbacks, qui "
+"sont normalement affichés brièvement.\n"
+"La compilation asynchrone des shaders doit être activée dans les paramètres "
+"du projet pour que cette option fasse une différence."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3406,10 +3414,16 @@ msgid "Update Continuously"
msgstr "Mettre à jour en continu"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Mettre à jour quand modifié"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Changements de matériau :"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Cacher l'indicateur d'activité"
@@ -3762,7 +3776,7 @@ msgstr ""
#: editor/editor_resource_picker.cpp
msgid "Quick Load"
-msgstr "Chargement rapide"
+msgstr "Chargement Rapide"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -3855,9 +3869,8 @@ msgstr "Importer à partir d'un nœud :"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Erreur"
+msgstr "Erreur %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4188,6 +4201,14 @@ msgstr "Le nom contient des caractères invalides."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4306,7 +4327,7 @@ msgstr "Trier par date de modification (plus récent au moins récent)"
msgid "Sort by First Modified"
msgstr "Trier par date de modification (moins récent au plus récent)"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Dupliquer…"
@@ -4648,6 +4669,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"Sélectionnez un fichier de ressource dans le système de fichier ou depuis "
+"l'inspecteur pour ajuster les préférences d'importation."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5124,6 +5147,10 @@ msgid "Rename Animation"
msgstr "Renommer l'animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliquer l'animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Mélange suivant modifié"
@@ -5136,10 +5163,6 @@ msgid "Load Animation"
msgstr "Charger l'animation"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Dupliquer l'animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Aucune animation à copier !"
@@ -8479,16 +8502,15 @@ msgstr "Basculer en vue libre"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "Réduire le champ de vision"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Augmenter le champ de vision"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "Réinitialiser aux valeurs par défaut"
+msgstr "Rétablir le champ de vision par défaut"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -9226,12 +9248,11 @@ msgstr "Ajouter un type"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "Filtrer la liste des types ou créer un nouveau type personnalisé :"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "Profils disponibles :"
+msgstr "Types disponibles basés sur des nœuds :"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Type name is empty!"
@@ -9865,9 +9886,8 @@ msgid "TileSet"
msgstr "TileSet"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Aucun addon VCS n'est disponible."
+msgstr "Aucun greffon VCS n'est disponible."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9877,53 +9897,48 @@ msgstr "Erreur"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Les préférences pour les dépôts distants sont vides. Des problèmes peuvent "
+"subvenir pour les fonctionnalités utilisant le réseau."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Aucun nom renseigné."
+msgstr "Aucun message de commit spécifié."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Enregistrer"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Changements de shader :"
+msgstr "Modifications pré-commitées"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Changements de shader :"
+msgstr "Modifications non pré-commitées"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Enregistrer"
+msgstr "Commit :"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Date :"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Sous-arbre"
+msgstr "Sous-titre :"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Voulez-vous retirer la branche %s ?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Voulez-vous vraiment créer plus un type vide ?"
+msgstr "Voulez-vous vraiment retirer le dépôt distant %s ?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Appliquer la réinitialisation"
+msgstr "Appliquer"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9934,148 +9949,132 @@ msgid "Initialize"
msgstr "Initialiser"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Supprimer un point"
+msgstr "Identification distante"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Renommer"
+msgstr "Nom d'utilisateur"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Mot de passe"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Chemin de la clé publique SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Sélectionner le chemin de la clé publique SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Chemin de la clé privée SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Sélectionner le chemin de la clé privée SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Phrase d'authentification SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Détecter de nouveaux changements"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Quitter et sauvegarder les modifications ?"
+msgstr "Annuler toutes les modifications"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Stockage des modifications locales…"
+msgstr "Pré-commiter tous les modifications"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Changements de matériau :"
+msgstr "Retirer les modifications pré-commitées"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Commiter les changements"
+msgstr "Message du commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Commiter les changements"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Enregistrer"
+msgstr "Liste des commits"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Valider la taille des listes"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Correspondances :"
+msgstr "Branches"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Créer un nouveau projet"
+msgstr "Créer une nouvelle branche"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Supprimer la piste d’animation"
+msgstr "Supprimer la branche"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Nom de la branche"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Distant"
+msgstr "Dépôts distants"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Créer un nouveau projet"
+msgstr "Créer une nouvelle branche"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Supprimer l'item"
+msgstr "Retirer le dépôt distant"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Distant "
+msgstr "Nom du dépôt distant"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Distant "
+msgstr "URL du dépôt distant"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Actualiser"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Récupérer"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Pousser"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Maillage source :"
+msgstr "Force-pousser"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10095,22 +10094,19 @@ msgstr "Changement de type"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Non-fusionné"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Affichage"
+msgstr "Affichage :"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Diviser le chemin"
+msgstr "Divisé"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Modifié"
+msgstr "Unifié"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12276,6 +12272,11 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Vous ne pouvez pas enregistrer cette branche où l'enfant est déjà dans une "
+"scène instanciée.\n"
+"Pour sauvegarder cette branche dans sa propre scène, ouvrez la scène "
+"originale, cliquez-droit sur cette branche, puis sélectionnez \"Sauvegarder "
+"la branche comme scène\"."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12283,6 +12284,11 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Vous ne pouvez pas enregistrer cette branche qui fait partie d'une scène "
+"héritée.\n"
+"Pour sauvegarder cette branche dans sa propre scène, ouvrez la scène "
+"originale, cliquez-droit sur cette branche, puis sélectionnez \"Sauvegarder "
+"la branche comme scène\"."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12960,6 +12966,16 @@ msgstr "Définir le rayon de la sphère de l'occulteur"
msgid "Set Occluder Sphere Position"
msgstr "Définir la position de la sphère de l'occulteur"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Définir la position du point du Portal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Définir la position du point de la courbe"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Changer le rayon du cylindre"
@@ -13678,38 +13694,36 @@ msgid "Edit Member"
msgstr "Modifier le membre"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Définir l'expression"
+msgstr "Expression"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Retour"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animation"
+msgstr "Condition"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "if (cond) is :"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "While"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "while (cond) :"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Itérateur"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "for (elem) in (input) :"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13725,79 +13739,71 @@ msgstr "L'itérateur est devenu invalide : "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Séquence"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Renommer le dossier :"
+msgstr "dans l'ordre :"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Tangage :"
+msgstr "Switch"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "'input' est :"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Types :"
+msgstr "Changer le type"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "Est-ce %s ?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "On %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Self"
+msgstr "On Self"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "Au caractère %s"
+msgstr "Soustraire %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Multiplier %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Diviser %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Ajouter %s"
+msgstr "Module de %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Définir %s"
+msgstr "Décalage %s vers la gauche"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "Décaler %s vers la droite"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Épinglé %s"
+msgstr "Et par bit %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Ou par bit %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Ou-exclusif par bit %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13822,19 +13828,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Nom de propriété invalide « %s » dans le nœud %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Définir %s"
+msgstr "Émettre %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Fonctions"
+msgstr "Fonction"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Redimensionner le tableau"
+msgstr "Composer le tableau"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13846,7 +13849,7 @@ msgstr ": Arguments invalides : "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a if cond, else b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13857,64 +13860,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet introuvable dans le script : "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Recharger"
+msgstr "Précharger"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z Index"
+msgstr "Récupérer la position"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z Index"
+msgstr "Définir pour la position"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Constante"
+msgstr "Constante globale"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Constante"
+msgstr "Constante de classe"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Constante"
+msgstr "Constante Basique"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Constante"
+msgstr "Constante de Math"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "Activé le Singleton GDNative"
+msgstr "Singleton du moteur de jeu"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Nœud TimeSeek"
+msgstr "Le nœud de la scène"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Édition de l'arbre de scène"
+msgstr "L'arbre de la scène"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Self"
+msgstr "Récupérer Self"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Couper les nœuds"
+msgstr "Nœud Personnalisé"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13931,33 +13922,28 @@ msgstr ""
"out), ou une chaîne (erreur)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Appels"
+msgstr "Sous-appel"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Constantes"
+msgstr "Construire %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Utiliser les coordonées locales"
+msgstr "Obtenir Variable locale"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Utiliser les coordonées locales"
+msgstr "Définir variable locale"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "Action"
+msgstr "L'action %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Déconstruire %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13965,40 +13951,35 @@ msgstr "Rechercher VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Yield"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Wait"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Déplacer le cadre"
+msgstr "Image suivante"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Image physique %"
+msgstr "Image physique suivante"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s seconde(s)"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Signaux"
+msgstr "WaitSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Signaux"
+msgstr "WaitNodeSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Instance"
+msgstr "WaitInstanceSignal"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14380,10 +14361,6 @@ msgstr "App Store Team ID non spécifié - ne peut pas configurer le projet."
msgid "Invalid Identifier:"
msgstr "Identifiant invalide :"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "L'icône requise n'est pas spécifiée dans le préréglage."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Arrêter le serveur HTTP"
@@ -14424,16 +14401,202 @@ msgstr "Impossible de créer le répertoire du serveur HTTP :"
msgid "Error starting HTTP server:"
msgstr "Erreur de démarrage du serveur HTTP :"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nom du projet invalide."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Géométrie invalide, impossible de créer le polygone."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Impossible de créer le dossier."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Chemin de base invalide."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Impossible de charger la ressource."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Impossible de charger la ressource."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extension invalide."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extension invalide."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Pas d'icônes trouvées."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Création de l'aperçu"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Impossible de trouver le modèle de l'APK à exporter :\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificateur de bundle non valide :"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Certification : signature du code requise."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Certification : exécution renforcée requise."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Certification : exécution renforcée requise."
#: platform/osx/export/export.cpp
@@ -14444,6 +14607,69 @@ msgstr "Certification : Identifiant Apple ID non spécifié."
msgid "Notarization: Apple ID password not specified."
msgstr "Certification : Mot de passe Apple ID non spécifié."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nom abrégé du paquet invalide."
@@ -14509,6 +14735,27 @@ msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
"Les dimensions du splash screen sont invalides (doivent être de 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Chemin invalide."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extension invalide."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID produit invalide."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14640,13 +14887,15 @@ msgstr ""
#: scene/2d/navigation_agent_2d.cpp
msgid "The NavigationAgent2D can be used only under a Node2D node."
-msgstr ""
+msgstr "Le NavigationAgent2D ne peut être utilisé que sous un nœud Node2D."
#: scene/2d/navigation_obstacle_2d.cpp
msgid ""
"The NavigationObstacle2D only serves to provide collision avoidance to a "
"Node2D object."
msgstr ""
+"Un NavigationObstacle2D ne peut éviter les collisions qu'avec les nœuds "
+"Node2D."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14673,7 +14922,6 @@ msgstr ""
"d'un nœud de type ParallaxBackground."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
@@ -14682,7 +14930,7 @@ msgstr ""
"Les particules de type GPU ne sont pas supportées par le pilote graphique "
"GLES2.\n"
"Utilisez le nœud CPUParticles2D à la place. Vous pouvez utiliser l'option « "
-"Convertir en CPUParticles » pour ce faire."
+"Convertir en CPUParticles2D » de la barre d'outils à cette fin."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14692,6 +14940,11 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"Sur macOS, le rendu Particles2D est beaucoup plus lent que CPUParticles2D en "
+"raison du retour de transformation implémenté sur le CPU au lieu du GPU.\n"
+"Envisagez d'utiliser CPUParticles2D à la place lorsque vous ciblez macOS.\n"
+"Vous pouvez utiliser l'option de barre d'outils \"Convertir en "
+"CPUParticles2D\" à cette fin."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14925,7 +15178,7 @@ msgstr ""
#: scene/3d/navigation_agent.cpp
msgid "The NavigationAgent can be used only under a spatial node."
-msgstr ""
+msgstr "Le NavigationAgent ne peut être utilisé que sous un nœud spatial."
#: scene/3d/navigation_mesh_instance.cpp
msgid ""
@@ -14940,6 +15193,8 @@ msgid ""
"The NavigationObstacle only serves to provide collision avoidance to a "
"spatial object."
msgstr ""
+"Un NavigationObstacle ne peut éviter les collisions qu'avec les nœuds "
+"Spatial."
#: scene/3d/occluder.cpp
msgid "No shape is set."
@@ -14947,19 +15202,18 @@ msgstr "Aucune forme n'est définie."
#: scene/3d/occluder.cpp
msgid "Only uniform scales are supported."
-msgstr "Seules les échelles uniformes sont prises en charge."
+msgstr "Seules les mises à l'échelle uniformes sont prises en charge."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Les particules de type GPU ne sont pas supportées par le pilote graphique "
"GLES2.\n"
"Utilisez le nœud CPUParticles à la place. Vous pouvez utiliser l'option « "
-"Convertir en CPUParticles » pour ce faire."
+"Convertir en CPUParticles » de la barre d'outils à cette fin."
#: scene/3d/particles.cpp
msgid ""
@@ -14968,6 +15222,12 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"Sous macOS, le rendu de Particles est beaucoup plus lent que celui de "
+"CPUParticles en raison de l'implémentation du retour de transformation sur "
+"le CPU au lieu du GPU.\n"
+"Pensez à utiliser CPUParticles à la place lorsque vous ciblez macOS.\n"
+"Vous pouvez utiliser l'option \"Convertir en CPUParticles\" de la barre "
+"d'outils à cette fin."
#: scene/3d/particles.cpp
msgid ""
@@ -15066,7 +15326,7 @@ msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
-"La coque convexe de la pièce contient un grand nombre de plans.\n"
+"L'enveloppe convexe de la pièce contient un grand nombre de plans.\n"
"Envisagez de simplifier la limite de la pièce afin d'augmenter les "
"performances."
@@ -15197,8 +15457,8 @@ msgid ""
"this environment's Background Mode to Canvas (for 2D scenes)."
msgstr ""
"Ce WorldEnvironment est ignoré. Ajoutez une caméra (pour les scènes 3D) ou "
-"définissez la propriété \"Background Mode\" de cet environnement sur \"Canvas"
-"\" (pour les scènes 2D)."
+"définissez la propriété \"Background Mode\" de cet environnement sur "
+"\"Canvas\" (pour les scènes 2D)."
#: scene/animation/animation_blend_tree.cpp
msgid "On BlendTree node '%s', animation not found: '%s'"
@@ -15248,9 +15508,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Ce nœud est désormais déprécié. Utilisez AnimationTree à la place."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Couleur : #%s\n"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index 03611eed78..4db0862314 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -497,8 +497,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1334,7 +1334,7 @@ msgid "Bus Options"
msgstr "Cruthaigh"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2109,8 +2109,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3136,7 +3136,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3860,6 +3864,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3972,7 +3984,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4762,19 +4774,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12221,6 +12233,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13523,10 +13543,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13567,16 +13583,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13587,6 +13773,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13639,6 +13888,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13989,8 +14256,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14230,7 +14497,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index f98288945e..b88f8f0430 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -506,8 +506,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1382,7 +1382,7 @@ msgid "Bus Options"
msgstr "Opcións de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2183,8 +2183,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Actualmente non hai unha descripción desta propiedade. Axúdanos [color="
-"$color][url=$url]contribuíndo cunha descripción[/url][/color]!"
+"Actualmente non hai unha descripción desta propiedade. Axúdanos "
+"[color=$color][url=$url]contribuíndo cunha descripción[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2192,8 +2192,8 @@ msgstr "Descrición de Métodos"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Actualmente non hai unha descripción deste método. Axúdanos [color=$color]"
"[url=$url]contribuíndo cunha descripción[/url][/color]!"
@@ -2830,8 +2830,9 @@ 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 ""
-"Erro cargando a escena: debe estar dentro da ruta do proxecto. Usa \"Importar"
-"\" para abrir a escena, e despois gardala dentro da ruta do proxecto."
+"Erro cargando a escena: debe estar dentro da ruta do proxecto. Usa "
+"\"Importar\" para abrir a escena, e despois gardala dentro da ruta do "
+"proxecto."
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
@@ -3317,10 +3318,16 @@ msgid "Update Continuously"
msgstr "Actualizar de Maneira Continua"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Actualizar Cando Sexa Necesario"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Parámetro Cambiado"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr ""
@@ -4077,6 +4084,14 @@ msgstr "O nome contén caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4198,7 +4213,7 @@ msgstr "Derradeira Modificación"
msgid "Sort by First Modified"
msgstr "Derradeira Modificación"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicar..."
@@ -5003,6 +5018,10 @@ msgid "Rename Animation"
msgstr "Renomear Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -5015,10 +5034,6 @@ msgid "Load Animation"
msgstr "Cargar Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicar Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr ""
@@ -11259,8 +11274,8 @@ msgid ""
"the \"Application\" category."
msgstr ""
"Non se pode executar o proxecto: non hai unha escena principal definida.\n"
-"Por favor, selecciona unha escena principal en \"Configuración do Proxecto"
-"\", na categoría \"Aplicación\"."
+"Por favor, selecciona unha escena principal en \"Configuración do "
+"Proxecto\", na categoría \"Aplicación\"."
#: editor/project_manager.cpp
msgid ""
@@ -12741,6 +12756,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14094,11 +14117,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-"As iconas requeridas non están especificadas nos axustes de exportación."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14143,16 +14161,195 @@ msgstr "Non se puido crear cartafol."
msgid "Error starting HTTP server:"
msgstr "Erro ao gardar TileSet!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nome de Proxecto Inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Non se puido crear cartafol."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ruta base inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Fallou a carga do Recurso."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Fallou a carga do Recurso."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extensión inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Non se atopou ningún sub-recurso."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creando Miniatura"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14163,6 +14360,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -14215,6 +14475,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ruta inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extensión inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nome de Proxecto Inválido."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14604,8 +14885,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"As partículas baseadas na GPU non están soportas por o controlador de vídeo "
"de GLES2.\n"
@@ -14859,7 +15140,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/he.po b/editor/translations/he.po
index 73da4945f9..c7966a9536 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -520,8 +520,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -529,8 +529,8 @@ msgstr ""
"\n"
"להפעלת ×”×פשרות להוספת רצועות מות×מות-×ישית, יש לקבוע בהגדרות ×™×™×‘×•× ×©×œ הסצנה "
"×ת\n"
-"\"הנפשה > ×חסון\" ל-\"קבצי×\", להפעיל ×ת \"הנפשה > הש×ר רצועות מות×מות-×ישית"
-"\", ולבסוף ×œ×™×™×‘× ×ž×—×“×©.\n"
+"\"הנפשה > ×חסון\" ל-\"קבצי×\", להפעיל ×ת \"הנפשה > הש×ר רצועות "
+"מות×מות-×ישית\", ולבסוף ×œ×™×™×‘× ×ž×—×“×©.\n"
"דרך ×חרת, להשתמש בהגדרות ×™×™×‘×•× ×שר מייב××™× ×”× ×¤×©×•×ª ×œ×§×‘×¦×™× × ×¤×¨×“×™×."
#: editor/animation_track_editor.cpp
@@ -1374,7 +1374,7 @@ msgid "Bus Options"
msgstr "×פשרויות ×פיק"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "שכפול"
@@ -1773,8 +1773,8 @@ msgid ""
"Allows to configure import settings for individual assets. Requires the "
"FileSystem dock to function."
msgstr ""
-"מ×פשר הת×מת הגדרות ×™×™×‘×•× ×¢×‘×•×¨ מש××‘×™× ×‘×•×“×“×™×. דורש ×ת השימוש בחלון מערכת-"
-"הקבצי×."
+"מ×פשר הת×מת הגדרות ×™×™×‘×•× ×¢×‘×•×¨ מש××‘×™× ×‘×•×“×“×™×. דורש ×ת השימוש בחלון "
+"מערכת-הקבצי×."
#: editor/editor_feature_profile.cpp
msgid "(current)"
@@ -2157,8 +2157,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"כרגע ×ין תי×ור למ×פיין ×–×”. בבקשה עזור לנו על-ידי [color=$color][url="
-"$url]כתיבת תי×ור[/url][/color]!"
+"כרגע ×ין תי×ור למ×פיין ×–×”. בבקשה עזור לנו על-ידי [color=$color]"
+"[url=$url]כתיבת תי×ור[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2166,11 +2166,11 @@ msgstr "תי×ורי מתודות"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"כרגע ×ין תי×ור למתודה זו. בבקשה עזור לנו על-ידי [color=$color][url="
-"$url]כתיבת תי×ור [/url][/color]!"
+"כרגע ×ין תי×ור למתודה זו. בבקשה עזור לנו על-ידי [color=$color]"
+"[url=$url]כתיבת תי×ור [/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3257,10 +3257,16 @@ msgid "Update Continuously"
msgstr "עדכון רציף"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "עדכון בעת שינוי"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "שינויי חומרי×"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "הסתרת מחוון העדכון"
@@ -4032,6 +4038,14 @@ msgstr "×”×©× ×ž×›×™×œ ×ª×•×•×™× ×©×’×•×™×™×."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4154,7 +4168,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "שכפול…"
@@ -5003,6 +5017,10 @@ msgid "Rename Animation"
msgstr "שינוי ×©× ×”× ×¤×©×”"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "שכפול הנפשה"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "המיזוג ×”×‘× ×”×©×ª× ×”"
@@ -5015,10 +5033,6 @@ msgid "Load Animation"
msgstr "טעינת הנפשה"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "שכפול הנפשה"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "×ין הנפשה להעתקה!"
@@ -12895,6 +12909,14 @@ msgstr "שינוי רדיוס לצורת גליל"
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "שינוי רדיוס גליל"
@@ -14064,8 +14086,8 @@ msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-"מודול \"GodotPaymentV3\" ×œ× ×—×•×§×™ × ×ž×¦× ×‘×”×’×“×¨×ª ×”×ž×™×–× ×‘-\"×נדרו×יד/מודולי×"
-"\" (שינוי בגודו 3.2.2).\n"
+"מודול \"GodotPaymentV3\" ×œ× ×—×•×§×™ × ×ž×¦× ×‘×”×’×“×¨×ª ×”×ž×™×–× "
+"ב-\"×נדרו×יד/מודולי×\" (שינוי בגודו 3.2.2).\n"
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
@@ -14276,10 +14298,6 @@ msgstr "×œ× ×¦×•×™×Ÿ App Store Team ID - ×œ× × ×™×ª×Ÿ להגדיר ×ת המי
msgid "Invalid Identifier:"
msgstr "מזהה ×œ× ×—×•×§×™:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "סמליל נדרש ×ינו מוגדר בהגדרות יצו×."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "עצירת שרת HTTP"
@@ -14324,17 +14342,197 @@ msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה."
msgid "Error starting HTTP server:"
msgstr "שגי××” בשמירת הסצנה."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "×©× ×©×’×•×™."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "נתיב בסיס ×œ× ×—×•×§×™."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "טעינת המש×ב נכשלה."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "טעינת המש×ב נכשלה."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "סיומת ×œ× ×—×•×§×™×ª."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "סיומת ×œ× ×—×•×§×™×ª."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "×œ× × ×ž×¦×!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "יצירת תמונה ממוזערת"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "מזהה ×œ× ×—×•×§×™:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14345,6 +14543,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "×©× ×§×¦×¨ של חבילה ×œ× ×—×•×§×™."
@@ -14399,6 +14660,27 @@ msgstr "מידות תמונת לוגו רחבה 310x150 ×œ× ×—×•×§×™×•×ª (צר×
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "מידות תמונת פתיח ×œ× ×—×•×§×™×•×ª (צריכות להיות 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "נתיב ×œ× ×—×•×§×™."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "סיומת ×œ× ×—×•×§×™×ª."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID מוצר ×œ× ×—×•×§×™."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14431,8 +14713,8 @@ 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, "
+"CollisionPolygon2D משמש רק להספקת צורת התנגשות למפרק היורש "
+"מ-CollisionObject2D. השימוש בו ×”×•× ×¨×§ כילד של Area2D, StaticBody2D, "
"RigidBody2D, KinematicBody2D וכו'."
#: scene/2d/collision_polygon_2d.cpp
@@ -14453,8 +14735,8 @@ 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, "
+"CollisionShape2D משמש רק להספקת צורת התנגשות למפרק היורש "
+"מ-CollisionObject2D. השימוש בו ×”×•× ×¨×§ כילד של Area2D, StaticBody2D, "
"RigidBody2D, KinematicBody2D וכו'."
#: scene/2d/collision_shape_2d.cpp
@@ -14701,8 +14983,8 @@ msgid ""
"CollisionObject derived node. Please only use it as a child of Area, "
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D משמש רק להספקת צורת התנגשות למפרק היורש מ-"
-"CollisionObject2D. השימוש בו ×”×•× ×¨×§ כצ××¦× ×©×œ Area2D, StaticBody2D, "
+"CollisionPolygon2D משמש רק להספקת צורת התנגשות למפרק היורש "
+"מ-CollisionObject2D. השימוש בו ×”×•× ×¨×§ כצ××¦× ×©×œ Area2D, StaticBody2D, "
"RigidBody2D, KinematicBody2D וכו'."
#: scene/3d/collision_polygon.cpp
@@ -14805,8 +15087,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"×—×œ×§×™×§×™× ×ž×‘×•×¡×¡×™ GPU ××™× × × ×ª×ž×›×™× ×¢×œ-ידי מנהל וויד×ו GLES2.\n"
"השתמש בצומת CPUParticles במקו×. למטרה זו ×”×פשרות \"המר ×œ×—×œ×§×™×§×™× ×©×œ CPU\" "
@@ -14989,8 +15271,8 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"יש ליצור ×ו להגדיר מש×ב SpriteFrames במ×פיין \"Frames\" כדי ש-"
-"AnimatedSprite3D יציג תמוניות."
+"יש ליצור ×ו להגדיר מש×ב SpriteFrames במ×פיין \"Frames\" כדי "
+"ש-AnimatedSprite3D יציג תמוניות."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -15066,9 +15348,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "מפרק ×–×” ×”×•×¦× ×ž×©×™×ž×•×©. יש להשתמש ב-AnimationTree במקו×."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"צבע: #%s\n"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index 65e129c224..eb5c524b8a 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -515,8 +515,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1384,7 +1384,7 @@ msgid "Bus Options"
msgstr "बस विकलà¥à¤ª"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿"
@@ -2186,8 +2186,8 @@ msgstr "मेथड विवरण"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"वरà¥à¤¤à¤®à¤¾à¤¨ में मेथड का विवरण नहीं. आप हमें [color=$color][url=$url]योगदान करके[/url][/"
"color] मदत कर सकते है!"
@@ -3284,7 +3284,13 @@ msgid "Update Continuously"
msgstr "लगातार अपडेट करें"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
+msgstr "जब बदला अदà¥à¤¯à¤¤à¤¨"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "जब बदला अदà¥à¤¯à¤¤à¤¨"
#: editor/editor_node.cpp
@@ -4063,6 +4069,14 @@ msgstr "नाम मे अमानà¥à¤¯ अकà¥à¤·à¤° मौजूद."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4181,7 +4195,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट..."
@@ -4981,19 +4995,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12662,6 +12676,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14017,10 +14039,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14065,17 +14083,195 @@ msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
msgid "Error starting HTTP server:"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿ बचत टाइलसेट!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "डिसà¥à¤•नेकà¥à¤Ÿ"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "सब-रिसोरà¥à¤¸ नहीं मिला."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "थंबनेल बनाना"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14086,6 +14282,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14143,6 +14402,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "अमानà¥à¤¯ रासà¥à¤¤à¤¾à¥¤"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14495,8 +14775,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14738,7 +15018,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index b722aa151a..91849fe548 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -17,8 +17,8 @@ msgstr ""
"Language: hr\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.8-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
@@ -501,8 +501,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1354,7 +1354,7 @@ msgid "Bus Options"
msgstr "Opcije Klase"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliciraj"
@@ -2135,8 +2135,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3168,8 +3168,14 @@ msgid "Update Continuously"
msgstr "Kontinuirano ažuriraj"
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Promijeni"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Promijeni"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3901,6 +3907,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4014,7 +4028,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4811,6 +4825,10 @@ msgid "Rename Animation"
msgstr "Preimenuj animaciju"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliciraj Animaciju"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -4823,10 +4841,6 @@ msgid "Load Animation"
msgstr "UÄitaj Animaciju"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Dupliciraj Animaciju"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Nema animacije za kopirati!"
@@ -12328,6 +12342,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13639,10 +13661,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13684,16 +13702,190 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nevažeće ime."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Nevažeće ime."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Nevažeće ime."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Nevažeće ime."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13704,6 +13896,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13756,6 +14011,26 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Nevažeće ime."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nevažeće ime."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14106,8 +14381,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14347,7 +14622,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 9130ef9507..85150bd14d 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -526,8 +526,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1392,7 +1392,7 @@ msgid "Bus Options"
msgstr "Busz Beállítások"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Megkettőzés"
@@ -2206,8 +2206,8 @@ msgstr "Metódus leírások"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Ennek a metódusnak jelenleg nincs leírása. Segítsen minket azzal, hogy "
"[color=$color][url=$url]hozzájárul eggyel[/url][/color]!"
@@ -3332,10 +3332,16 @@ msgid "Update Continuously"
msgstr "Folyamatos frissítés"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Frissítés, ha megváltozik"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "A paraméter megváltozott"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Frissítési forgó elrejtése"
@@ -4106,6 +4112,14 @@ msgstr "A név érvénytelen karaktereket tartalmaz."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4219,7 +4233,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Megkettőzés..."
@@ -5024,6 +5038,10 @@ msgid "Rename Animation"
msgstr "Animáció Ãtnevezése"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Animáció Megkettőzése"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Következő Megváltozott Keverése"
@@ -5036,10 +5054,6 @@ msgid "Load Animation"
msgstr "Animáció Betöltése"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Animáció Megkettőzése"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Nincs másolható animáció!"
@@ -12665,6 +12679,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Be-Görbe Pozíció Beállítása"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Görbe Pont Pozíció Beállítása"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Görbe Pont Pozíció Beállítása"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14015,10 +14039,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Érvénytelen azonosító:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14063,17 +14083,196 @@ msgstr "Nem sikerült létrehozni a mappát."
msgid "Error starting HTTP server:"
msgstr "Hiba TileSet mentésekor!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Érvénytelen projektnév."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Nem sikerült létrehozni a mappát."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Érvénytelen Alapútvonal."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Nem sikerült betölteni az erőforrást."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Nem sikerült betölteni az erőforrást."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Érvénytelen kiterjesztés."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Érvénytelen kiterjesztés."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nincs Találat!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Indexkép Létrehozása"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Érvénytelen azonosító:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14084,6 +14283,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Érvénytelen rövid csomagnév."
@@ -14136,6 +14398,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Érvénytelen útvonal."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Érvénytelen kiterjesztés."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Érvénytelen termék GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14488,8 +14771,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14729,7 +15012,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 524562bec9..6955f05f3a 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -537,8 +537,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1401,7 +1401,7 @@ msgid "Bus Options"
msgstr "Pilihan Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Gandakan"
@@ -2208,8 +2208,8 @@ msgstr "Deskripsi Method"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Untuk saat ini tidak ada deskripsi metode ini. Tolong bantu kita dengan "
"[color=$color][url=$url]kontribusi[/url][/color]!"
@@ -3324,10 +3324,16 @@ msgid "Update Continuously"
msgstr "Perbarui Terus-menerus"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Perbarui Saat Berubah"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Perubahan Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Sembunyikan Spinner Pembaruan"
@@ -4093,6 +4099,14 @@ msgstr "Nama mengandung karakter tidak valid."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4210,7 +4224,7 @@ msgstr "Urut dari Terakhir Diubah"
msgid "Sort by First Modified"
msgstr "Urut dari Pertama Diubah"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Gandakan..."
@@ -5016,6 +5030,10 @@ msgid "Rename Animation"
msgstr "Ubah Nama Animasi"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Gandakan Animasi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Baur Pergantian Selanjutnya"
@@ -5028,10 +5046,6 @@ msgid "Load Animation"
msgstr "Muat Animasi"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Gandakan Animasi"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Tidak ada animasi untuk disalin!"
@@ -12861,6 +12875,16 @@ msgstr "Ubah Radius Bentuk Silinder"
msgid "Set Occluder Sphere Position"
msgstr "Atur Posisi Kurva Dalam"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Atur Posisi Titik Kurva"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Atur Posisi Titik Kurva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Ubah Radius Silinder"
@@ -14254,10 +14278,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identifier tidak valid:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Ikon yang dibutuhkan tidak ditentukan dalam preset."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Hentikan Server HTTP"
@@ -14300,17 +14320,200 @@ msgstr "Tidak dapat menciptakan direktori server HTTP:"
msgid "Error starting HTTP server:"
msgstr "Kesalahan memulai server HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nama Proyek Tidak Valid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometri tidak valid, tidak dapat membuat poligon."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Tidak dapat membuat folder."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Basis lokasinya tidak valid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Gagal memuat resource."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Gagal memuat resource."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Ekstensi tidak valid."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Ekstensi tidak valid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ikon tidak ditemukan."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Membuat Thumbnail"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Tidak dapat menemukan contoh APK untuk ekspor:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Identifier tidak valid:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14321,6 +14524,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nama pendek paket tidak valid."
@@ -14373,6 +14639,27 @@ msgstr "Dimensi gambar logo 310x150 lebarnya tidak valid (harus 310x150)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Dimensi gambar splash screen tidak valid (harus 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Path tidak valid."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Ekstensi tidak valid."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID produk tidak valid."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14813,8 +15100,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Partikel berbasis GPU tidak didukung oleh driver video GLES2.\n"
"Gunakan CPUParticles saja. Anda dapat menggunakan opsi \"Konversikan ke "
@@ -15083,9 +15370,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Node ini telah usang. Gunakan AnimationTree sebagai gantinya."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Warna:#%s\n"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index 773a89394f..824f7a7248 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -526,8 +526,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1370,7 +1370,7 @@ msgid "Bus Options"
msgstr "Val á kvarða"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2148,8 +2148,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3182,7 +3182,11 @@ msgid "Update Continuously"
msgstr "Samfellt"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3911,6 +3915,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4023,7 +4035,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Hreyfimynd Tvöfalda Lykla"
@@ -4821,19 +4833,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12381,6 +12393,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13699,10 +13719,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13743,16 +13759,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13763,6 +13949,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13815,6 +14064,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14165,8 +14432,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14406,7 +14673,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 0d2c6a07e6..3da90af619 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -37,7 +37,7 @@
# Stefano Merazzi <asso99@hotmail.com>, 2019.
# Sinapse X <sinapsex13@gmail.com>, 2019.
# Micila Micillotto <micillotto@gmail.com>, 2019, 2020, 2021.
-# Mirko Soppelsa <miknsop@gmail.com>, 2019, 2020, 2021.
+# Mirko Soppelsa <miknsop@gmail.com>, 2019, 2020, 2021, 2022.
# No <kingofwizards.kw7@gmail.com>, 2019.
# StarFang208 <polaritymanx@yahoo.it>, 2019.
# Katia Piazza <gydey@ridiculousglitch.com>, 2019, 2021.
@@ -65,13 +65,14 @@
# Fabio Plos <altre0cose@gmail.com>, 2021.
# Theraloss <danilo.polani@gmail.com>, 2021.
# Pietro Grungo <pietro.grungo@libero.it>, 2021.
+# Alfonso Scarpino <alfonso.scarpino@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-06 01:53+0000\n"
-"Last-Translator: Riteo Siuga <riteo@posteo.net>\n"
+"PO-Revision-Date: 2022-01-31 22:50+0000\n"
+"Last-Translator: Mirko <miknsop@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -79,7 +80,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -381,9 +382,8 @@ msgid "Duplicate Key(s)"
msgstr "Duplica i fotogrammi chiave selezionati"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Aggiungi %d frame"
+msgstr "Aggiungi valore(i) di RESET"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -560,9 +560,8 @@ msgstr ""
"si tratta di una singola traccia."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Scala delle chiavi d'animazione"
+msgstr "Aggiungi chiavi di RESET animazione"
#: editor/animation_track_editor.cpp
msgid ""
@@ -571,8 +570,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1438,7 +1437,7 @@ msgid "Bus Options"
msgstr "Opzioni Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplica"
@@ -1550,7 +1549,7 @@ msgstr "Nome non valido."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Non può iniziare con una cifra."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -1949,7 +1948,7 @@ msgstr "Rendi attuale"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr "Importa"
+msgstr "Importazione"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -2186,9 +2185,8 @@ msgid "Properties"
msgstr "Proprietà"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "sovrascrivi:"
+msgstr "sovrascrive %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2248,11 +2246,11 @@ msgstr "Descrizioni del metodo"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Al momento non esiste alcuna descrizione per questo metodo. Aiutaci [color="
-"$color][url=$url]aggiungendone una[/url][/color]!"
+"Al momento non esiste alcuna descrizione per questo metodo. Aiutaci "
+"[color=$color][url=$url]aggiungendone una[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2328,18 +2326,19 @@ msgid "Property:"
msgstr "Proprietà:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(valore)"
+msgstr "Fissa valore"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
msgstr ""
+"Fissare un valore ne forza il salvataggio anche se è uguale al valore "
+"predefinito."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Fissa valore [Disabilitato perché '%s' è solo per l'editor]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2354,26 +2353,23 @@ msgstr "Imposta più valori:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "%s fissato"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "%s non fissato"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Copia Proprietà"
+msgstr "Copia proprietà"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Incolla Proprietà"
+msgstr "Incolla proprietà"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Copia il percorso dello script"
+msgstr "Copia il percorso della proprietà"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2850,8 +2846,8 @@ msgstr "Impossibile trovare il campo dello script per l'estensione in: \"%s\"."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s'."
msgstr ""
-"Impossibile caricare lo script di un componente aggiuntivo dal percorso: \"%s"
-"\"."
+"Impossibile caricare lo script di un componente aggiuntivo dal percorso: "
+"\"%s\"."
#: editor/editor_node.cpp
msgid ""
@@ -2873,8 +2869,8 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
-"Impossibile caricare lo script di un componente aggiuntivo dal percorso: \"%s"
-"\" Lo script non è in modalità strumento."
+"Impossibile caricare lo script di un componente aggiuntivo dal percorso: "
+"\"%s\" Lo script non è in modalità strumento."
#: editor/editor_node.cpp
msgid ""
@@ -3110,9 +3106,8 @@ msgid "Install Android Build Template..."
msgstr "Installa il modello di costruzione per Android…"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Apri la cartella dei dati dell'editor"
+msgstr "Apri la cartella dei dati utente"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3200,7 +3195,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr ""
+msgstr "Forza fallback dello shader"
#: editor/editor_node.cpp
msgid ""
@@ -3211,6 +3206,13 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Quando questa opzione è abilitata, gli shader verranno utilizzati nella loro "
+"forma di fallback (visibili tramite un ubershader o nascosti) durante tutto "
+"il tempo di esecuzione.\n"
+"Ciò è utile per verificare l'aspetto e le prestazioni dei fallback, che "
+"normalmente vengono visualizzati brevemente.\n"
+"La compilazione asincrona degli shader deve essere abilitata nelle "
+"impostazioni del progetto affinché questa opzione abbia effetto."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3375,10 +3377,16 @@ msgid "Update Continuously"
msgstr "Aggiorna continuamente"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Aggiorna quando modificata"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Cambiamenti dei materiali:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Nascondi la rotella di aggiornamento"
@@ -3596,14 +3604,12 @@ msgid "Average Time (ms)"
msgstr "Tempo medio (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame %"
-msgstr "% fotogramma"
+msgstr "Fotogramma %"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Physics Frame %"
-msgstr "% fotogramma fisico"
+msgstr "Fotogramma fisico %"
#: editor/editor_profiler.cpp
msgid "Inclusive"
@@ -3827,9 +3833,8 @@ msgstr "Importa Da Nodo:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Errore"
+msgstr "Errore %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3877,9 +3882,8 @@ msgid "Request failed."
msgstr "Richiesta fallita."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Richiesta bloccata in un ciclo di reindirizzamento."
+msgstr "La richiesta è finita in un ciclo di reindirizzamento."
#: editor/export_template_manager.cpp
msgid "Request failed:"
@@ -3906,11 +3910,10 @@ msgid "Error getting the list of mirrors."
msgstr "Errore nella ricezione della lista dei mirror."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
msgstr ""
-"Errore elaborazione JSON della lista dei mirror. Si prega di segnalare "
-"questo problema!"
+"Errore nell'elaborazione del JSON della lista dei mirror. Si prega di "
+"segnalare questo problema!"
#: editor/export_template_manager.cpp
msgid "Best available mirror"
@@ -3967,24 +3970,23 @@ msgid "SSL Handshake Error"
msgstr "Errore Handshake SSL"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Impossibile aprire zip dei template d'esportazione."
+msgstr "Impossibile aprire il file di esportazione dei modelli."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Invalid version.txt format inside the export templates file: %s."
-msgstr "Formato di version.txt non valido nei templates: %s."
+msgstr ""
+"Formato di version.txt non valido nel file di esportazione dei modelli: %s."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "No version.txt found inside the export templates file."
-msgstr "Non é stato trovato version.txt all'interno di templates."
+msgstr ""
+"Non è stato trovato version.txt all'interno del file di esportazione dei "
+"modelli."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error creating path for extracting templates:"
-msgstr "Errore di creazione del percorso per i template:"
+msgstr "Errore nella creazione del percorso per l'estrazione dei modelli:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3995,9 +3997,8 @@ msgid "Importing:"
msgstr "Importo:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Remove templates for the version '%s'?"
-msgstr "Rimuovere versione \"%s\" del template?"
+msgstr "Rimuovere i modelli per la versione '%s'?"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
@@ -4020,9 +4021,8 @@ msgid "Export templates are installed and ready to be used."
msgstr "I modelli d'esportazione sono installati e pronti all'uso."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open Folder"
-msgstr "Apri file"
+msgstr "Apri cartella"
#: editor/export_template_manager.cpp
msgid "Open the folder containing installed templates for the current version."
@@ -4034,23 +4034,20 @@ msgid "Uninstall"
msgstr "Disinstalla"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Disinstalla template dalla versione attuale."
+msgstr "Disinstalla i modelli per la versione attuale."
#: editor/export_template_manager.cpp
msgid "Download from:"
msgstr "Scarica da:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open in Web Browser"
-msgstr "Esegui nel Browser"
+msgstr "Apri nel browser web"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Copy Mirror URL"
-msgstr "Copia Errore"
+msgstr "Copia URL mirror"
#: editor/export_template_manager.cpp
msgid "Download and Install"
@@ -4071,9 +4068,8 @@ msgstr ""
"sviluppo."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install from File"
-msgstr "Installa da File"
+msgstr "Installa da file"
#: editor/export_template_manager.cpp
msgid "Install templates from a local file."
@@ -4085,7 +4081,6 @@ msgid "Cancel"
msgstr "Annulla"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
msgstr "Annulla lo scaricamento dei modelli."
@@ -4168,6 +4163,14 @@ msgstr "Il nome contiene caratteri non validi."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4283,11 +4286,10 @@ msgid "Sort by Last Modified"
msgstr "Ordina per Ultima Modifica"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by First Modified"
-msgstr "Ordina per Prima Modifica"
+msgstr "Ordina per primo modificato"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplica..."
@@ -4388,9 +4390,8 @@ msgid "Replace..."
msgstr "Sostituisci..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "Sostituisci tutti"
+msgstr "Sostituisci nei file"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4401,9 +4402,8 @@ msgid "Replace: "
msgstr "Sostituisci: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "Sostituisci tutti"
+msgstr "Sostituisci tutto (NESSUN ANNULLA)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4770,7 +4770,6 @@ msgid "Create points."
msgstr "Crea punti."
#: editor/plugins/abstract_polygon_2d_editor.cpp
-#, fuzzy
msgid ""
"Edit points.\n"
"LMB: Move Point\n"
@@ -5105,6 +5104,10 @@ msgid "Rename Animation"
msgstr "Rinomina Animazione"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplica Animazione"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Fondi il Successivo Cambiato"
@@ -5117,10 +5120,6 @@ msgid "Load Animation"
msgstr "Carica Animazione"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplica Animazione"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Nessuna animazione da copiare!"
@@ -5685,7 +5684,7 @@ msgstr "Ultimo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
-msgstr "Tutti"
+msgstr "Tutto"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
@@ -6170,7 +6169,6 @@ msgid "Toggle smart snapping."
msgstr "Commuta lo scatto intelligente."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Use Smart Snap"
msgstr "Usa lo scatto intelligente"
@@ -6180,7 +6178,6 @@ msgid "Toggle grid snapping."
msgstr "Commuta la griglia magnetica."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Use Grid Snap"
msgstr "Usa la griglia magnetica"
@@ -6320,7 +6317,6 @@ msgid "Always Show Grid"
msgstr "Mostra sempre Griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Show Helpers"
msgstr "Mostra guide"
@@ -8495,7 +8491,6 @@ msgid "Focus Selection"
msgstr "Centra la Selezione"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Freelook"
msgstr "Commuta la vista libera"
@@ -8515,10 +8510,9 @@ msgstr "Ripristina le impostazioni predefinite"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Transform"
-msgstr "Trasforma"
+msgstr "Trasformazione"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Object to Floor"
msgstr "Scatta l'oggetto sul suolo"
@@ -11801,8 +11795,8 @@ msgid ""
"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
"'\"'."
msgstr ""
-"Nome azione non valida. Non può essere vuoto né contenere \"/\", \":\", \"="
-"\", \"\\\" o \"\"\"."
+"Nome azione non valida. Non può essere vuoto né contenere \"/\", \":\", "
+"\"=\", \"\\\" o \"\"\"."
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -11886,6 +11880,7 @@ msgid "Action:"
msgstr "Azione:"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Action"
msgstr "Azione"
@@ -13003,6 +12998,16 @@ msgstr "Imposta Raggio della Sfera Occlusore"
msgid "Set Occluder Sphere Position"
msgstr "Imposta Posizione della Sfera Occlusore"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Imposta Posizione Punto Portale"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Imposta Posizione Punto Curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Modifica Raggio del Cilindro"
@@ -13731,7 +13736,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Condition"
-msgstr "animazione"
+msgstr "Condizione"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
@@ -13777,7 +13782,7 @@ msgstr "Rinomina cartella:"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Switch"
-msgstr "Inclinazione:"
+msgstr "Switch"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
@@ -13901,7 +13906,7 @@ msgstr "VariableSet non trovato nello script: "
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "Preload"
-msgstr "Ricarica"
+msgstr "Preload"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -14010,8 +14015,9 @@ msgid "Yield"
msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
+#, fuzzy
msgid "Wait"
-msgstr ""
+msgstr "Wait"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14417,10 +14423,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificatore non valido:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "L'icona richiesta non è specificata nel preset."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Ferma il server HTTP"
@@ -14461,16 +14463,202 @@ msgstr "Impossibile creare la directory per il server HTTP:"
msgid "Error starting HTTP server:"
msgstr "Errore all'avvio del server HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nome del progetto non valido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometria non valida, impossibile creare il poligono."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Impossibile creare la cartella."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Percorso di base non valido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Caricamento della risorsa fallito."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Caricamento della risorsa fallito."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Estensione non valida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Estensione non valida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nessuna icona trovata."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creando la miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Impossibile trovare il template APK per l'esportazione:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificatore del bundle non valido:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Autenticazione: è richiesta la firma del codice."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Autenticazione: è richiesto un runtime rafforzato."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Autenticazione: è richiesto un runtime rafforzato."
#: platform/osx/export/export.cpp
@@ -14481,6 +14669,69 @@ msgstr "Autenticazione: nome Apple ID non specificato."
msgid "Notarization: Apple ID password not specified."
msgstr "Autenticazione: password Apple ID non specificato."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nome breve del pacchetto non valido."
@@ -14547,6 +14798,27 @@ msgstr ""
"Dimensioni per l'immagine dello splash screen non valide (dovrebbero essere "
"620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Percorso non valido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Estensione non valida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID prodotto invalido."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14991,8 +15263,8 @@ msgstr "Solo scale uniformi sono supportate."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Le particelle basate su GPU non sono supportate dal driver video GLES2.\n"
"Utilizzare invece il nodo CPUParticles. A tale scopo è possibile utilizzare "
@@ -15285,9 +15557,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Questo nodo è stato deprecato. Usa invece un AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Colore: #%s\n"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 1e6c425b50..de6c22ce1a 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -18,7 +18,7 @@
# sugusan <sugusan.development@gmail.com>, 2018, 2019, 2021.
# Nathan Lovato <nathan.lovato.art@gmail.com>, 2018.
# nyanode <akaruooyagi@yahoo.co.jp>, 2018.
-# nitenook <admin@alterbaum.net>, 2018, 2019, 2020, 2021.
+# nitenook <admin@alterbaum.net>, 2018, 2019, 2020, 2021, 2022.
# Rob Matych <robertsmatych@gmail.com>, 2018.
# Hidetsugu Takahashi <manzyun@gmail.com>, 2019.
# Wataru Onuki <watonu@magadou.com>, 2019.
@@ -26,22 +26,24 @@
# Takuya Watanabe <watanabe@zblog.sakura.ne.jp>, 2019.
# Sodium11 <Sodium11.for.gitserver@gmail.com>, 2019.
# leela <53352@protonmail.com>, 2019.
-# Tarou Yamada <mizuningyou@yahoo.co.jp>, 2019, 2021.
+# Tarou Yamada <mizuningyou@yahoo.co.jp>, 2019, 2021, 2022.
# kazuma kondo <kazmax7@gmail.com>, 2019.
# Akihiro Ogoshi <technical@palsystem-game.com>, 2019, 2020.
-# Wataru Onuki <bettawat@yahoo.co.jp>, 2020, 2021.
+# Wataru Onuki <bettawat@yahoo.co.jp>, 2020, 2021, 2022.
# sporeball <sporeballdev@gmail.com>, 2020.
# BinotaLIU <me@binota.org>, 2020, 2021.
# 都築 æœ¬æˆ <motonari728@gmail.com>, 2021.
# Nanjakkun <nanjakkun@gmail.com>, 2021.
# Lemoney <railkill@gmail.com>, 2021.
+# Hiroki Taira <hrk4649@gmail.com>, 2022.
+# Juto <mvobujd237@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-16 14:06+0000\n"
-"Last-Translator: nitenook <admin@alterbaum.net>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
"Language: ja\n"
@@ -49,7 +51,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.10-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -72,7 +74,7 @@ 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."
@@ -536,8 +538,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1400,7 +1402,7 @@ msgid "Bus Options"
msgstr "ãƒã‚¹ オプション"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "複製"
@@ -1512,7 +1514,7 @@ msgstr "無効ãªåå‰ã§ã™ã€‚"
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "æ•°å­—ã§å§‹ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2142,9 +2144,8 @@ msgid "Properties"
msgstr "プロパティ"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "上書ã:"
+msgstr "%s を上書ã:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2204,8 +2205,8 @@ msgstr "メソッドã®èª¬æ˜Ž"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"ç¾åœ¨ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®èª¬æ˜Žã¯ã‚りã¾ã›ã‚“。[color=$color][url=$url]貢献[/url][/"
"color]ã—ã¦ç§ãŸã¡ã‚’助ã‘ã¦ãã ã•ã„ï¼"
@@ -2317,19 +2318,16 @@ msgid "Unpinned %s"
msgstr ""
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
msgstr "プロパティをコピー"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
msgstr "プロパティを貼り付ã‘"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "スクリプトã®ãƒ‘スをコピー"
+msgstr "プロパティã®ãƒ‘スをコピー"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2564,8 +2562,7 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ¼ãƒ³ã«å±žã—ã¦ã„ã‚‹ãŸã‚ã€ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›"
-"ん。\n"
+"ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸã‚·ãƒ¼ãƒ³ã«å±žã—ã¦ã„ã‚‹ãŸã‚ã€ç·¨é›†ã§ãã¾ã›ã‚“。\n"
"ã“ã®ãƒ¯ãƒ¼ã‚¯ãƒ•ローをよりよãç†è§£ã™ã‚‹ãŸã‚ã«ã€ã‚·ãƒ¼ãƒ³ã®èª­ã¿è¾¼ã¿ã«é–¢é€£ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡"
"ントをãŠèª­ã¿ãã ã•ã„。"
@@ -2633,11 +2630,11 @@ msgstr "クイックオープン..."
#: editor/editor_node.cpp
msgid "Quick Open Scene..."
-msgstr "シーンã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..."
+msgstr "シーンをクイックオープン..."
#: editor/editor_node.cpp
msgid "Quick Open Script..."
-msgstr "スクリプトã®ã‚¯ã‚¤ãƒƒã‚¯ã‚ªãƒ¼ãƒ—ン..."
+msgstr "スクリプトをクイックオープン..."
#: editor/editor_node.cpp
msgid "Save & Close"
@@ -2664,8 +2661,8 @@ msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
msgstr ""
-"シーンをä¿å­˜ã™ã‚‹ã«ã¯ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ãŒå¿…è¦ã§ã™ã€‚シーンツリーã®ãƒ‰ãƒƒã‚¯ã‹ã‚‰ã€ãƒ«ãƒ¼ãƒˆ"
-"ノードを追加ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+"シーンをä¿å­˜ã™ã‚‹ã«ã¯ãƒ«ãƒ¼ãƒˆãƒŽãƒ¼ãƒ‰ãŒå¿…è¦ã§ã™ã€‚シーンツリーã®ãƒ‰ãƒƒã‚¯ã‹ã‚‰ãƒ«ãƒ¼ãƒˆ"
+"ノードを追加ã§ãã¾ã™ã€‚"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -3054,9 +3051,8 @@ msgid "Install Android Build Template..."
msgstr "Androidビルドテンプレートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "エディターã®ãƒ‡ãƒ¼ã‚¿ãƒ•ォルダーを開ã"
+msgstr "ユーザーデータフォルダーを開ã"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3208,7 +3204,7 @@ msgstr "スクリーンショットを撮る"
#: editor/editor_node.cpp
msgid "Screenshots are stored in the Editor Data/Settings Folder."
msgstr ""
-"スクリーンショット㯠エディターã®ãƒ‡ãƒ¼ã‚¿ / 設定フォルダー ã«ä¿å­˜ã•れã¦ã„ã¾ã™ã€‚"
+"スクリーンショットã¯ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã®ãƒ‡ãƒ¼ã‚¿ / 設定フォルダーã«ä¿å­˜ã•れã¾ã™ã€‚"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
@@ -3320,10 +3316,16 @@ msgid "Update Continuously"
msgstr "ç¶™ç¶šçš„ã«æ›´æ–°"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "å¤‰æ›´æ™‚ã«æ›´æ–°"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "マテリアルã®å¤‰æ›´:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "アップデートスピナーをéžè¡¨ç¤º"
@@ -3765,9 +3767,8 @@ msgstr "ノードã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "エラー"
+msgstr "%s エラー"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4091,6 +4092,14 @@ msgstr "åå‰ã«ä½¿ç”¨ã§ããªã„文字ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4209,7 +4218,7 @@ msgstr "æ›´æ–°æ—¥æ™‚ãŒæ–°ã—ã„é †ã§ä¸¦ã³æ›¿ãˆ"
msgid "Sort by First Modified"
msgstr "更新日時ãŒå¤ã„é †ã§ä¸¦ã³æ›¿ãˆ"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "複製..."
@@ -4309,9 +4318,8 @@ msgid "Replace..."
msgstr "ç½®æ›..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "ã™ã¹ã¦ç½®æ›"
+msgstr "複数ファイル内ã§ç½®æ›"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4322,9 +4330,8 @@ msgid "Replace: "
msgstr "ç½®æ›: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "ã™ã¹ã¦ç½®æ›"
+msgstr "ã™ã¹ã¦ç½®æ› (å…ƒã«æˆ»ã›ã¾ã›ã‚“)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4549,6 +4556,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"ファイルシステムや Inspector ã«ã‚ã‚‹ Resource ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆè¨­å®š"
+"を調整ã—ã¦ãã ã•ã„。"
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5015,6 +5024,10 @@ msgid "Rename Animation"
msgstr "アニメーションã®åå‰ã‚’変更"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "アニメーションを複製"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "次ã®å¤‰æ›´ã‚’ブレンド"
@@ -5027,10 +5040,6 @@ msgid "Load Animation"
msgstr "アニメーション読ã¿è¾¼ã¿"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "アニメーションを複製"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "コピーã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚りã¾ã›ã‚“ï¼"
@@ -6008,9 +6017,8 @@ msgid "Alt+Drag: Move selected node."
msgstr "Alt+ドラッグ: é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã‚’移動。"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+ドラッグ: é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã‚’移動。"
+msgstr "Alt+ドラッグ: é¸æŠžã—㟠Node を移動。"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
@@ -6143,9 +6151,8 @@ msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®ä½ç½®ã‚’ロック (移動ä¸å¯èƒ½ã«ã
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "é¸æŠžå¯¾è±¡ã‚’ãƒ­ãƒƒã‚¯"
+msgstr "é¸æŠž Node をロック"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6154,9 +6161,8 @@ msgstr "é¸æŠžã—ãŸã‚ªãƒ–ジェクトをロック解除 (移動å¯èƒ½ã«ã™ã‚‹)
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "é¸æŠžå¯¾è±¡ã‚’ãƒ­ãƒƒã‚¯è§£é™¤"
+msgstr "é¸æŠž Node をロック解除"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6165,9 +6171,8 @@ msgstr "オブジェクトã®å­ã‚’é¸æŠžä¸å¯ã«ã™ã‚‹ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "é¸æŠžå¯¾è±¡ã‚’ã‚°ãƒ«ãƒ¼ãƒ—åŒ–"
+msgstr "é¸æŠž Node をグループ化"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6176,9 +6181,8 @@ msgstr "オブジェクトã®å­ã‚’é¸æŠžå¯èƒ½ã«æˆ»ã™ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "é¸æŠžå¯¾è±¡ã‚’ã‚°ãƒ«ãƒ¼ãƒ—è§£é™¤"
+msgstr "é¸æŠž Node をグループ解除"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -6903,7 +6907,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"
@@ -7824,9 +7828,8 @@ msgid "Find in Files..."
msgstr "複数ファイル内を検索..."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "ç½®æ›..."
+msgstr "複数ファイル内ã§ç½®æ›..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -8353,16 +8356,15 @@ msgstr "フリールックã®ã‚ªãƒ³ / オフ"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "視野を狭ã‚ã‚‹"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "視野を広ã’ã‚‹"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™"
+msgstr "è¦–é‡Žã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -9091,22 +9093,19 @@ msgstr "タイプを追加"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "タイプã®ãƒªã‚¹ãƒˆã‚’フィルタã™ã‚‹ã‹æ–°è¦ã‚«ã‚¹ã‚¿ãƒ ã‚¿ã‚¤ãƒ—を作æˆã™ã‚‹:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "利用å¯èƒ½ãªãƒ—ロファイル:"
+msgstr "利用å¯èƒ½ãª Node ベースã®ã‚¿ã‚¤ãƒ—:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "ファイルåãŒç©ºã§ã™ã€‚"
+msgstr "タイプåãŒç©ºã§ã™ï¼"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Are you sure you want to create an empty type?"
-msgstr "複数ã®ãƒ—ロジェクトを開ã„ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+msgstr "空ã®ã‚¿ã‚¤ãƒ—を作æˆã—ã¾ã™ã‹ï¼Ÿ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Confirm Item Rename"
@@ -9742,53 +9741,49 @@ msgstr "エラー"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"リモート設定ãŒç©ºã§ã™ã€‚ã“ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’使用ã™ã‚‹VCSã®æ©Ÿèƒ½ã¯å‹•作ã—ãªã„ã‹ã‚‚ã—れ"
+"ã¾ã›ã‚“。"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "åå‰ãŒä»˜ã„ã¦ã„ã¾ã›ã‚“。"
+msgstr "コミットメッセージãŒã‚りã¾ã›ã‚“。"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "コミット"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "シェーダーã®å¤‰æ›´:"
+msgstr "ステージ済ã®å¤‰æ›´"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "シェーダーã®å¤‰æ›´:"
+msgstr "未ステージã®å¤‰æ›´"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "コミット"
+msgstr "コミット:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "日付:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "サブツリー"
+msgstr "サブタイトル:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "%s ブランãƒã‚’削除ã—ã¾ã™ã‹?"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "複数ã®ãƒ—ロジェクトを開ã„ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
+msgstr "リモート㮠%s ブランãƒã‚’削除ã—ã¾ã™ã‹ï¼Ÿ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "リセット"
+msgstr "é©ç”¨"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9799,148 +9794,133 @@ msgid "Initialize"
msgstr "åˆæœŸåŒ–"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "ãƒã‚¤ãƒ³ãƒˆã‚’削除"
+msgstr "リモートログイン"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "åå‰ã®å¤‰æ›´"
+msgstr "ユーザーå"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "パスワード"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "SSH 公開éµãƒ‘ス"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "SSH 公開éµãƒ‘ã‚¹ã‚’é¸æŠžã—ã¦ãã ã•ã„"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "SSH 秘密éµãƒ‘ス"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "SSH 秘密éµãƒ‘ã‚¹ã‚’é¸æŠžã—ã¦ãã ã•ã„"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH パスフレーズ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "æ–°ã—ã„変更点を検出"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "変更をä¿å­˜ã—ã¦é–‰ã˜ã¾ã™ã‹ï¼Ÿ"
+msgstr "ã™ã¹ã¦ã®å¤‰æ›´ã‚’破棄"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "ローカルã®å¤‰æ›´ã‚’ä¿å­˜..."
+msgstr "変更をステージã«ä¸Šã’ã‚‹"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "マテリアルã®å¤‰æ›´:"
+msgstr "ã™ã¹ã¦ã®å¤‰æ›´ã‚’ステージã‹ã‚‰ä¸‹ã’ã‚‹"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Commit Message"
-msgstr "変更をコミットã™ã‚‹"
+msgstr "メッセージをコミットã™ã‚‹"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "変更をコミットã™ã‚‹"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "コミット"
+msgstr "コミットリスト"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "コミットリストサイズ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "一致:"
+msgstr "ブランãƒ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "æ–°è¦ãƒ—ロジェクトを作æˆ"
+msgstr "æ–°è¦ãƒ–ランãƒã‚’作æˆ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "アニメーショントラックを除去"
+msgstr "ブランãƒã‚’削除"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "ブランãƒå"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
msgstr "リモート"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "æ–°è¦ãƒ—ロジェクトを作æˆ"
+msgstr "æ–°è¦ãƒªãƒ¢ãƒ¼ãƒˆã‚’作æˆ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "アイテムを除去"
+msgstr "リモートを削除"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "リモート "
+msgstr "リモートå"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "リモート "
+msgstr "リモート URL"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "フェッãƒ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "プル"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "プッシュ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "ソースメッシュ:"
+msgstr "強制プッシュ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9960,22 +9940,19 @@ msgstr "タイプ変更"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "未マージ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "ビュー"
+msgstr "ビュー:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "パスを分割"
+msgstr "分割"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "変更済ã¿"
+msgstr "çµ±åˆæ¸ˆã¿"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12111,6 +12088,9 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"ã™ã§ã«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã—ãŸã‚·ãƒ¼ãƒ³ã®å­ã§ã‚るブランãƒã¯ä¿å­˜ã§ãã¾ã›ã‚“。\n"
+"ã“ã®ãƒ–ランãƒã‚’自身ã®ã‚·ãƒ¼ãƒ³ã§ä¿å­˜ã™ã‚‹ã«ã¯ã€å…ƒã®ã‚·ãƒ¼ãƒ³ã‚’é–‹ãã€ãƒ–ランãƒã‚’å³ã‚¯"
+"リックã—ã¦ã€\"ブランãƒã‚’シーンã¨ã—ã¦ä¿å­˜\"ã‚’é¸æŠžã—ã¦ãã ã•ã„。"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12118,6 +12098,9 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"継承シーンã®ä¸€éƒ¨ã§ã‚るブランãƒã¯ä¿å­˜ã§ãã¾ã›ã‚“。\n"
+"ã“ã®ãƒ–ランãƒã‚’自身ã®ã‚·ãƒ¼ãƒ³ã§ä¿å­˜ã™ã‚‹ã«ã¯ã€å…ƒã®ã‚·ãƒ¼ãƒ³ã‚’é–‹ãã€ãƒ–ランãƒã‚’å³ã‚¯"
+"リックã—ã¦ã€\"ブランãƒã‚’シーンã¨ã—ã¦ä¿å­˜\"ã‚’é¸æŠžã—ã¦ãã ã•ã„。"
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12793,6 +12776,16 @@ msgstr "オクルーダーã®çƒå½¢ã®åŠå¾„をセット"
msgid "Set Occluder Sphere Position"
msgstr "オクルーダーã®çƒå½¢ã®ä½ç½®ã‚’セット"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Portal ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’設定"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "カーブãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’設定"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "円柱ã®åŠå¾„を変更"
@@ -12863,7 +12856,7 @@ msgstr "ライブラリ: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
-msgstr "GDNative"
+msgstr "\\ GDNative"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
@@ -13128,7 +13121,7 @@ msgstr "分割中..."
#: modules/navigation/navigation_mesh_generator.cpp
msgid "Creating contours..."
-msgstr "輪郭を作æˆã—ã¦ã„ã¾ã™..."
+msgstr "輪郭を生æˆä¸­..."
#: modules/navigation/navigation_mesh_generator.cpp
msgid "Creating polymesh..."
@@ -13508,18 +13501,16 @@ msgid "Edit Member"
msgstr "メンãƒãƒ¼ã‚’編集"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "å¼ã‚’設定"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Return(戻り値)"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "アニメーション"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
@@ -13535,7 +13526,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "イテレータ"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
@@ -13558,23 +13549,20 @@ msgid "Sequence"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "フォルダーåを変更:"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "ピッãƒ:"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "åž‹:"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
@@ -13585,14 +13573,12 @@ msgid "On %s"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "自己"
+msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "文字 %s"
+msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
@@ -13603,23 +13589,20 @@ msgid "Divide %s"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "%s を追加"
+msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "%s を設定"
+msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "%s を追加"
+msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
@@ -13797,7 +13780,7 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Wait(待機)"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -13976,8 +13959,8 @@ msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" "
"or \"OpenXR\"."
msgstr ""
-"\"Hand Tracking\" 㯠\"Xr Mode\" ㌠\"Oculus Mobile VrApi\" ã¾ãŸã¯ \"OpenXR"
-"\" ã®å ´åˆã«ã®ã¿æœ‰åйã§ã™ã€‚"
+"\"Hand Tracking\" 㯠\"Xr Mode\" ㌠\"Oculus Mobile VrApi\" ã¾ãŸã¯ "
+"\"OpenXR\" ã®å ´åˆã«ã®ã¿æœ‰åйã§ã™ã€‚"
#: platform/android/export/export_plugin.cpp
msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"."
@@ -14183,10 +14166,6 @@ msgstr "App Store ãƒãƒ¼ãƒ ID ãŒæœªæŒ‡å®š - プロジェクトを構æˆã§ãã
msgid "Invalid Identifier:"
msgstr "無効ãªè­˜åˆ¥å­:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "必須アイコンãŒãƒ—ãƒªã‚»ãƒƒãƒˆã«æŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。"
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "HTTPサーãƒãƒ¼ã‚’æ­¢ã‚ã‚‹"
@@ -14227,16 +14206,202 @@ msgstr "HTTPサーãƒãƒ¼ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæˆã«å¤±æ•—:"
msgid "Error starting HTTP server:"
msgstr "HTTPサーãƒãƒ¼ã®é–‹å§‹ã«å¤±æ•—:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "無効ãªãƒ—ロジェクトåã§ã™ã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "ジオメトリãŒç„¡åйã§ã™ã€‚ãƒãƒªã‚´ãƒ³ã‚’作æˆã§ãã¾ã›ã‚“。"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "フォルダーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "無効ãªãƒ™ãƒ¼ã‚¹ãƒ‘スã§ã™ã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "リソースã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "リソースã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "ç„¡åŠ¹ãªæ‹¡å¼µå­ã§ã™ã€‚"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "ç„¡åŠ¹ãªæ‹¡å¼µå­ã§ã™ã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "アイコンãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "サムãƒã‚¤ãƒ«ã‚’作æˆä¸­"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートAPKãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "無効ãªãƒãƒ³ãƒ‰ãƒ«ID:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarization: コード署åãŒå¿…è¦ã§ã™ã€‚"
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarization: hardened runtime ãŒå¿…è¦ã§ã™ã€‚"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarization: hardened runtime ãŒå¿…è¦ã§ã™ã€‚"
#: platform/osx/export/export.cpp
@@ -14247,6 +14412,69 @@ msgstr "Notarization: Apple ID åãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。"
msgid "Notarization: Apple ID password not specified."
msgstr "Notarization: Apple ID ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。"
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "パッケージã®ã‚·ãƒ§ãƒ¼ãƒˆãƒãƒ¼ãƒ ãŒç„¡åйã§ã™ã€‚"
@@ -14306,6 +14534,27 @@ msgstr ""
"スプラッシュスクリーンã®ç”»åƒã‚µã‚¤ã‚ºãŒç„¡åйã§ã™(縦横620x300ã§ãªã‘れã°ãªã‚Šã¾ã›"
"ん)。"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "パスãŒç„¡åйã§ã™ã€‚"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "ç„¡åŠ¹ãªæ‹¡å¼µå­ã§ã™ã€‚"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "無効ãªãƒ—ロダクト GUIDã§ã™ã€‚"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14432,13 +14681,15 @@ msgstr "ã“ã®é®è”½ç”¨ã®ã‚ªã‚¯ãƒ«ãƒ¼ãƒ€ãƒ¼ãƒãƒªã‚´ãƒ³ã¯ç©ºã§ã™ã€‚ãƒãƒªã‚´
#: scene/2d/navigation_agent_2d.cpp
msgid "The NavigationAgent2D can be used only under a Node2D node."
-msgstr ""
+msgstr "NavigationAgent2D 㯠Node2Dノードã®ä¸‹ã§ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚"
#: scene/2d/navigation_obstacle_2d.cpp
msgid ""
"The NavigationObstacle2D only serves to provide collision avoidance to a "
"Node2D object."
msgstr ""
+"NavigationObstacle2D ã¯ã‚³ãƒªã‚¸ãƒ§ãƒ³å›žé¿ã‚’ Node2D ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æä¾›ã™ã‚‹ãŸã‚ã ã‘"
+"ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚"
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14464,7 +14715,6 @@ msgstr ""
"ã®ã¿å‹•作ã—ã¾ã™ã€‚"
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
@@ -14472,8 +14722,8 @@ msgid ""
msgstr ""
"GPUベースã®ãƒ‘ーティクルã¯ã€GLES2ビデオドライãƒãƒ¼ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›"
"ん。\n"
-"代ã‚りã«CPUParticles2Dノードを使用ã—ã¦ãã ã•ã„。ã“ã®ç›®çš„ã®ãŸã‚ã« \"CPUパー"
-"ティクルã«å¤‰æ›\" オプションを使用ã§ãã¾ã™ã€‚"
+"代ã‚りã«CPUParticles2Dノードを使用ã—ã¦ãã ã•ã„。ã“ã®ç›®çš„ã®ãŸã‚ã« "
+"\"CPUParticles2D ã«å¤‰æ›\" オプションを使用ã§ãã¾ã™ã€‚"
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14483,6 +14733,12 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"macOSã§ã¯ã€ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォームフィードãƒãƒƒã‚¯ãŒGPUã§ã¯ãªãCPUã§å®Ÿè£…ã•れã¦ã„ã‚‹ãŸ"
+"ã‚ã€Particles2D ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã¯ CPUParticles2D よりã¨ã¦ã‚‚低速ã§ã™ã€‚\n"
+"macOS をターゲットã«ã™ã‚‹å ´åˆã¯ CPUParticles2D を使用ã™ã‚‹ã“ã¨ã‚’検討ãã ã•"
+"ã„。\n"
+"ã“ã®ç›®çš„ã®ãŸã‚ã« \"CPUParticles2D ã«å¤‰æ›\" ツールãƒãƒ¼ã‚ªãƒ—ションを使用ã™ã‚‹ã“ã¨"
+"ãŒå¯èƒ½ã§ã™ã€‚"
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14713,7 +14969,7 @@ msgstr "90度を超ãˆã‚‹è§’度ã®ã‚¹ãƒãƒƒãƒˆãƒ©ã‚¤ãƒˆã¯ã€ã‚·ãƒ£ãƒ‰ã‚¦ã‚’投å
#: scene/3d/navigation_agent.cpp
msgid "The NavigationAgent can be used only under a spatial node."
-msgstr ""
+msgstr "NavigationAgent ã¯Spatialノードã®ä¸‹ã§ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚"
#: scene/3d/navigation_mesh_instance.cpp
msgid ""
@@ -14728,6 +14984,8 @@ msgid ""
"The NavigationObstacle only serves to provide collision avoidance to a "
"spatial object."
msgstr ""
+"NavigationObstacle ã¯Spatialãªã‚ªãƒ–ジェクトã«ã‚³ãƒªã‚¸ãƒ§ãƒ³å›žé¿ã‚’æä¾›ã™ã‚‹ãŸã‚ã ã‘"
+"ã«æ©Ÿèƒ½ã—ã¾ã™ã€‚"
#: scene/3d/occluder.cpp
msgid "No shape is set."
@@ -14738,16 +14996,15 @@ msgid "Only uniform scales are supported."
msgstr "uniform スケールã®ã¿ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚"
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPUベースã®ãƒ‘ーティクルã¯ã€GLES2ビデオドライãƒãƒ¼ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›"
"ん。\n"
-"代ã‚りã«CPUParticlesノードを使用ã—ã¦ãã ã•ã„。ã“ã®ç›®çš„ã®ãŸã‚ã« \"CPUパーティ"
-"クルã«å¤‰æ›\" オプションを使用ã§ãã¾ã™ã€‚"
+"代ã‚りã«CPUParticlesノードを使用ã—ã¦ãã ã•ã„。ã“ã®ç›®çš„ã®ãŸã‚ã« \"CPUParticles"
+"ã«å¤‰æ›\" ツールãƒãƒ¼ã‚ªãƒ—ションを使用ã§ãã¾ã™ã€‚"
#: scene/3d/particles.cpp
msgid ""
@@ -14756,6 +15013,10 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"macOSã§ã¯ã€ãƒˆãƒ©ãƒ³ã‚¹ãƒ•ォームフィードãƒãƒƒã‚¯ãŒGPUã§ã¯ãªãCPUã§å®Ÿè£…ã•れã¦ã„ã‚‹ãŸ"
+"ã‚ã€Particles ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã¯ CPUParticles よりã¨ã¦ã‚‚低速ã§ã™ã€‚\n"
+"macOS をターゲットã«ã™ã‚‹å ´åˆã¯ CPUParticles を使用ã™ã‚‹ã“ã¨ã‚’検討ãã ã•ã„。\n"
+"ã“ã®ç›®çš„ã®ãŸã‚ã« \"CPUParticles ã«å¤‰æ›\" ツールãƒãƒ¼ã‚ªãƒ—ションを使用ã§ãã¾ã™ã€‚"
#: scene/3d/particles.cpp
msgid ""
@@ -15025,9 +15286,10 @@ msgstr ""
"ã“ã®ãƒŽãƒ¼ãƒ‰ã¯éžæŽ¨å¥¨ã«ãªã‚Šã¾ã—ãŸã€‚代ã‚りã«AnimationTreeを使用ã—ã¦ãã ã•ã„。"
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"色: #%s\n"
@@ -15179,7 +15441,7 @@ msgid ""
"'SamplerPort'."
msgstr ""
"サンプラーãƒãƒ¼ãƒˆã¯æŽ¥ç¶šã•れã¦ã„ã¾ã™ãŒã€ä½¿ç”¨ã•れã¦ã„ã¾ã›ã‚“。ソースを "
-"'SamplerPort'ã«å¤‰æ›´ã™ã‚‹ã“ã¨æ¤œè¨Žã—ã¦ãã ã•ã„。"
+"'SamplerPort'ã«å¤‰æ›´ã™ã‚‹ã“ã¨ã‚’検討ã—ã¦ãã ã•ã„。"
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for preview."
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index d436b3b6d1..b3d35a3311 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -540,8 +540,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1428,7 +1428,7 @@ msgid "Bus Options"
msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2220,8 +2220,8 @@ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3268,8 +3268,14 @@ msgid "Update Continuously"
msgstr "უწყვეტი"
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -4009,6 +4015,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4128,7 +4142,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4951,19 +4965,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12666,6 +12680,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14003,10 +14025,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14047,17 +14065,193 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "კáƒáƒ•შირის გáƒáƒ¬áƒ§áƒ•ეტáƒ"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "მუდმივი"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14068,6 +14262,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14125,6 +14382,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14475,8 +14753,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14720,7 +14998,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/km.po b/editor/translations/km.po
index db013eeb5d..a386fd1188 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -496,8 +496,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1331,7 +1331,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2104,8 +2104,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3130,7 +3130,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3855,6 +3859,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3967,7 +3979,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4753,19 +4765,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12199,6 +12211,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13491,10 +13511,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13535,16 +13551,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13555,6 +13741,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13607,6 +13856,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13957,8 +14224,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14198,7 +14465,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index d35224bd42..0312c7fd92 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -29,13 +29,14 @@
# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
# Kiroo <elusive1102@naver.com>, 2021.
# JumpJetAvocado <dwkng@jbnu.ac.kr>, 2021.
+# Lee Minhak <minarihak@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-11-22 20:39+0000\n"
-"Last-Translator: JumpJetAvocado <dwkng@jbnu.ac.kr>\n"
+"PO-Revision-Date: 2022-02-04 13:45+0000\n"
+"Last-Translator: Lee Minhak <minarihak@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
"Language: ko\n"
@@ -43,7 +44,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.10-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -532,8 +533,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -542,8 +543,8 @@ msgstr ""
"\n"
"저장 ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë ¤ë©´ 커스텀 íŠ¸ëž™ì„ ì¶”ê°€í•˜ê³ , ì”¬ì˜ ê°€ì ¸ì˜¤ê¸° 설정으로 ê°€"
"서\n"
-"\"Animation > Storage\" ì„¤ì •ì„ \"Files\"로, \"Animation > Keep Custom Tracks"
-"\" ì„¤ì •ì„ í™œì„±í™”í•œ ë’¤, 다시 가져오십시오.\n"
+"\"Animation > Storage\" ì„¤ì •ì„ \"Files\"로, \"Animation > Keep Custom "
+"Tracks\" ì„¤ì •ì„ í™œì„±í™”í•œ ë’¤, 다시 가져오십시오.\n"
"아니면 가져오기 프리셋으로 애니메ì´ì…˜ì„ 별ë„ì˜ íŒŒì¼ë¡œ 가져올 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
#: editor/animation_track_editor.cpp
@@ -1392,7 +1393,7 @@ msgid "Bus Options"
msgstr "버스 옵션"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "복제"
@@ -1504,7 +1505,7 @@ msgstr "올바르지 ì•Šì€ ì´ë¦„입니다."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "숫ìžë¡œ 시작할 수 없습니다."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2130,7 +2131,7 @@ msgstr "ì†ì„±"
#: editor/editor_help.cpp
#, fuzzy
msgid "overrides %s:"
-msgstr "오버ë¼ì´ë“œ:"
+msgstr "오버ë¼ì´ë“œ %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2191,8 +2192,8 @@ msgstr "메서드 설명"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"현재 ì´ ë©”ì„œë“œì˜ ì„¤ëª…ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]관련 정보를 기여하"
"ì—¬[/url][/color] 개선할 수 있ë„ë¡ ë„와주세요!"
@@ -2276,9 +2277,10 @@ msgid "Pin value"
msgstr "(ê°’)"
#: editor/editor_inspector.cpp
+#, fuzzy
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
-msgstr ""
+msgstr "ê°’ì„ ê³ ì •í•˜ë©´ 기본값과 ê°™ë”ë¼ë„ 강제로 저장ë©ë‹ˆë‹¤."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
@@ -3301,10 +3303,16 @@ msgid "Update Continuously"
msgstr "ìƒì‹œ ì—…ë°ì´íЏ"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "ë³€ê²½ë  ë•Œ ì—…ë°ì´íЏ"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "머티리얼 바꾸기:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "ì—…ë°ì´íЏ 스피너 숨기기"
@@ -4063,6 +4071,14 @@ msgstr "ì´ë¦„ì— ìž˜ëª»ëœ ë¬¸ìžê°€ 있습니다."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4180,7 +4196,7 @@ msgstr "마지막으로 ìˆ˜ì •ëœ ìˆœì„œë¡œ ì •ë ¬"
msgid "Sort by First Modified"
msgstr "처ìŒìœ¼ë¡œ ìˆ˜ì •ëœ ìˆœì„œë¡œ ì •ë ¬"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "복제..."
@@ -4989,6 +5005,10 @@ msgid "Rename Animation"
msgstr "애니메ì´ì…˜ ì´ë¦„ 바꾸기"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "애니메ì´ì…˜ 복제"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "혼합 다ìŒìœ¼ë¡œ 바뀜"
@@ -5001,10 +5021,6 @@ msgid "Load Animation"
msgstr "애니메ì´ì…˜ 불러오기"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "애니메ì´ì…˜ 복제"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "복사할 애니메ì´ì…˜ì´ 없습니다!"
@@ -12713,6 +12729,16 @@ msgstr "ì–´í´ë£¨ë” 구체 반지름 설정"
msgid "Set Occluder Sphere Position"
msgstr "ì–´í´ë£¨ë” 구체 위치 설정"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "í¬í„¸ ì  ìœ„ì¹˜ 설정"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "곡선 ì  ìœ„ì¹˜ 설정"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "ì›ê¸°ë‘¥ 반지름 바꾸기"
@@ -14089,10 +14115,6 @@ msgstr "App Store 팀 ID를 지정하지 않았습니다 - 프로ì íŠ¸ë¥¼ 구ì„
msgid "Invalid Identifier:"
msgstr "ìž˜ëª»ëœ ì‹ë³„ìž:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "요구하는 ì•„ì´ì½˜ì„ 프리셋ì—서 지정하지 않았습니다."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "HTTP 서버 멈추기"
@@ -14133,16 +14155,202 @@ msgstr "HTTP 서버 디렉토리를 만들 수 ì—†ìŒ:"
msgid "Error starting HTTP server:"
msgstr "HTTP 서버를 시작하는 중 오류:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "ìž˜ëª»ëœ í”„ë¡œì íЏ ì´ë¦„입니다."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "ìž˜ëª»ëœ ì§€ì˜¤ë©”íŠ¸ë¦¬. í´ë¦¬ê³¤ì„ 만들 수 없습니다."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "í´ë”를 만들 수 없습니다."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "ìž˜ëª»ëœ ê¸°ë³¸ 경로."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "리소스 ë¶ˆëŸ¬ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "리소스 ë¶ˆëŸ¬ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "ìž˜ëª»ëœ í™•ìž¥ìž."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "ìž˜ëª»ëœ í™•ìž¥ìž."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "ì•„ì´ì½˜ì„ ì°¾ì„ ìˆ˜ 없습니다."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "ì¸ë„¤ì¼ 만드는 중"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"내보낼 템플릿 APK를 ì°¾ì„ ìˆ˜ ì—†ìŒ:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "ìž˜ëª»ëœ bundle ì‹ë³„ìž:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "ê³µì¦: 코드 ì„œëª…ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "ê³µì¦: ê°•í™”ëœ ëŸ°íƒ€ìž„ì´ í•„ìš”í•©ë‹ˆë‹¤."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "ê³µì¦: ê°•í™”ëœ ëŸ°íƒ€ìž„ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: platform/osx/export/export.cpp
@@ -14153,6 +14361,69 @@ msgstr "ê³µì¦: Apple ID ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않았습니다."
msgid "Notarization: Apple ID password not specified."
msgstr "ê³µì¦: Apple ID 비밀번호가 지정ë˜ì§€ 않았습니다."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "ìž˜ëª»ëœ íŒ¨í‚¤ì§€ 단축 ì´ë¦„."
@@ -14205,6 +14476,27 @@ msgstr "ìž˜ëª»ëœ ë„“ì€ 310x150 로고 ì´ë¯¸ì§€ í¬ê¸° (310x150ì´ì–´ì•¼ í•©ë‹
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "ìž˜ëª»ëœ ìŠ¤í”Œëž˜ì‹œ 스í¬ë¦° ì´ë¯¸ì§€ í¬ê¸° (620x300ì´ì–´ì•¼ 합니다)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "ìž˜ëª»ëœ ê²½ë¡œ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "ìž˜ëª»ëœ í™•ìž¥ìž."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "ìž˜ëª»ëœ ì œí’ˆ GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14561,8 +14853,8 @@ msgid ""
"CPUParticles animation requires the usage of a SpatialMaterial whose "
"Billboard Mode is set to \"Particle Billboard\"."
msgstr ""
-"CPUParticles 애니메ì´ì…˜ì„ 사용하려면 Billboard Modeê°€ \"Particle Billboard"
-"\"로 ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤."
+"CPUParticles 애니메ì´ì…˜ì„ 사용하려면 Billboard Modeê°€ \"Particle "
+"Billboard\"로 ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤."
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
@@ -14624,8 +14916,8 @@ msgstr "Uniform 스케ì¼ë§Œ ì§€ì›ë©ë‹ˆë‹¤."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPU 기반 파티í´ì€ GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않습니다.\n"
"대신 CPUParticles 노드를 사용하세요. ì´ ê²½ìš° \"CPUParticles로 변환\" ì„¤ì •ì„ "
@@ -14661,8 +14953,8 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"PathFollowì˜ ROTATION_ORIENTED는 부모 Pathì˜ Curve 리소스ì—서 \"Up Vector"
-"\"가 켜져 있어야 합니다."
+"PathFollowì˜ ROTATION_ORIENTED는 부모 Pathì˜ Curve 리소스ì—서 \"Up "
+"Vector\"가 켜져 있어야 합니다."
#: scene/3d/physics_body.cpp
msgid ""
@@ -14838,8 +15130,8 @@ 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 ""
@@ -14902,9 +15194,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "ì´ ë…¸ë“œëŠ” ë” ì´ìƒ 사용할 수 없습니다. 대신 AnimationTree를 사용하세요."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"색ìƒ: #%s\n"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index 53f33e0585..bdbebb1717 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -20,8 +20,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n%10>=2 && (n%100<10 || n"
-"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3;\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n%10>=2 && (n%100<10 || "
+"n%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3;\n"
"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
@@ -515,8 +515,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1378,7 +1378,7 @@ msgid "Bus Options"
msgstr "Aprašymas:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikuoti"
@@ -2178,8 +2178,8 @@ msgstr "Aprašymas:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3227,8 +3227,14 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Sukurti NaujÄ…"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Sukurti NaujÄ…"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3984,6 +3990,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4103,7 +4117,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Duplikuoti"
@@ -4926,19 +4940,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12645,6 +12659,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13988,10 +14010,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Netinkamas šrifto dydis."
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14033,17 +14051,193 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Atsijungti"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Konstanta"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Netinkamas šrifto dydis."
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14054,6 +14248,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14111,6 +14368,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Netinkamas šrifto dydis."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14461,8 +14739,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14707,7 +14985,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 4d888fb41d..2216810855 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
"Last-Translator: M E <gruffy7932@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot/lv/>\n"
@@ -24,7 +24,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -328,7 +328,7 @@ msgstr "Dublicēt atslēgvietnes"
#: editor/animation_track_editor.cpp
msgid "Add RESET Value(s)"
-msgstr ""
+msgstr "Pievienot RESET vērtību(-as)"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -498,9 +498,8 @@ msgid ""
msgstr "Å Ä« iespÄ“ja nestrÄdÄ ar BazjÄ“ rediģēšanu, jo tai ir tikai viens celiņš."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Anim Mainīt Atslēgas Izmēru"
+msgstr "Anim pievienot atiestat. atslēgas"
#: editor/animation_track_editor.cpp
msgid ""
@@ -509,8 +508,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1108,7 +1107,7 @@ msgstr "Kļūme lÄdÄ“jot:"
#: editor/dependency_editor.cpp
msgid "Load failed due to missing dependencies:"
-msgstr "IelÄdēšana apturÄ“ta, jo trÅ«kst ceļu uz pamata failiem:"
+msgstr "IelÄdēšana apturÄ“ta, jo trÅ«kst pamata faili:"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
@@ -1116,7 +1115,7 @@ msgstr "AtvÄ“rt jebkurÄ gadÄ«jumÄ"
#: editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr "Kuru darbību izdarīt?"
+msgstr "KÄdu darbÄ«bu veikt ?"
#: editor/dependency_editor.cpp
msgid "Fix Dependencies"
@@ -1375,7 +1374,7 @@ msgid "Bus Options"
msgstr "Kopnes Iestatījumi"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Izveidot dublikÄtu"
@@ -1487,7 +1486,7 @@ msgstr "Nederīgs nosaukums."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Nevar sÄkt ar ciparu."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -1711,7 +1710,7 @@ msgstr "PielÄgots atkļūdoÅ¡anas Å¡ablons nav atrasts."
#: 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 "PielÄgots relÄ«zes sablons nav atrasts."
+msgstr "PielÄgots relÄ«zes Å¡ablons nav atrasts."
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:"
@@ -2115,9 +2114,8 @@ msgid "Properties"
msgstr "Iestatījumi"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "pÄrrakstīšana:"
+msgstr "pÄrraksta %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2133,7 +2131,7 @@ msgstr "Motīva iestatījumi"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Colors"
-msgstr ""
+msgstr "KrÄsas"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
@@ -2141,15 +2139,15 @@ msgstr "Konstantes"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Fonts"
-msgstr ""
+msgstr "Fonti"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Icons"
-msgstr ""
+msgstr "Ikonas"
#: editor/editor_help.cpp
msgid "Styles"
-msgstr ""
+msgstr "Stili"
#: editor/editor_help.cpp
msgid "Enumerations"
@@ -2168,8 +2166,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Pašreiz šim mainīgajam nav apraksta. Lūdzu, palīdzi mums [color=$color][url="
-"$url]izveidot to[/url][/color]!"
+"Pašreiz šim mainīgajam nav apraksta. Lūdzu, palīdzi mums [color=$color]"
+"[url=$url]izveidot to[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2177,11 +2175,11 @@ msgstr "Metožu Apraksts"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Pašreiz šai metodei nav apraksta. Lūdzu, palīdzi mums [color=$color][url="
-"$url]pievienojot vienu[/url][/color]!"
+"Pašreiz šai metodei nav apraksta. Lūdzu, palīdzi mums [color=$color]"
+"[url=$url]pievienojot vienu[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2257,18 +2255,19 @@ msgid "Property:"
msgstr "Parametrs:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(vērtība)"
+msgstr "Piespraust vērtību"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
msgstr ""
+"VÄ“rtÄ«bas piesprauÅ¡ana liek to saglabÄt, pat ja tÄ ir vienÄda ar noklusÄ“juma "
+"vērtību."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Pin vērtība [Atspējota, jo \"%s\" ir paredzēts tikai redaktoram]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2283,26 +2282,23 @@ msgstr "Uzlikt vairÄkus:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "Piesprausts %s"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "Atsprausts %s"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Kopēt iestatījumus"
+msgstr "Kopēt mainīgo"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Ielīmēt iestatījumus"
+msgstr "Ielīmēt mainīgo"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Kopēt mezgla ceļu"
+msgstr "KopÄ“t mainÄ«gÄ ceļu"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2536,18 +2532,25 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Å is resurss pieder ainai, kas ir importÄ“ta, tÄdēļ to nevar rediģēt.\n"
+"LÅ«dzu, lasiet dokumentÄciju par ainu importēšanu, lai labÄk saprastu Å¡o "
+"darbplūsmu."
#: editor/editor_node.cpp
msgid ""
"This resource belongs to a scene that was instanced or inherited.\n"
"Changes to it won't be kept when saving the current scene."
msgstr ""
+"Šis resurss pieder ainai, kas ir instancēta vai mantota.\n"
+"Izmaiņas tajÄ netiks saglabÄtas, saglabÄjot paÅ¡reizÄ“jo ainu."
#: 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 ""
+"Å is resurss tika importÄ“ts, tÄpÄ“c to nevar rediģēt. Mainiet tÄ iestatÄ«jumus "
+"importēšanas panelÄ« un pÄ“c tam importÄ“jiet atkÄrtoti."
#: editor/editor_node.cpp
msgid ""
@@ -2567,6 +2570,9 @@ msgid ""
"Please read the documentation relevant to debugging to better understand "
"this workflow."
msgstr ""
+"Å is ir attÄlinÄts objekts, tÄpÄ“c tÄ izmaiņas netiks saglabÄtas.\n"
+"LÅ«dzu, izlasiet dokumentÄciju, kas attiecas uz atkļūdoÅ¡anu, lai labÄk "
+"izprastu šo darbplūsmu."
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
@@ -2625,6 +2631,8 @@ msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
msgstr ""
+"Lai saglabÄtu ainu, ir nepiecieÅ¡ams saknes mezgls. Saknes mezglu var "
+"pievienot, izmantojot ainas koka doku."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2668,15 +2676,15 @@ msgstr "Atgriezts: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "Nevar atgriezt, kad peles pogas ir nospiestas."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "Nav ko pÄrstrÄdÄt."
#: editor/editor_node.cpp
msgid "Redo: %s"
-msgstr ""
+msgstr "AtkÄrtot: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -2691,6 +2699,8 @@ msgid ""
"The current scene has unsaved changes.\n"
"Reload the saved scene anyway? This action cannot be undone."
msgstr ""
+"PaÅ¡reizÄ“jai ainai ir nesaglabÄtas izmaiņas.\n"
+"Vai tomÄ“r pÄrlÄdÄ“t saglabÄto ainu? Å o darbÄ«bu nevar atsaukt."
#: editor/editor_node.cpp
msgid "Quick Run Scene..."
@@ -2747,7 +2757,7 @@ msgstr "Atvērt Aizvērto Ainu"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr ""
+msgstr "Nevar iespÄ“jot spraudni: '%s' konfigurÄcijas parsēšana neizdevÄs."
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: '%s'."
@@ -2763,11 +2773,16 @@ msgid ""
"error in that script.\n"
"Disabling the addon at '%s' to prevent further errors."
msgstr ""
+"Nevar ielÄdÄ“t spraudņa skriptu no: '%s'. TÄ iemesls var bÅ«t kļūda Å¡ajÄ "
+"slripta kodÄ.\n"
+"Spraudnis '%s' atspÄ“jots, lai novÄ“rstu tupmÄkÄs kļūdas."
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
msgstr ""
+"Nevar ielÄdÄ“t papildinÄjuma skriptu no ceļa: '%s' BÄzes tips nav "
+"EditorPlugin."
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
@@ -2779,12 +2794,16 @@ 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 ""
+"Aina '%s' tika importÄ“ta automÄtiski, tÄpÄ“c to nevar modificÄ“t.\n"
+"Lai tajÄ veiktu izmaiņas, izveidojiet jaunu pÄrmantotu ainu."
#: editor/editor_node.cpp
msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
+"Kļūda ielÄdÄ“jot ainu, tai jÄbÅ«t projekta ceļÄ. Izmantojiet 'ImportÄ“t', lai "
+"atvÄ“rtu ainu, pÄ“c tam saglabÄjiet to projekta ceļÄ."
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
@@ -2800,6 +2819,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"GalvenÄ aina vÄ“l nav definÄ“ta, izvÄ“lÄ“ties tagad?\n"
+"To var mainÄ«t vÄ“lÄk projekta IestatÄ«jumos sadaÄ¼Ä 'aplikÄcija'."
#: editor/editor_node.cpp
msgid ""
@@ -2807,6 +2828,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"IzvÄ“lÄ“tÄ aina '%s' nepastÄv, izvÄ“lieties derÄ«gu?\n"
+"To var mainÄ«t vÄ“lÄk \"Projekta iestatÄ«jumi\" sadaÄ¼Ä 'lietojumprogramma'."
#: editor/editor_node.cpp
msgid ""
@@ -2814,6 +2837,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"IzvÄ“lÄ“tÄ aina '%s' nav ainas fails, izvÄ“lieties derÄ«gu?\n"
+"To var mainÄ«t vÄ“lÄk projekta iestatÄ«jumos sadaÄ¼Ä 'aplikÄcija'."
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -2879,11 +2904,11 @@ msgstr "Doka pozīcija"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "Traucējumu brīvs režīms"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr ""
+msgstr "PÄrslÄ“gt traucÄ“jumu brÄ«vo režīmu."
#: editor/editor_node.cpp
msgid "Add a new scene."
@@ -2915,7 +2940,7 @@ msgstr "Filtrēt failus..."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr ""
+msgstr "Darbības ar ainas failiem."
#: editor/editor_node.cpp
msgid "New Scene"
@@ -2927,7 +2952,7 @@ msgstr "Jauna mantota aina..."
#: editor/editor_node.cpp
msgid "Open Scene..."
-msgstr ""
+msgstr "Atvērt ainu..."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Open Recent"
@@ -2943,11 +2968,11 @@ msgstr "Konvertēt Uz..."
#: editor/editor_node.cpp
msgid "MeshLibrary..."
-msgstr ""
+msgstr "TīklaBibliotēka..."
#: editor/editor_node.cpp
msgid "TileSet..."
-msgstr ""
+msgstr "FlīžuKomplekts..."
#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
@@ -2993,9 +3018,8 @@ msgid "Install Android Build Template..."
msgstr "Instalēt Android būves šablonu..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Atvērt redaktora datu mapi"
+msgstr "AtvÄ“rt lietotÄja datu mapi"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3217,7 +3241,7 @@ msgstr "ApstÄdinÄt ainu."
#: editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Atskaņot rediģēto ainu."
#: editor/editor_node.cpp
msgid "Play Scene"
@@ -3225,15 +3249,15 @@ msgstr "Spēlēt Ainu"
#: editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Atskaņot pielÄgotu ainu"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Atskaņot pielÄgotu ainu"
#: editor/editor_node.cpp
msgid "Changing the video driver requires restarting the editor."
-msgstr ""
+msgstr "Lai nomainÄ«tu video draiveri, ir jÄpÄrstartÄ“ redaktors."
#: editor/editor_node.cpp editor/project_settings_editor.cpp
#: editor/settings_config_dialog.cpp
@@ -3245,7 +3269,13 @@ msgid "Update Continuously"
msgstr "NepÄrtraukti Atjaunot"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Atjaunot Kad Mainīts"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "Atjaunot Kad Mainīts"
#: editor/editor_node.cpp
@@ -3262,7 +3292,7 @@ msgstr "Inspektors"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr ""
+msgstr "Izvērst apakšējo paneli"
#: editor/editor_node.cpp
msgid "Output"
@@ -3274,15 +3304,15 @@ msgstr "NesaglabÄt"
#: editor/editor_node.cpp
msgid "Android build template is missing, please install relevant templates."
-msgstr ""
+msgstr "Trūkst Android būves šablonu, lūdzu, instalējiet atbilstošos šablonus."
#: editor/editor_node.cpp
msgid "Manage Templates"
-msgstr ""
+msgstr "PÄrvaldÄ«t Å¡ablonus"
#: editor/editor_node.cpp
msgid "Install from file"
-msgstr ""
+msgstr "Instalēt no faila"
#: editor/editor_node.cpp
msgid "Select android sources file"
@@ -3315,15 +3345,15 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "Importēr šablonus no ZIP faila"
#: editor/editor_node.cpp
msgid "Template Package"
-msgstr ""
+msgstr "Å ablona pakotne"
#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
msgid "Export Library"
-msgstr ""
+msgstr "Eksportēt bibliotēku"
#: editor/editor_node.cpp
msgid "Merge With Existing"
@@ -3501,7 +3531,7 @@ msgstr "Rediģēt Tekstu:"
#: editor/editor_properties.cpp editor/script_create_dialog.cpp
msgid "On"
-msgstr ""
+msgstr "Ieslēgts"
#: editor/editor_properties.cpp
msgid "Layer"
@@ -3667,9 +3697,8 @@ msgstr "Importēt no mezgla:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Kļūda!"
+msgstr "%s Kļūda"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3980,6 +4009,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4092,7 +4129,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Dublicēt..."
@@ -4189,9 +4226,8 @@ msgid "Replace..."
msgstr "Aizvietot..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "Aizvietot visu"
+msgstr "Aizvietot failos"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4202,9 +4238,8 @@ msgid "Replace: "
msgstr "Aizvietot: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "Aizvietot visu"
+msgstr "Aizvietot visu (Nevar atsaukt)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4880,19 +4915,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -5845,9 +5880,8 @@ msgid "Alt+Drag: Move selected node."
msgstr "Alt+BÄ«dÄ«t: PÄrvietot izvÄ“lÄ“to mezglu."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+BÄ«dÄ«t: PÄrvietot izvÄ“lÄ“to mezglu."
+msgstr "Alt+BÄ«dÄ«t: PielÄgo mÄ“rogu izvÄ“lÄ“tajam mezglam."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
@@ -5976,9 +6010,8 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Dzēst mezglu(s)"
+msgstr "Aizslēgt izvēlēto mezglu(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5987,9 +6020,8 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Dzēst mezglu(s)"
+msgstr "Atslēgt izvēlēto muzglu(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -7537,7 +7569,7 @@ msgstr ""
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
msgid "Bookmarks"
-msgstr ""
+msgstr "GrÄmatzÄ«mes"
#: editor/plugins/script_text_editor.cpp
msgid "Breakpoints"
@@ -7546,7 +7578,7 @@ msgstr "PÄrrÄvumpunkts"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
msgid "Go To"
-msgstr ""
+msgstr "Iet uz"
#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
@@ -7637,7 +7669,7 @@ msgstr "Doties uz iepriekšējo grÄmatzÄ«mi"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Bookmarks"
-msgstr ""
+msgstr "Noņemt visas grÄmatzÄ«mes"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Function..."
@@ -8869,9 +8901,8 @@ msgid "Available Node-based types:"
msgstr "Pieejamie Profili:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "Faila Nosaukums nav definēts."
+msgstr "Tipa nosaukums ir tukšs!"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9491,19 +9522,16 @@ msgid "Commit"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Ä’notÄja izmaiņas:"
+msgstr "Soļu izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Ä’notÄja izmaiņas:"
+msgstr "Neiestudētas izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Komūns"
+msgstr "Izdarīt:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
@@ -9575,19 +9603,16 @@ msgid "Detect new changes"
msgstr "Atrast jaunas izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "AizvÄ“rt un saglabÄt izmaiņas?"
+msgstr "Atmest visas izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "SaglabÄ lokÄlÄs izmaiņas..."
+msgstr "Visu izmaiņu posms"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "SaglabÄ lokÄlÄs izmaiņas..."
+msgstr "Atcelt visas izmaiņas"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9620,9 +9645,8 @@ msgid "30"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Sakritības:"
+msgstr "Zari"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9654,9 +9678,8 @@ msgid "Remove Remote"
msgstr "Noņemt vienumu"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Mezgla VÄrds:"
+msgstr "AttÄlais vÄrds"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9700,9 +9723,8 @@ msgid "Unmerged"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Skatīt"
+msgstr "Skatīt:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Split"
@@ -12358,6 +12380,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13673,10 +13703,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Nederīgs Identifikators:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13717,16 +13743,193 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nederīgs projekta nosaukums."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "NeizdevÄs izveidot mapi."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "NederÄ«gs bÄzes ceļš."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Bērna process savienots."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Izveido sīktēlu"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Nederīgs bunduļa identifikators:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13737,6 +13940,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nederīgs paketes īsais nosaukums."
@@ -13789,6 +14055,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Nederīgs ceļš."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nederīgs produkta GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14139,8 +14426,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14380,7 +14667,7 @@ msgstr "Å is mezgls ir novecojis. TÄ vietÄ izmanto AnimationTree."
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index 52b6fecb05..745e54d697 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -488,8 +488,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1323,7 +1323,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2096,8 +2096,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3122,7 +3122,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3846,6 +3850,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3958,7 +3970,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4744,19 +4756,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12183,6 +12195,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13474,10 +13494,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13518,16 +13534,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13538,6 +13724,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13590,6 +13839,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13940,8 +14207,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14181,7 +14448,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index 8448673f6c..38ee72ff58 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -496,8 +496,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1331,7 +1331,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2105,8 +2105,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3134,7 +3134,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3859,6 +3863,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3971,7 +3983,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4760,19 +4772,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12208,6 +12220,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13500,10 +13520,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13544,16 +13560,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13564,6 +13750,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13616,6 +13865,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13966,8 +14233,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14207,7 +14474,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index b6e14ce0cb..085e4e1af3 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -500,8 +500,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1336,7 +1336,7 @@ msgid "Bus Options"
msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2110,8 +2110,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3141,7 +3141,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3866,6 +3870,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3978,7 +3990,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4768,19 +4780,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12216,6 +12228,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13513,10 +13533,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13557,16 +13573,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13577,6 +13763,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13629,6 +13878,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13979,8 +14246,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14220,7 +14487,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 4e1324414e..d3faab3d90 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -496,8 +496,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1331,7 +1331,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2104,8 +2104,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3132,7 +3132,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3857,6 +3861,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3969,7 +3981,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4755,19 +4767,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12209,6 +12221,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13503,10 +13523,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13547,16 +13563,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13567,6 +13753,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13619,6 +13868,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13969,8 +14236,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14210,7 +14477,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index 7fc1062ff2..71c60c4921 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -16,7 +16,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-02-03 13:04+0000\n"
"Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/"
"ms/>\n"
@@ -25,7 +25,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -510,8 +510,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -520,8 +520,8 @@ msgstr ""
"\n"
"Untuk memberikan keupayaan untuk menambah trek tersuai, navigasi ke tetapan "
"import adegan dan tetapkan\n"
-"\"Animasi > Simpanan\" ke \"Fail\", aktifkan \"Animasi > Simpan Trek Tersuai"
-"\", kemudian import semula.\n"
+"\"Animasi > Simpanan\" ke \"Fail\", aktifkan \"Animasi > Simpan Trek "
+"Tersuai\", kemudian import semula.\n"
"Sebagai alternatif, gunakan pratetap import yang mengimportkan animasi untuk "
"memisahkan fail."
@@ -567,7 +567,7 @@ msgstr "FPS"
#: editor/project_settings_editor.cpp editor/property_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit"
-msgstr "Edit"
+msgstr "Sunting"
#: editor/animation_track_editor.cpp
msgid "Animation properties."
@@ -931,8 +931,8 @@ msgstr "Edit Sambungan:"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
msgstr ""
-"Adakah anda pasti anda mahu mengeluarkan semua sambungan dari isyarat \"% s"
-"\"?"
+"Adakah anda pasti anda mahu mengeluarkan semua sambungan dari isyarat \"% "
+"s\"?"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
@@ -1377,7 +1377,7 @@ msgid "Bus Options"
msgstr "Pilihan Bas"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Pendua"
@@ -2181,8 +2181,8 @@ msgstr "Penerangan Kaedah"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Tiada keterangan untuk kaedah ini. Tolong bantu kami dengan [color=$color]"
"[url=$url]menyumbang satu[/url][/color]!"
@@ -3032,9 +3032,8 @@ msgid "Install Android Build Template..."
msgstr "Pasang Templat Binaan Android..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Buka Folder Data Editor"
+msgstr "Buka Folder Data Pengguna"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3305,10 +3304,16 @@ msgid "Update Continuously"
msgstr "Kemas Kini Secara Berterusan"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Kemas Kini Apabila Diubah"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Perubahan Bahan:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Sembunyikan Spinner Kemas Kini"
@@ -3754,9 +3759,8 @@ msgstr "Import Dari Nod:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Ralat!"
+msgstr "%s Ralat"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4075,6 +4079,14 @@ msgstr "Nama mengandungi aksara yang tidak sah."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4193,7 +4205,7 @@ msgstr "Susun mengikut Terakhir Diubah Suai"
msgid "Sort by First Modified"
msgstr "Susun mengikut Pertama Diubah Suai"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Penduakan..."
@@ -4471,7 +4483,7 @@ msgstr "Pengimport:"
#: editor/import_defaults_editor.cpp
msgid "Reset to Defaults"
-msgstr "Set Semula ke Lalai"
+msgstr "Memulihkan ke Keadaan Asli"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
@@ -5007,6 +5019,10 @@ msgid "Rename Animation"
msgstr "Namakan Semula Animasi"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Gandakan Animasi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Adun Berubah Seterusnya"
@@ -5019,10 +5035,6 @@ msgid "Load Animation"
msgstr "Muatkan Animasi"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Gandakan Animasi"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Tiada animasi untuk disalin!"
@@ -5393,35 +5405,35 @@ msgstr "Nod Blend4"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "Nod TimeScale"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "Nod TimeSeek"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "Nod Peralihan"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Import Animations..."
-msgstr ""
+msgstr "Import Animasi..."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "Sunting Filter Nod"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Filters..."
-msgstr ""
+msgstr "Filter..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
-msgstr ""
+msgstr "Kandungan:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
-msgstr ""
+msgstr "Lihat Fail"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download"
@@ -5429,7 +5441,7 @@ msgstr "Muat turun"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
+msgstr "Ralat sambungan, sila cuba lagi."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect."
@@ -5437,11 +5449,11 @@ msgstr "Tidak dapat menyambung."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr ""
+msgstr "Tidak dapat menyambung ke hos:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
+msgstr "Tiada respons daripada hos:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response."
@@ -5449,7 +5461,7 @@ msgstr "Tiada jawapan."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
-msgstr ""
+msgstr "Tidak dapat menyelesaikan nama hos:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve."
@@ -5457,31 +5469,31 @@ msgstr "Tidak dapat menyelesaikan."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
-msgstr ""
+msgstr "Permintaan gagal, kod pulangan:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Cannot save response to:"
-msgstr ""
+msgstr "Tidak dapat menyimpan respons kepada:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Write error."
-msgstr ""
+msgstr "Ralat tulis."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr ""
+msgstr "Permintaan gagal, terlalu banyak ubah hala"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Redirect loop."
-msgstr ""
+msgstr "Ubah hala gelung."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, timeout"
-msgstr ""
+msgstr "Permintaan gagal, tamat masa"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Timeout."
-msgstr ""
+msgstr "Masa tamat."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed:"
@@ -5489,409 +5501,416 @@ msgstr "Gagal:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr ""
+msgstr "Hash muat turun buruk, dengan andaian fail telah diusik."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
-msgstr ""
+msgstr "Dijangka:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Got:"
-msgstr ""
+msgstr "Mendapat:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
-msgstr ""
+msgstr "Semakan hash SHA-256 gagal"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr ""
+msgstr "Ralat Muat Turun Aset:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
-msgstr ""
+msgstr "Memuat turun (%s / %s)..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading..."
-msgstr ""
+msgstr "Memuat turun..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Resolving..."
-msgstr ""
+msgstr "Menyelesaikan..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
-msgstr ""
+msgstr "Ralat membuat permintaan"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr ""
+msgstr "Terbiar"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Install..."
-msgstr ""
+msgstr "Pasang..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Retry"
-msgstr ""
+msgstr "Cuba semula"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download Error"
-msgstr ""
+msgstr "Ralat Muat Turun"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr ""
+msgstr "Muat turun untuk aset ini sedang dijalankan!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
-msgstr ""
+msgstr "Dikemaskini Baru-baru Ini"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Least Recently Updated"
-msgstr ""
+msgstr "Paling Kurang Dikemaskini Baru-Baru Ini"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
-msgstr ""
+msgstr "Nama (A-Z)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (Z-A)"
-msgstr ""
+msgstr "Nama (Z-A)"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "License (A-Z)"
-msgstr "Lesen"
+msgstr "Lesen (A-Z)"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "License (Z-A)"
-msgstr "Lesen"
+msgstr "Lesen (Z-A)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "First"
-msgstr ""
+msgstr "Pertama"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Previous"
-msgstr ""
+msgstr "Sebelum"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Next"
-msgstr ""
+msgstr "Seterusnya"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Last"
-msgstr ""
+msgstr "Terakhir"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "Semua"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr ""
+msgstr "Cari templat, projek dan demo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
-msgstr ""
+msgstr "Cari aset (tidak termasuk templat, projek dan demo)"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
-msgstr ""
+msgstr "Import..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Plugins..."
-msgstr ""
+msgstr "Pemalam..."
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Sort:"
-msgstr ""
+msgstr "Isih:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Category:"
-msgstr ""
+msgstr "Kategori:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "Laman:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Support"
-msgstr ""
+msgstr "Sokongan"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Official"
-msgstr ""
+msgstr "Rasmi"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr ""
+msgstr "Menguji"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Loading..."
-msgstr ""
+msgstr "Memuatkan..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr ""
+msgstr "Fail ZIP Aset"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr ""
+msgstr "Main/Jeda Pratonton Audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"Can't determine a save path for lightmap images.\n"
"Save your scene and try again."
msgstr ""
+"Tidak dapat menentukan laluan simpan untuk imej lightmap.\n"
+"Simpan adegan anda dan cuba lagi."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
+"Tiada mesh untuk di-bake. Pastikan ia mengandungi saluran UV2 dan bendera "
+"'Use In Baked Light' dan 'Generate Lightman' dihidupkan."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
-msgstr ""
+msgstr "Gagal mencipta imej lightmap, pastikan laluan boleh ditulis."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed determining lightmap size. Maximum lightmap size too small?"
-msgstr ""
+msgstr "Gagal menentukan saiz lightmap. Saiz lightmap maksimum terlalu kecil?"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"Some mesh is invalid. Make sure the UV2 channel values are contained within "
"the [0.0,1.0] square region."
msgstr ""
+"Sesetengah mesh tidak sah. Pastikan nilai saluran UV2 terkandung dalam "
+"kawasan persegi [0.0,1.0]."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"Godot editor was built without ray tracing support, lightmaps can't be baked."
msgstr ""
+"Editor Godot dibina tanpa sokongan ray tracing, lightmap tidak dapat di-bake."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Bake Lightmaps"
-msgstr ""
+msgstr "Bake Lightmap"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Select lightmap bake file:"
-msgstr ""
+msgstr "Pilih fail lightmap bake:"
#: editor/plugins/camera_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Preview"
-msgstr ""
+msgstr "Pratonton"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr ""
+msgstr "Konfigurasikan Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr ""
+msgstr "Grid Offset:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Step:"
-msgstr ""
+msgstr "Langkah Grid:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Primary Line Every:"
-msgstr ""
+msgstr "Garis Utama Setiap:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "steps"
-msgstr ""
+msgstr "langkah-langkah"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr ""
+msgstr "Offset Putaran:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
-msgstr ""
+msgstr "Langkah Putaran:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Step:"
-msgstr ""
+msgstr "Langkah Skala:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Vertical Guide"
-msgstr ""
+msgstr "Alih Panduan Menegak"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Vertical Guide"
-msgstr ""
+msgstr "Cipta Panduan Menegak"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Remove Vertical Guide"
-msgstr ""
+msgstr "Keluarkan Panduan Menegak"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Horizontal Guide"
-msgstr ""
+msgstr "Alihkan Panduan Mendatar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Horizontal Guide"
-msgstr ""
+msgstr "Cipta Panduan Mendatar"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Remove Horizontal Guide"
-msgstr "Buang Trek Anim"
+msgstr "Keluarkan Panduan Mendatar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Horizontal and Vertical Guides"
-msgstr ""
+msgstr "Cipta Panduan Mendatar dan Menegak"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Tetapkan Offset Pivot CanvasItem \"%s\" kepada (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate %d CanvasItems"
-msgstr ""
+msgstr "Putar %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr ""
+msgstr "Putar CanvasItem \"%s\" ke %d darjah"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr ""
+msgstr "Alih CanvasItem \"%s\" Anchor"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Skala Node2D \"%s\" ke (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Ubah Saiz Kawalan \"%s\" kepada (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale %d CanvasItems"
-msgstr ""
+msgstr "Skala %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Skalakan CanvasItem \"%s\" kepada (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move %d CanvasItems"
-msgstr ""
+msgstr "Alihkan %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Alihkan CanvasItem \"%s\" ke (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Locked"
-msgstr ""
+msgstr "Terkunci"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Kumpulan"
+msgstr "Terkumpul"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
msgstr ""
+"Anak-anak bekas mempunyai nilai sauh dan margin mereka yang ditindih oleh "
+"ibu bapa mereka."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Presets for the anchors and margins values of a Control node."
-msgstr ""
+msgstr "Pratetap untuk nilai sauh dan margin bagi nod Control."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"When active, moving Control nodes changes their anchors instead of their "
"margins."
msgstr ""
+"Apabila aktif, mengalihkan nod Control mengubah sauh mereka dan bukannya "
+"margin."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Left"
-msgstr ""
+msgstr "Atas Kiri"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Right"
-msgstr ""
+msgstr "Atas Kanan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Right"
-msgstr ""
+msgstr "Bawah Kanan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Left"
-msgstr ""
+msgstr "Bawah Kiri"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Left"
-msgstr ""
+msgstr "Tengah Kiri"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Top"
-msgstr ""
+msgstr "Tengah Atas"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Right"
-msgstr ""
+msgstr "Tengah Kanan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Bottom"
-msgstr ""
+msgstr "Tengah Bawah"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center"
-msgstr ""
+msgstr "Tengah"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Left Wide"
-msgstr ""
+msgstr "Kiri Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Wide"
-msgstr ""
+msgstr "Atas Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Right Wide"
-msgstr ""
+msgstr "Kanan Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Wide"
-msgstr ""
+msgstr "Bawah Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "VCenter Wide"
-msgstr ""
+msgstr "VCenter Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "HCenter Wide"
-msgstr ""
+msgstr "HCenter Lebar"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Full Rect"
-msgstr ""
+msgstr "Penuh Rect"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Keep Ratio"
-msgstr ""
+msgstr "Kekalkan Nisbah"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
-msgstr ""
+msgstr "Sauh sahaja"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors and Margins"
-msgstr ""
+msgstr "Tukar Sauh dan Margin"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
-msgstr ""
+msgstr "Tukar Sauh"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5899,6 +5918,9 @@ msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
+"Penggantian Kamera Projek\n"
+"Menggantikan kamera projek yang sedang berjalan dengan kamera viewport "
+"editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5907,120 +5929,120 @@ msgid ""
"No project instance running. Run the project from the editor to use this "
"feature."
msgstr ""
+"Penggantian Kamera Projek\n"
+"Tiada instance projek berjalan. Jalankan projek daripada editor menggunakan "
+"ciri ini."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock Selected"
-msgstr ""
+msgstr "Kunci Dipilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock Selected"
-msgstr ""
+msgstr "Buka Kunci Dipilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected"
-msgstr "Semua Pilihan"
+msgstr "Kumpulan Dipilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected"
-msgstr "Semua Pilihan"
+msgstr "Nyahkumpulan Dipilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr ""
+msgstr "Tampal Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Clear Guides"
-msgstr "Anim Ubah Penukaran"
+msgstr "Kosongkan Panduan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
-msgstr ""
+msgstr "Cipta Tulang(-tulang) Tersuai dari Nod(-nod)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Clear Bones"
-msgstr "Anim Ubah Penukaran"
+msgstr "Kosongkan Tulang"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "Buat Rantai IK"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "Kosongkan Rantai IK"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Warning: Children of a container get their position and size determined only "
"by their parent."
msgstr ""
+"Amaran: Kanak-kanak bekas mendapat kedudukan dan saiz mereka hanya "
+"ditentukan oleh ibu bapa mereka."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Reset"
-msgstr ""
+msgstr "Zum Set Semula"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Select Mode"
-msgstr ""
+msgstr "Pilih Mod"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Drag: Rotate selected node around pivot."
-msgstr ""
+msgstr "Seret: Putar nod terpilih di sekeliling pangsi."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Padam Rect yang dipilih."
+msgstr "Alt+Seret: Pindahkan nod terpilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Padam Rect yang dipilih."
+msgstr "Alt+Seret: Skalakan nod terpilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Node yang dipilih bukan Viewport!"
+msgstr "V: Tetapkan kedudukan pangsi nod terpilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
+"Alt+RMB: Tunjukkan senarai semua nod pada kedudukan yang diklik, termasuk "
+"yang dikunci."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr ""
+msgstr "RMB: Tambah nod pada kedudukan yang diklik."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode"
-msgstr ""
+msgstr "Mod Alih"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Mode"
-msgstr ""
+msgstr "Mod Putar"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode"
-msgstr ""
+msgstr "Mod Skala"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Shift: Scale proportionally."
-msgstr ""
+msgstr "Shift: Skala secara berkadar."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6028,208 +6050,206 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
+"Tunjukkan senarai semua objek pada kedudukan yang diklik\n"
+"(sama seperti Alt+RMB dalam mod pilih)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr ""
+msgstr "Klik untuk menukar pangsi putaran objek."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
-msgstr ""
+msgstr "Mod Pan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Ruler Mode"
-msgstr ""
+msgstr "Mod Pembaris"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Toggle smart snapping."
-msgstr ""
+msgstr "Togol snap pintar."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Smart Snap"
-msgstr ""
+msgstr "Gunakan Smart Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Toggle grid snapping."
-msgstr ""
+msgstr "Togol grid menyentap."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Grid Snap"
-msgstr ""
+msgstr "Gunakan Grid Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snapping Options"
-msgstr ""
+msgstr "Pilihan Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "Gunakan Snap Putaran"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Scale Snap"
-msgstr ""
+msgstr "Gunakan Skala Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr ""
+msgstr "Snap Relatif"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "Gunakan Pixel Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Smart Snapping"
-msgstr ""
+msgstr "Snap Pintar"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Configure Snap..."
-msgstr ""
+msgstr "Konfigurasikan Snap..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Parent"
-msgstr ""
+msgstr "Snap kepada Ibu Bapa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Node Anchor"
-msgstr ""
+msgstr "Snap ke Anchor Nod"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Node Sides"
-msgstr ""
+msgstr "Snap ke Sisi Nod"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Node Center"
-msgstr ""
+msgstr "Snap ke Pusat Nod"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Other Nodes"
-msgstr ""
+msgstr "Snap ke Nod Lain"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap to Guides"
-msgstr ""
+msgstr "Snap ke Panduan"
#: 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 ""
+msgstr "Kunci objek terpilih di tempatnya (tidak dapat dialihkan)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Semua Pilihan"
+msgstr "Kunci Nod Terpilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr ""
+msgstr "Buka kunci objek terpilih (boleh dialihkan)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Gandakan Kunci Terpilih"
+msgstr "Buka Kunci Nod Terpilih"
#: 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 "Pastikan kanak-kanak objek tidak boleh dipilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Semua Pilihan"
+msgstr "Kumpulkan Nod Terpilih"
#: 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 "Mengembalikan keupayaan kanak-kanak objek untuk dipilih."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Semua Pilihan"
+msgstr "Nyahkumpulkan Nod Terpilih"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
-msgstr ""
+msgstr "Pilihan Rangka"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Bones"
-msgstr ""
+msgstr "Tunjukkan Tulang-tulang"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Custom Bone(s) from Node(s)"
-msgstr ""
+msgstr "Buat Tulang(-tulang) Tersuai dari Nod(-nod)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Custom Bones"
-msgstr ""
+msgstr "Kosongkan Tulang Tersuai"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View"
-msgstr ""
+msgstr "Pandangan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Always Show Grid"
-msgstr ""
+msgstr "Sentiasa Tunjukkan Grid"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Helpers"
-msgstr ""
+msgstr "Tunjukkan Pembantu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Rulers"
-msgstr ""
+msgstr "Tunjukkan Pembaris"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Guides"
-msgstr ""
+msgstr "Tunjukkan Panduan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Origin"
-msgstr ""
+msgstr "Tunjukkan Asal"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Viewport"
-msgstr ""
+msgstr "Tunjukkan Viewport"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Group And Lock Icons"
-msgstr ""
+msgstr "Tunjukkan Ikon Kumpulan Dan Kunci"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr ""
+msgstr "Pemilihan Pusat"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr ""
+msgstr "Pemilihan Bingkai"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
-msgstr ""
+msgstr "Pratonton Skala Kanvas"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Translation mask for inserting keys."
-msgstr ""
+msgstr "Topeng terjemahan untuk memasukkan kekunci."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation mask for inserting keys."
-msgstr ""
+msgstr "Topeng putaran untuk memasukkan kekunci."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale mask for inserting keys."
-msgstr ""
+msgstr "Topeng skala untuk memasukkan kekunci."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert keys (based on mask)."
-msgstr ""
+msgstr "Masukkan kekunci (berdasarkan topeng)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6238,328 +6258,326 @@ 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 ""
+"Masukkan kekunci automatik apabila objek diterjemahkan, diputarkan atau "
+"diskalakan (berdasarkan topeng).\n"
+"Kekunci hanya ditambahkan pada trek sedia ada, tiada trek baru akan "
+"dicipta.\n"
+"Kekunci mesti dimasukkan secara manual untuk kali pertama."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Auto Insert Key"
-msgstr ""
+msgstr "Auto Masukkan Kunci"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation Key and Pose Options"
-msgstr ""
+msgstr "Pilihan Kunci Animasi dan Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr ""
+msgstr "Masukkan Kunci (Trek Sedia Ada)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "Salin Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr ""
+msgstr "Kosongkan Pose"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Tambah Titik Nod"
+msgstr "Tambah Nod Di Sini"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Masukkan Kunci di Sini"
+msgstr "Adegan Contoh Di Sini"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Darabkan langkah grid dengan 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Bahagikan langkah grid dengan 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan View"
-msgstr ""
+msgstr "Pandangan Pan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr ""
+msgstr "Zum ke 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr ""
+msgstr "Zum ke 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr ""
+msgstr "Zum ke 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Zum Keluar"
+msgstr "Zum ke 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr ""
+msgstr "Zum ke 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Add %s"
-msgstr ""
+msgstr "Tambah %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
-msgstr ""
+msgstr "Menambah %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Cannot instantiate multiple nodes without root."
-msgstr ""
+msgstr "Tidak boleh instantiate berbilang nod tanpa akar."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "Cipta Nod"
#: 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 ""
+msgstr "Ralat membuat adegan dari %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Default Type"
-msgstr ""
+msgstr "Tukar Jenis Lalai"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
+"Seret & lepas + Shift : Tambah nod sebagai adik-beradik\n"
+"Seret & lepas + Alt : Tukar jenis nod"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Polygon3D"
-msgstr ""
+msgstr "Cipta Poligon3D"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Edit Poly"
-msgstr ""
+msgstr "Edit Poli"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr ""
+msgstr "Edit Poli (Alih Keluar Titik)"
#: editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
-msgstr ""
+msgstr "Tetapkan Pemegang"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
-msgstr ""
+msgstr "Muatkan Topeng Pelepasan"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Restart"
-msgstr ""
+msgstr "Mula semula"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Clear Emission Mask"
-msgstr ""
+msgstr "Keluarkan Topeng Emission"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Particles"
-msgstr ""
+msgstr "Zarah"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
-msgstr ""
+msgstr "Kiraan Titik Dijana:"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Mask"
-msgstr ""
+msgstr "Topeng Emission"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Solid Pixels"
-msgstr ""
+msgstr "Piksel Pepejal"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Piksel Sempadan"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Directed Border Pixels"
-msgstr ""
+msgstr "Piksel Sempadan Diarahkan"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Capture from Pixel"
-msgstr ""
+msgstr "Tangkap daripada Pixel"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Colors"
-msgstr ""
+msgstr "Warna Emission"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
-msgstr ""
+msgstr "CPUParticles"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Mesh"
-msgstr ""
+msgstr "Cipta Titik Emission Daripada Mesh"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr ""
+msgstr "Cipta Titik Emission Daripada Nod"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 0"
-msgstr ""
+msgstr "Flat 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr ""
+msgstr "Flat 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
-msgstr ""
+msgstr "Perlahan Masuk"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease Out"
-msgstr ""
+msgstr "Perlahan Keluar"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "Smoothstep"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
-msgstr ""
+msgstr "Ubah Suai Titik Lengkung"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Tangent"
-msgstr ""
+msgstr "Ubah Suai Tangen Lengkung"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Load Curve Preset"
-msgstr ""
+msgstr "Muat Pratetap Lengkung"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Add Point"
msgstr "Tambah Titik"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Remove Point"
-msgstr "Buang Trek Anim"
+msgstr "Buang Titik"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Left Linear"
-msgstr ""
+msgstr "Linear Kiri"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Right Linear"
-msgstr ""
+msgstr "Linear Kanan"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Load Preset"
-msgstr ""
+msgstr "Muatkan Pratetap"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Remove Curve Point"
-msgstr ""
+msgstr "Keluarkan Titik Lengkung"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "Togol Lengkung Linear Tangen"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
-msgstr ""
+msgstr "Tahan Shift untuk mengedit tangen secara individu"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Right click to add point"
-msgstr ""
+msgstr "Klik kanan untuk menambah titik"
#: editor/plugins/gi_probe_editor_plugin.cpp
msgid "Bake GI Probe"
-msgstr ""
+msgstr "Panggang GI Probe"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Gradient Edited"
-msgstr ""
+msgstr "Kecerunan Disunting"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
-msgstr ""
+msgstr "Item %d"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Items"
-msgstr ""
+msgstr "Item"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item List Editor"
-msgstr ""
+msgstr "Editor Senarai Item"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr ""
+msgstr "Cipta Poligon Occluder"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr ""
+msgstr "Mesh kosong!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a Trimesh collision shape."
-msgstr ""
+msgstr "Tidak dapat mencipta bentuk perlanggaran Trimesh."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr ""
+msgstr "Buat Badan Trimesh Statik"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
-msgstr ""
+msgstr "Ini tidak berfungsi pada akar tempat adegan!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Shape"
-msgstr ""
+msgstr "Cipta Bentuk Statik Trimesh"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create a single convex collision shape for the scene root."
@@ -7552,7 +7570,6 @@ msgstr ""
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
-#, fuzzy
msgid "Search"
msgstr "Cari"
@@ -8006,38 +8023,32 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Saiz: "
+msgstr "Saiz:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Parameter Berubah"
+msgstr "Perubahan Bahan:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Parameter Berubah"
+msgstr "Perubahan Shader:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Parameter Berubah"
+msgstr "Perubahan Permukaan:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
-msgstr "Panggilan"
+msgstr "Cabutan Panggilan:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Sifat-sifat"
+msgstr "Bucu:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -8707,9 +8718,8 @@ msgid "{num} constant(s)"
msgstr "Pemalar"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Pemalar Sahaja"
+msgstr "Tiada pemalar ditemui."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
@@ -8756,9 +8766,8 @@ msgid "Importing items {n}/{n}"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Updating the editor"
-msgstr "Keluar dari editor?"
+msgstr "Mengemaskini editor"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8845,19 +8854,16 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Runtuhkan Semua"
+msgstr "Lipat jenis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Kembangkan Semua"
+msgstr "Kembangkan jenis."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Pilih Fail Templat"
+msgstr "Pilih semua benda Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select With Data"
@@ -9013,9 +9019,8 @@ msgid "Add StyleBox Item"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Keluarkan Item"
+msgstr "Keluarkan Benda:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
@@ -9041,9 +9046,8 @@ msgid "Old Name:"
msgstr "Nama Nod:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Import Sebagai:"
+msgstr "Import Benda"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9123,9 +9127,8 @@ msgid "Show default type items alongside items that have been overridden."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "ganti:"
+msgstr "Gantikan Semua"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
@@ -9149,9 +9152,8 @@ msgid "Add, remove, organize and import Theme items."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Pratonton:"
+msgstr "Tambah Pratonton"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9159,9 +9161,8 @@ msgid "Default Preview"
msgstr "Lalai"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Simpan Adegan"
+msgstr "Pilih Adegan UI:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9726,9 +9727,8 @@ msgid "Unstaged Changes"
msgstr "Parameter Berubah"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Komuniti"
+msgstr "Commit:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
@@ -9805,9 +9805,8 @@ msgid "Discard all changes"
msgstr "Parameter Berubah"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Menyimpan perubahan tempatan..."
+msgstr "Peringkat semua perubahan"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9845,9 +9844,8 @@ msgid "30"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Padanan:"
+msgstr "Ranting"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9879,9 +9877,8 @@ msgid "Remove Remote"
msgstr "Keluarkan Item"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Nama Nod:"
+msgstr "Nama Remote"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -12600,6 +12597,15 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Cipta Poligon Occluder"
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13655,9 +13661,8 @@ msgid "Exporting APK..."
msgstr "Eksport..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Nyahpasang"
+msgstr "Menyahpasang..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13665,9 +13670,8 @@ msgid "Installing to device, please wait..."
msgstr "Mengambil maklumat cermin, sila tunggu..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not install to device: %s"
-msgstr "Tidak dapat memulakan subproses!"
+msgstr "Tidak dapat memasang ke peranti: %s"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13797,11 +13801,8 @@ msgid "Signing debug %s..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signing release %s..."
-msgstr ""
-"Mengimbas Fail,\n"
-"Sila Tunggu..."
+msgstr "Menandatangani keluaran %s..."
#: platform/android/export/export_plugin.cpp
msgid "Could not find keystore, unable to export."
@@ -13887,9 +13888,8 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "Kandungan Pakej:"
+msgstr "Pakej tidak ditemui: %s"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13916,9 +13916,8 @@ msgid "Adding files..."
msgstr "Tapis Fail-fail..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Tidak dapat memulakan subproses!"
+msgstr "Tidak dapat mengeksport fail projek"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -13944,10 +13943,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13973,35 +13968,210 @@ msgid "Could not write file:"
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Tidak dapat mencipta folder."
+msgstr "Tidak dapat membaca fail:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Tidak dapat mencipta folder."
+msgstr "Tidak dapat membaca shell HTML:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Tidak dapat mencipta folder."
+msgstr "Tidak dapat mencipta direktori server HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Ralat semasa menyimpan TileSet!"
+msgstr "Ralat memulakan server HTTP:"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nama kumpulan tidak sah."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Tidak dapat mencipta folder."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Nama tidak sah."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Gagal untuk memuatkan sumber."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Gagal untuk memuatkan sumber."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Nama tidak sah."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Nama kumpulan tidak sah."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Tiada sub-sumber dijumpai."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Mencipta Gambar Kecil"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14012,6 +14182,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -14064,6 +14297,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Nama tidak sah."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Versi Terpasang Lain:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nama kumpulan tidak sah."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14133,11 +14387,11 @@ msgstr "Nod A dan Nod B mestilah PhysicsBody2Ds"
#: scene/2d/joints_2d.cpp
msgid "Node A must be a PhysicsBody2D"
-msgstr ""
+msgstr "Nod A mestilah PhysicsBody2D"
#: scene/2d/joints_2d.cpp
msgid "Node B must be a PhysicsBody2D"
-msgstr ""
+msgstr "Nod B mestilah PhysicsBody2D"
#: scene/2d/joints_2d.cpp
msgid "Joint is not connected to two PhysicsBody2Ds"
@@ -14414,8 +14668,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14655,7 +14909,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
@@ -14814,4 +15068,4 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
-msgstr ""
+msgstr "Pemalar tidak dapat diubah suai."
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 0849aa8c03..025abad2dc 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -21,13 +21,14 @@
# slasken06 <ask.skivdal@gmail.com>, 2021.
# Daniel Skogly <daniel@klungo.no>, 2021.
# Imre Kristoffer Eilertsen <imreeil42@gmail.com>, 2022.
+# Edvard Ekrem Sæther <edvardekrem@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: Imre Kristoffer Eilertsen <imreeil42@gmail.com>\n"
+"PO-Revision-Date: 2022-01-24 02:05+0000\n"
+"Last-Translator: Edvard Ekrem Sæther <edvardekrem@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
"engine/godot/nb_NO/>\n"
"Language: nb\n"
@@ -35,7 +36,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -339,7 +340,7 @@ msgstr "Dupliser Nøkler"
#: editor/animation_track_editor.cpp
msgid "Add RESET Value(s)"
-msgstr ""
+msgstr "Legg Til RESET-Verdi(er)"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -395,9 +396,8 @@ msgstr "Kan ikke åpne '%s'."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animasjon"
+msgstr "animasjon"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -405,9 +405,8 @@ msgstr "AnimasjonAvspiller kan ikke animere seg selv, kun andre avspillere."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Egenskapen «%s» eksisterer ikke."
+msgstr "egenskap '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -524,8 +523,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -534,8 +533,8 @@ msgstr ""
"\n"
"For å legge til egendefinerte spor, gå til scenens importinstillinger og "
"sett\n"
-"\"Animasjon > Lagring\" til \"Filer\", aktiver \"Animasjon > Behold egne spor"
-"\", og importer på nytt.\n"
+"\"Animasjon > Lagring\" til \"Filer\", aktiver \"Animasjon > Behold egne "
+"spor\", og importer på nytt.\n"
"Alternativt, bruk et importoppsett som importerer animasjonen som separate "
"filer."
@@ -544,9 +543,8 @@ msgid "Warning: Editing imported animation"
msgstr "Advarsel: Redigerer importert animasjon"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Select an AnimationPlayer node to create and edit animations."
-msgstr "Velg en AnimationPlayer fra scenetreet for å endre animasjoner."
+msgstr "Velg en AnimationPlayer-node for å lage og redigere animasjoner."
#: editor/animation_track_editor.cpp
msgid "Only show tracks from nodes selected in tree."
@@ -562,9 +560,8 @@ msgid "Snap:"
msgstr "Steg:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation step value."
-msgstr "Animasjonstre er gyldig."
+msgstr "Animasjonstrinnverdi."
#: editor/animation_track_editor.cpp
msgid "Seconds"
@@ -591,9 +588,8 @@ msgid "Animation properties."
msgstr "Animasjon egenskaper."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Copy Tracks"
-msgstr "Kopier Parametre"
+msgstr "Kopier Spor"
#: editor/animation_track_editor.cpp
msgid "Scale Selection"
@@ -708,9 +704,8 @@ msgid "Copy"
msgstr "Kopier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Select All/None"
-msgstr "Kutt Noder"
+msgstr "Velg Alle/Ingen"
#: editor/animation_track_editor_plugins.cpp
msgid "Add Audio Track Clip"
@@ -816,9 +811,8 @@ msgid "Method in target node must be specified."
msgstr "Metode i målnoden må spesifiseres."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Method name must be a valid identifier."
-msgstr "Navn er ikke en gyldig identifikator:"
+msgstr "Metodenavnet må være en gyldig identifikator."
#: editor/connections_dialog.cpp
#, fuzzy
@@ -1422,7 +1416,7 @@ msgid "Bus Options"
msgstr "Bus valg"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliser"
@@ -2264,8 +2258,8 @@ msgstr "Metodebeskrivelse:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Det finnes i øyeblikket ingen beskrivelse av denne metoden. Hjelp til ved å "
"[colour=$color][url=$url]bidra med en[/url][/color]!"
@@ -3404,11 +3398,16 @@ msgstr "Kontinuerlig"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Oppdater Endringer"
#: editor/editor_node.cpp
#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Forandre"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Hide Update Spinner"
msgstr "Deaktiver Oppdateringsspinner"
@@ -4198,6 +4197,14 @@ msgstr "Navn inneholder ugyldige tegn."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4324,7 +4331,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Duplisér"
@@ -5189,6 +5196,10 @@ msgid "Rename Animation"
msgstr "Endre navn på Animasjon"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliser Animasjon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Blend Next Changed"
msgstr "Blend Neste Endret"
@@ -5202,10 +5213,6 @@ msgid "Load Animation"
msgstr "Last Animasjon"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Dupliser Animasjon"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ingen animasjon å kopiere!"
@@ -13166,6 +13173,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Fjern Funksjon"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Fjern Funksjon"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Fjern Funksjon"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -14571,10 +14588,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Navn er ikke en gyldig identifikator:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14622,17 +14635,197 @@ msgstr "Kunne ikke opprette mappe."
msgid "Error starting HTTP server:"
msgstr "Feil ved lagring av TextFile:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Prosjektnavn:"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ugyldig Filsti."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Kunne ikke laste ressurs."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Kunne ikke laste ressurs."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "MÃ¥ ha en gyldig filutvidelse."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "MÃ¥ ha en gyldig filutvidelse."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ikke funnet!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Lager Thumbnail"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Navn er ikke en gyldig identifikator:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14643,6 +14836,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14701,6 +14957,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ugyldig Filsti."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "MÃ¥ ha en gyldig filutvidelse."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Prosjektnavn:"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -15055,8 +15332,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15300,7 +15577,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index f7f68d55f8..c8e602d3ce 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -53,13 +53,15 @@
# Daan van Luijk <daanvl@outlook.be>, 2021.
# Dani Verschoor <daniverschoor@outlook.com>, 2021.
# naan <xlightfox@hotmail.com>, 2021.
+# Tim Visee <tim+weblate@visee.me>, 2022.
+# Ferhat Geçdoğan <ferhatgectao@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-31 08:52+0000\n"
-"Last-Translator: naan <xlightfox@hotmail.com>\n"
+"PO-Revision-Date: 2022-01-30 07:16+0000\n"
+"Last-Translator: Ferhat Geçdoğan <ferhatgectao@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/"
"nl/>\n"
"Language: nl\n"
@@ -67,7 +69,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -373,7 +375,7 @@ msgstr "Sleutel(s) dupliceren"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Voeg %d Frame(s) toe"
+msgstr "Voeg RESET Frame(s) toe"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -556,8 +558,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1427,7 +1429,7 @@ msgid "Bus Options"
msgstr "Audiobusopties"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliceren"
@@ -1539,7 +1541,7 @@ msgstr "Ongeldige naam."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Kan niet beginnen met een cijfer."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -1807,7 +1809,7 @@ msgstr "Laat u 3D scenes weergeven en bewerken."
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
"Staat toe het script aan te passen door middel van de geïntegreerde script "
-"editor"
+"editor."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
@@ -1844,7 +1846,8 @@ msgstr "(geen)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
msgstr ""
-"Verwijder huidig geselecteerde profiel, '%s'? Kan niet worden ongedaan."
+"Verwijder huidig geselecteerde profiel, '%s'? Kan niet ongedaan gemaakt "
+"worden."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1971,7 +1974,7 @@ msgstr "Editor Profielen beheren"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select Current Folder"
-msgstr "Huidige map selecteren"
+msgstr "Huidige Map Selecteren"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "File exists, overwrite?"
@@ -2166,9 +2169,8 @@ msgid "Properties"
msgstr "Eigenschappen"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "overschreven:"
+msgstr "overschrijft %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2183,28 +2185,24 @@ msgid "Theme Properties"
msgstr "Thema-eigenschappen"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Colors"
-msgstr "Kleur"
+msgstr "Kleuren"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
msgstr "Constanten"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
-msgstr "Lettertype"
+msgstr "Lettertypes"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Icoon"
+msgstr "Iconen"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Styles"
-msgstr "Stijl"
+msgstr "Stijlen"
#: editor/editor_help.cpp
msgid "Enumerations"
@@ -2232,8 +2230,8 @@ msgstr "Methodebeschrijvingen"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Er is momenteel geen beschrijving voor deze methode. Help ons alstublieft "
"door [color=$color][url=$url]een bijdrage te leveren[/url][/color]!"
@@ -2312,9 +2310,8 @@ msgid "Property:"
msgstr "Eigenschap:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(waarde)"
+msgstr "Waarde vastzetten"
#: editor/editor_inspector.cpp
msgid ""
@@ -2338,26 +2335,23 @@ msgstr "Zet Meerdere:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "Vastgezet %s"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "Losgemaakt %s"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Eigenschappen"
+msgstr "Kopieer Eigenschap"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Eigenschappen"
+msgstr "Plak Eigenschap"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Kopieer Script Pad"
+msgstr "Kopieer Eigenschap Pad"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2405,7 +2399,7 @@ msgstr "Omhoog"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr "Knoop"
+msgstr "Knooppunt"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -2732,25 +2726,25 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Niks om ongedaan te maken."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
-msgstr "Ongedaan maken"
+msgstr "Ongedaan maken: %s"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
msgstr ""
#: editor/editor_node.cpp
+#, fuzzy
msgid "Nothing to redo."
-msgstr ""
+msgstr "Niks om opnieuw te doen."
#: editor/editor_node.cpp
#, fuzzy
msgid "Redo: %s"
-msgstr "Opnieuw"
+msgstr "Opnieuw doen: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -3100,9 +3094,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Beheer ongebruikte bronnen..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Project hernoemen"
+msgstr "Huidig Project Herladen"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3271,13 +3264,12 @@ msgid "Help"
msgstr "Help"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Open Godot online documentatie"
+msgstr "Online Documentatie"
#: editor/editor_node.cpp
msgid "Questions & Answers"
-msgstr ""
+msgstr "Vragen & Antwoorden"
#: editor/editor_node.cpp
msgid "Report a Bug"
@@ -3285,7 +3277,7 @@ msgstr "Meld een probleem"
#: editor/editor_node.cpp
msgid "Suggest a Feature"
-msgstr ""
+msgstr "Stel een Feature voor"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
@@ -3296,9 +3288,8 @@ msgid "Community"
msgstr "Gemeenschap"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
-msgstr "Over"
+msgstr "Over Godot"
#: editor/editor_node.cpp
msgid "Support Godot Development"
@@ -3354,10 +3345,16 @@ msgid "Update Continuously"
msgstr "Continu Bijwerken"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Bijwerken indien gewijzigd"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materiaal Wijzigingen"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Update spinner verbergen"
@@ -3371,7 +3368,7 @@ msgstr "Inspecteur"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr "Vergroot onderste paneel"
+msgstr "Vergroot Onderste Paneel"
#: editor/editor_node.cpp
msgid "Output"
@@ -3392,7 +3389,6 @@ msgid "Manage Templates"
msgstr "Sjablonen beheren"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
msgstr "Installeer Vanuit Bestand"
@@ -3488,9 +3484,8 @@ msgid "Select"
msgstr "Selecteer"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Huidige map selecteren"
+msgstr "Huidige Selecteren"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3554,14 +3549,12 @@ msgid "Update"
msgstr "Update"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Versie:"
+msgstr "Versie"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Auteurs"
+msgstr "Auteur"
#: editor/editor_plugin_settings.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -3573,14 +3566,12 @@ msgid "Measure:"
msgstr "Meting:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Frame Tijd (sec)"
+msgstr "Frame Tijd (ms)"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (ms)"
-msgstr "Gemiddelde Tijd (sec)"
+msgstr "Gemiddelde Tijd (ms)"
#: editor/editor_profiler.cpp
msgid "Frame %"
@@ -3712,7 +3703,7 @@ msgstr ""
#: editor/editor_resource_picker.cpp
msgid "Quick Load"
-msgstr ""
+msgstr "Snel Laden"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -3733,7 +3724,6 @@ msgid "Paste"
msgstr "Plakken"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Convert to %s"
msgstr "Omzetten naar %s"
@@ -3807,9 +3797,8 @@ msgstr "Vanuit knoop importeren:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Fout"
+msgstr "%s Fout"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3850,12 +3839,12 @@ msgstr "Kan hostname niet herleiden:"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Kan niet verbinden met host:"
+msgstr "Kan niet verbinden met host."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "No response from the mirror."
-msgstr "Geen antwoord van host:"
+msgstr "Geen antwoord van host."
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3868,9 +3857,8 @@ msgid "Request ended up in a redirect loop."
msgstr "Aanvraag mislukt, te veel redirects"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Aanvraag Mislukt."
+msgstr "Aanvraag mislukt:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -4025,9 +4013,8 @@ msgid "Uninstall templates for the current version."
msgstr "Initiële waarde van teller"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download from:"
-msgstr "Downloadfout"
+msgstr "Downloaden van:"
#: editor/export_template_manager.cpp
#, fuzzy
@@ -4153,6 +4140,14 @@ msgstr "Naam bevat ongeldige tekens."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4274,7 +4269,7 @@ msgstr "Laatst bewerkt"
msgid "Sort by First Modified"
msgstr "Laatst bewerkt"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Dupliceren..."
@@ -5090,6 +5085,10 @@ msgid "Rename Animation"
msgstr "Animatie Hernoemen"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Dupliceer Animatie"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Meng met volgende aanpassing"
@@ -5102,10 +5101,6 @@ msgid "Load Animation"
msgstr "Animatie laden"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Dupliceer Animatie"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Geen animatie om te kopiëren!"
@@ -8926,7 +8921,7 @@ msgstr "Geen deel-hulpbronnen gevonden."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} momenteel geselecteerd"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
@@ -13008,6 +13003,16 @@ msgstr "Wijzig Cylinder Vorm Radius"
msgid "Set Occluder Sphere Position"
msgstr "Zet Curve In Positie"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Zet Curve Punt Positie"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Zet Curve Punt Positie"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Wijzig Cylinder Straal"
@@ -14408,10 +14413,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ongeldige identifier:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Vereist icoon is niet gespecificeerd in de preset."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Stop HTTP Server"
@@ -14457,17 +14458,198 @@ msgstr "Map kon niet gemaakt worden."
msgid "Error starting HTTP server:"
msgstr "Fout bij het opslaan van de scène."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ongeldige projectnaam."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Ongeldige geometrie, kan geen polygon creëren."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Map kon niet gemaakt worden."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ongeldig basis Pad."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Bron laden mislukt."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Bron laden mislukt."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Ongeldige extentie."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Ongeldige extentie."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Niet gevonden!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Thumbnail Aan Het Maken"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Kon template niet openen voor export:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ongeldige identifier:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14478,6 +14660,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Ongeldige pakket korte naam."
@@ -14537,6 +14782,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ongeldige afmetingen van splash screen afbeelding (moet 620×300 zijn)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ongeldig pad."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Ongeldige extentie."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ongeldig product GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14965,8 +15231,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Op GPU-gebaseerde particles worden niet ondersteund door het GLES2 grafische "
"stuurprogramma.\n"
@@ -15232,9 +15498,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Deze knoop is verouderd. Gebruik in plaats daarvan AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Kleur: #%s\n"
diff --git a/editor/translations/or.po b/editor/translations/or.po
index fb6c7ff0c2..3cea395fb0 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -494,8 +494,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1329,7 +1329,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2102,8 +2102,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3128,7 +3128,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3852,6 +3856,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3964,7 +3976,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4750,19 +4762,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12189,6 +12201,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13480,10 +13500,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13524,16 +13540,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13544,6 +13730,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13596,6 +13845,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13946,8 +14213,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14187,7 +14454,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 1f10b9f3a5..0117a72a86 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -24,7 +24,7 @@
# Sebastian Pasich <sebastian.pasich@gmail.com>, 2017, 2019, 2020.
# siatek papieros <sbigneu@gmail.com>, 2016.
# Zatherz <zatherz@linux.pl>, 2017, 2020, 2021.
-# Tomek <kobewi4e@gmail.com>, 2018, 2019, 2020, 2021.
+# Tomek <kobewi4e@gmail.com>, 2018, 2019, 2020, 2021, 2022.
# Wojcieh Er Zet <wojcieh.rzepecki@gmail.com>, 2018.
# Dariusz Siek <dariuszynski@gmail.com>, 2018, 2019, 2020, 2021.
# Szymon Nowakowski <smnbdg13@gmail.com>, 2019.
@@ -53,13 +53,15 @@
# Mateusz Żak <matisgramy@gmail.com>, 2021.
# voltinus <voltinusmail@gmail.com>, 2021.
# Lech Migdal <lech.migdal@gmail.com>, 2022.
+# Piotr <promantix@gmail.com>, 2022.
+# Igor Kordiukiewicz <igorkordiukiewicz@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
-"Last-Translator: Lech Migdal <lech.migdal@gmail.com>\n"
+"PO-Revision-Date: 2022-01-26 19:55+0000\n"
+"Last-Translator: Igor Kordiukiewicz <igorkordiukiewicz@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
"Language: pl\n"
@@ -68,7 +70,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -371,9 +373,8 @@ msgid "Duplicate Key(s)"
msgstr "Duplikuj klucz(e)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Dodaj %d klatek"
+msgstr "Dodaj wartość(i) RESET"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -545,9 +546,8 @@ msgstr ""
"Ta opcja nie działa dla edycji Beziera, ponieważ jest to tylko jedna ścieżka."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Przeskaluj klatki kluczowe"
+msgstr "Dodaj klucze animacji RESET"
#: editor/animation_track_editor.cpp
msgid ""
@@ -556,8 +556,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -566,8 +566,8 @@ msgstr ""
"\n"
"By umożliwić dodawanie własnych ścieżek, przejdź do ustawień importu i "
"zmień\n"
-"\"Animation > Storage\" na \"Files\", włącz \"Animation > Keep Custom Tracks"
-"\", a potem importuj ponownie.\n"
+"\"Animation > Storage\" na \"Files\", włącz \"Animation > Keep Custom "
+"Tracks\", a potem importuj ponownie.\n"
"Alternatywnie, użyj profilu importu, który importuje animacje do oddzielnych "
"plików."
@@ -1419,7 +1419,7 @@ msgid "Bus Options"
msgstr "Opcje magistrali"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikuj"
@@ -1728,8 +1728,9 @@ msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\" lub \"PVRTC"
-"\". Włącz \"Import Etc 2\" lub \"Import Pvrtc\" w Ustawieniach Projektu."
+"Platforma docelowa wymaga dla GLES3 kompresji tekstur \"ETC2\" lub "
+"\"PVRTC\". Włącz \"Import Etc 2\" lub \"Import Pvrtc\" w Ustawieniach "
+"Projektu."
#: editor/editor_export.cpp
msgid ""
@@ -2206,8 +2207,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Obecnie nie ma opisu dla tej właściwości. Pomóż nam, [color=$color][url="
-"$url]wysyłając ją[/url][/color]!"
+"Obecnie nie ma opisu dla tej właściwości. Pomóż nam, [color=$color]"
+"[url=$url]wysyłając ją[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2215,11 +2216,11 @@ msgstr "Opisy metod"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color][url="
-"$url]wysyłając ją[/url][/color]!"
+"Obecnie nie ma opisu dla tej metody. Pomóż nam, [color=$color]"
+"[url=$url]wysyłając ją[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2295,18 +2296,18 @@ msgid "Property:"
msgstr "Właściwość:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(wartość)"
+msgstr "Przypnij wartość"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
msgstr ""
+"Przypięcie wartości wymusza zapisanie jej, nawet jeśli jest równa domyślniej."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Przypnij wartość [Niedostępne, ponieważ \"%s\" jest tylko dla edytora]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2321,26 +2322,23 @@ msgstr "Ustaw wiele:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "Przypięto %s"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "Odpięto %s"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Skopiuj właściwości"
+msgstr "Kopiuj właściwość"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Wklej właściwości"
+msgstr "Wklej właściwość"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Skopiuj ścieżkę skryptu"
+msgstr "Skopiuj ścieżkę właściwości"
#: editor/editor_log.cpp
msgid "Output:"
@@ -3066,9 +3064,8 @@ msgid "Install Android Build Template..."
msgstr "Zainstaluj szablon eksportu dla Androida..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Otwórz folder danych edytora"
+msgstr "Otwórz folder danych użytkownika"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3330,10 +3327,16 @@ msgid "Update Continuously"
msgstr "Aktualizuj ciÄ…gle"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Aktualizuj przy zmianie"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Zmiany materiału:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ukryj wiatraczek aktualizacji"
@@ -3775,9 +3778,8 @@ msgstr "Zaimportuj z węzła:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Błąd"
+msgstr "Błąd %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4100,6 +4102,14 @@ msgstr "Nazwa zawiera niedozwolone znaki."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4218,7 +4228,7 @@ msgstr "Ostatnie zmodyfikowane"
msgid "Sort by First Modified"
msgstr "Pierwsze zmodyfikowane"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplikuj..."
@@ -4319,9 +4329,8 @@ msgid "Replace..."
msgstr "Zamień..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "ZastÄ…p wszystkie"
+msgstr "ZastÄ…p w plikach"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4332,9 +4341,8 @@ msgid "Replace: "
msgstr "ZastÄ…p: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "ZastÄ…p wszystkie"
+msgstr "Zastąp wszystkie (NIE MOŻNA COFNĄĆ)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4560,6 +4568,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"Wybierz plik zasobu z systemu plików lub z inspektoraby zmienić ustawienia "
+"importu."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5031,6 +5041,10 @@ msgid "Rename Animation"
msgstr "Zmień nazwę animacji"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplikuj animacjÄ™"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Zmieszaj kolejnÄ… po zmianach"
@@ -5043,10 +5057,6 @@ msgid "Load Animation"
msgstr "Wczytaj animacjÄ™"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplikuj animacjÄ™"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Brak animacji do skopiowania!"
@@ -6062,7 +6072,7 @@ msgstr "Tryb skalowania"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Shift: Scale proportionally."
-msgstr ""
+msgstr "Shift: Skaluj proporcjonalnie."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6161,9 +6171,8 @@ msgstr "Zablokuj wybrany obiekt w miejscu (nie można go przesuwać)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Zablokuj wybrane"
+msgstr "Zablokuj zaznaczone węzły"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6172,9 +6181,8 @@ msgstr "Odblokuj wybrany obiekt (można go przesuwać)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Odblokuj wybrane"
+msgstr "Odblokuj zaznaczone węzły"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6183,9 +6191,8 @@ msgstr "Zablokuj selekcję węzłów podrzędnych."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Grupuj wybrane"
+msgstr "Grupuj zaznaczone węzły"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6194,9 +6201,8 @@ msgstr "Odblokuj selekcję węzłów podrzędnych."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Rozgrupuj wybrane"
+msgstr "Rozgrupuj zaznaczone węzły"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -7841,9 +7847,8 @@ msgid "Find in Files..."
msgstr "Znajdź w plikach..."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "Zamień..."
+msgstr "Zamień w plikach..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -8371,11 +8376,11 @@ msgstr "Przełącz swobodny widok"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "Zmniejsz pole widzenia"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Zwiększ pole widzenia"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -9786,7 +9791,7 @@ msgstr "Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Data:"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9827,23 +9832,23 @@ msgstr "Zmień nazwę"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Hasło"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Ścieżka do publicznego klucza SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Wybierz ścieżkę do publicznego klucza SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Ścieżka do prywatnego klucza SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Wybierz ścieżkę do prywatnego klucza SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
@@ -9888,15 +9893,15 @@ msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -9915,7 +9920,7 @@ msgstr "Usuń ścieżkę animacji"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Nazwa gałęzi"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -10857,16 +10862,16 @@ msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Tylko tryb fragmentów/światła) (Wektor) Suma bezwzględnej pochodnej po \"x"
-"\" i \"y\"."
+"(Tylko tryb fragmentów/światła) (Wektor) Suma bezwzględnej pochodnej po "
+"\"x\" i \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Tylko tryb fragmentów/światła) (Skalar) Suma bezwzględnej pochodnej po \"x"
-"\" i \"y\"."
+"(Tylko tryb fragmentów/światła) (Skalar) Suma bezwzględnej pochodnej po "
+"\"x\" i \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
@@ -11476,8 +11481,8 @@ msgid ""
"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
"'\"'"
msgstr ""
-"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać \"/\", \":\", \"="
-"\", \"\\\" lub \""
+"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać \"/\", \":\", "
+"\"=\", \"\\\" lub \""
#: editor/project_settings_editor.cpp
msgid "An action with the name '%s' already exists."
@@ -11624,8 +11629,8 @@ msgid ""
"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
"'\"'."
msgstr ""
-"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać \"/\", \":\", \"="
-"\", \"\\\" lub \"."
+"Niepoprawna nazwa akcji. Nie może być pusta ani zawierać \"/\", \":\", "
+"\"=\", \"\\\" lub \"."
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -12819,6 +12824,16 @@ msgstr "Ustaw promień sfery przesłaniacza"
msgid "Set Occluder Sphere Position"
msgstr "Ustaw pozycję sfery przesłaniacza"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Ustaw pozycjÄ™ punktu portalu"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Ustaw pozycje punktu krzywej"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Zmień promień cylindra"
@@ -13536,7 +13551,7 @@ msgstr "Ustaw wyrażenie"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Wróć"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
@@ -13549,7 +13564,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Dopóki"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
@@ -13557,7 +13572,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iterator"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
@@ -13577,7 +13592,7 @@ msgstr "Iterator stał się nieprawidłowy: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Sekwencja"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
@@ -13820,7 +13835,7 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Czekaj"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14206,10 +14221,6 @@ msgstr "App Store Team ID nie podany - nie można skonfigurować projektu."
msgid "Invalid Identifier:"
msgstr "Niepoprawny identyfikator:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Wymagana ikona nie jest podana w profilu eksportu."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Zatrzymaj serwer HTTP"
@@ -14250,16 +14261,202 @@ msgstr "Nie udało się utworzyć folderu serwera HTTP:"
msgid "Error starting HTTP server:"
msgstr "Błąd uruchamiania serwera HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nieprawidłowa nazwa projektu."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Nieprawidłowa geometria, nie można utworzyć wielokąta."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Nie można utworzyć katalogu."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Niepoprawna ścieżka bazowa."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Nie udało się wczytać zasobu."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Nie udało się wczytać zasobu."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Niepoprawne rozszerzenie."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Niepoprawne rozszerzenie."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nie znaleziono ikon."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Tworzenie miniatury"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Nie udało się znaleźć szablonu APK do eksportu:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Nieprawidłowy identyfikator paczki:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Poświadczenie: wymagane podpisanie kodu."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Poświadczenie: wymagane wzmocnione środowisko wykonawcze."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Poświadczenie: wymagane wzmocnione środowisko wykonawcze."
#: platform/osx/export/export.cpp
@@ -14270,6 +14467,69 @@ msgstr "Poświadczenie: Nazwa Apple ID nie podana."
msgid "Notarization: Apple ID password not specified."
msgstr "Poświadczenie: Hasło Apple ID nie podane."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Niepoprawna krótka nazwa paczki."
@@ -14330,6 +14590,27 @@ msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
"Nieprawidłowe wymiary obrazka ekranu powitalnego (powinno być 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Niepoprawna ścieżka."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Niepoprawne rozszerzenie."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nieprawidłowy GUID produktu."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14770,8 +15051,8 @@ msgstr "Obsługiwane są tylko jednolite skale."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Cząsteczki oparte o GPU są nieobsługiwane przez sterownik wideo GLES2.\n"
"Użyj zamiast tego węzła CPUParticles. Możesz użyć do tego celu opcji "
@@ -14808,8 +15089,8 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"Właściwość ROTATION_ORIENTED węzła PathFollow wymaga włączonego \"Up Vector"
-"\" w zasobie Curve jego nadrzędnego węzła Path."
+"Właściwość ROTATION_ORIENTED węzła PathFollow wymaga włączonego \"Up "
+"Vector\" w zasobie Curve jego nadrzędnego węzła Path."
#: scene/3d/physics_body.cpp
msgid ""
@@ -15054,9 +15335,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Ten węzeł jest przestarzały. Zamiast tego użyj AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Kolor: #%s\n"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index daa3074190..8dcc5099cb 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -524,8 +524,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1379,7 +1379,7 @@ msgid "Bus Options"
msgstr "Yar, Blow th' Selected Down!"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2181,8 +2181,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3231,7 +3231,12 @@ msgstr ""
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr "Change"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "Change"
#: editor/editor_node.cpp
@@ -3988,6 +3993,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4104,7 +4117,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4935,19 +4948,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12674,6 +12687,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Discharge ye' Signal"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Discharge ye' Signal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Discharge ye' Signal"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14052,10 +14075,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Yer name's got no valid identifier:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14098,17 +14117,192 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Yer index property name be thrown overboard!"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr ": Evil arguments: "
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Slit th' Node"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Yer Calligraphy be wrongly sized."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Yer Calligraphy be wrongly sized."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Yer name's got no valid identifier:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14119,6 +14313,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14174,6 +14431,27 @@ msgstr "Yer wide 310x150 logo image dimensions aint' 310x150!"
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Yer splash screen image dimensions aint' 620x300!"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr ": Evil arguments: "
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Yer Calligraphy be wrongly sized."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Yer product GUID be evil."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14524,8 +14802,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14766,7 +15044,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index 443974d90c..94dc606a58 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -24,7 +24,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-01-19 22:07+0000\n"
"Last-Translator: João Lopes <linux-man@hotmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
@@ -33,7 +33,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -520,8 +520,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1387,7 +1387,7 @@ msgid "Bus Options"
msgstr "Opções de Barramento"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -1679,10 +1679,10 @@ msgid ""
"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Plataforma Alvo exige compressão de textura 'ETC' para o driver de recurso "
+"Plataforma Alvo exige compressão de textura 'ETC' para o driver de reserva "
"em GLES2.\n"
-"Ative 'Importar Etc' nas Configurações do Projeto, ou desative 'Driver de "
-"Recurso ativo'."
+"Ative 'Import Etc' nas Configurações do Projeto, ou desative 'Driver "
+"Fallback Enabled'."
#: editor/editor_export.cpp
msgid ""
@@ -1707,10 +1707,10 @@ msgid ""
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Plataforma Alvo exige compressão de textura 'PVRTC' para o driver de recurso "
+"Plataforma Alvo exige compressão de textura 'PVRTC' para o driver de reserva "
"em GLES2.\n"
-"Ative 'Importar Pvrtc' nas Configurações do Projeto, ou desative 'Driver de "
-"Recurso Ativo'."
+"Ative 'Import Pvrtc' nas Configurações do Projeto, ou desative 'Driver "
+"Fallback Enabled'."
#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -1842,7 +1842,7 @@ msgstr "Propriedades da Classe:"
#: editor/editor_feature_profile.cpp
msgid "Main Features:"
-msgstr "Características Principais:"
+msgstr "Funcionalidades Principais:"
#: editor/editor_feature_profile.cpp
msgid "Nodes and Classes:"
@@ -1915,7 +1915,7 @@ msgstr "Novo nome do perfil:"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
-msgstr "Perfil de Características Godot"
+msgstr "Perfil de Funcionalidades Godot"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
@@ -1927,7 +1927,7 @@ msgstr "Exportar Perfil"
#: editor/editor_feature_profile.cpp
msgid "Manage Editor Feature Profiles"
-msgstr "Gerir Editor de Perfis"
+msgstr "Gerir Editor Perfis de Funcionalidades"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select Current Folder"
@@ -2187,11 +2187,11 @@ msgstr "Descrições do Método"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Atualmente não existe descrição para este Método. Por favor ajude-nos [color="
-"$color][url=$url]a contribuir com uma[/url][/color]!"
+"Atualmente não existe descrição para este Método. Por favor ajude-nos "
+"[color=$color][url=$url]a contribuir com uma[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2836,8 +2836,8 @@ msgid ""
"category."
msgstr ""
"Não foi definida nenhuma cena principal. Selecionar uma?\n"
-"Poderá alterá-la depois nas \"Configurações do Projeto\", na categoria "
-"'Application'."
+"Poderá alterá-la depois nas \"Configurações do Projeto\" dentro da categoria "
+"'application'."
#: editor/editor_node.cpp
msgid ""
@@ -2846,7 +2846,8 @@ msgid ""
"category."
msgstr ""
"A cena selecionada '%s' não existe, selecionar uma válida?\n"
-"Poderá alterá-la depois em \"application\", na categoria 'Application'."
+"Poderá alterá-la depois em \"Configurações do Projeto\" dentro da categoria "
+"'application'."
#: editor/editor_node.cpp
msgid ""
@@ -2856,8 +2857,8 @@ msgid ""
msgstr ""
"A cena selecionada '%s' não é um ficheiro de cena, selecione um ficheiro "
"válido?\n"
-"Poderá alterá-la depois em \"Configurações do Projeto\", na categoria "
-"'Application."
+"Poderá alterá-la depois em \"Configurações do Projeto\" dentro da categoria "
+"'application."
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -3037,9 +3038,8 @@ msgid "Install Android Build Template..."
msgstr "Instalar Modelo Android de Compilação..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Abrir Pasta de Dados do Editor"
+msgstr "Abrir Pasta de Dados do Utilizador"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3122,12 +3122,12 @@ msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
msgstr ""
-"Com esta opção ativa, malhas de navegação e polígonos serão visíveis no "
-"projeto em execução."
+"Quando esta opção é ativada, malhas de navegação e polígonos serão visíveis "
+"no projeto em execução."
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr "Forçar Shader de Recurso"
+msgstr "Forçar Shader de Reserva"
#: editor/editor_node.cpp
msgid ""
@@ -3138,6 +3138,12 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Quando esta opção é ativada, shaders serão usados no modo de reserva "
+"(visível via ubershader ou escondido) durante o tempo de execução.\n"
+"É útil para verificar o aspeto e performance do modo reserva, que é "
+"habitualmente mostrado brevemente.\n"
+"A compilação de shader assíncrono tem de ser ativada na configuração do "
+"projeto para esta opção ter efeito."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3150,7 +3156,7 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"Quando esta opção está ativada, quaisquer alterações feitas a uma cena no "
+"Quando esta opção é ativada, quaisquer alterações feitas a uma cena no "
"editor serão propagadas no projeto em execução.\n"
"Quando é usada remotamente num aparelho, é mais eficiente quando a opção do "
"sistema de ficheiros em rede está ativa."
@@ -3166,8 +3172,8 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"Com esta opção ativa, qualquer Script guardado será recarregado no jogo em "
-"execução.\n"
+"Quando esta opção é ativada, qualquer Script guardado será recarregado no "
+"jogo em execução.\n"
"Quando usada num aparelho remoto, é mais eficiente quando a opção sistema de "
"ficheiros em rede está ativa."
@@ -3210,7 +3216,7 @@ msgstr "Abrir Pasta de Configurações do Editor"
#: editor/editor_node.cpp
msgid "Manage Editor Features..."
-msgstr "Gerir Características do Editor..."
+msgstr "Gerir Editor Funcionalidades..."
#: editor/editor_node.cpp
msgid "Manage Export Templates..."
@@ -3302,10 +3308,16 @@ msgid "Update Continuously"
msgstr "Atualização Contínua"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Atualizar quando há Alterações"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Mudanças de Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Esconder Roleta de Atualização"
@@ -3389,7 +3401,7 @@ msgstr "Exportar Biblioteca"
#: editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr "Combinar com o Existente"
+msgstr "Mesclar com o Existente"
#: editor/editor_node.cpp
msgid "Apply MeshInstance Transforms"
@@ -3749,9 +3761,8 @@ msgstr "Importar do Nó:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Erro"
+msgstr "%s Erro"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4079,6 +4090,14 @@ msgstr "O nome contém caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4197,7 +4216,7 @@ msgstr "Ordenar por Último Modificado"
msgid "Sort by First Modified"
msgstr "Ordenar por Primeiro Modificado"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicar..."
@@ -5007,6 +5026,10 @@ msgid "Rename Animation"
msgstr "Renomear Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Misturar Seguinte Alterado"
@@ -5019,10 +5042,6 @@ msgid "Load Animation"
msgstr "Carregar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicar Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Nenhuma animação para copiar!"
@@ -5922,7 +5941,7 @@ msgid ""
msgstr ""
"Sobreposição da Câmara do Projeto.\n"
"Nenhuma instância do projeto em execução. Execute o projeto pelo editor para "
-"usar este recurso."
+"usar esta funcionalidade."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -9376,7 +9395,7 @@ msgstr "Criar a partir da Cena"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr "Combinar a partir da Cena"
+msgstr "Mesclar a partir da Cena"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "New Single Tile"
@@ -9536,7 +9555,7 @@ msgstr "Criar a partir de cena? Irá sobrescrever todos os tiles atuais."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr "Combinar a partir da cena?"
+msgstr "Mesclar a partir da cena?"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Texture"
@@ -9701,9 +9720,8 @@ msgid "TileSet"
msgstr "TileSet"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Não existem addons VCS disponíveis."
+msgstr "Não existem plugins VCS disponíveis."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9713,53 +9731,48 @@ msgstr "Erro"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Configuração remota vazia. Funcionalidades VCS que usam a rede podem não "
+"funcionar."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Nome não fornecido."
+msgstr "Nenhuma mensagem de gravação fornecida."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Gravar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Mudanças do Shader:"
+msgstr "Alterações Aplicadas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Mudanças do Shader:"
+msgstr "Alterações Não Aplicadas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Gravar"
+msgstr "Gravar:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Data:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Sub-árvore"
+msgstr "Subtítulo:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Deseja remover o ramo %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Está seguro que quer criar um tipo vazio?"
+msgstr "Quer remover o remoto %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Aplicar Reinicialização"
+msgstr "Aplicar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9770,148 +9783,132 @@ msgid "Initialize"
msgstr "Inicializar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Remover Ponto"
+msgstr "Login Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Renomear"
+msgstr "Nome de Utilizador"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Senha"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Caminho da Chave Pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Selecione caminho da chave pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Caminho da Chave Privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Selecione caminho da chave privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Passphrase SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Detetar novas alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Fechar e guardar alterações?"
+msgstr "Descartar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "A armazenar alterações locais..."
+msgstr "Aplicar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Mudanças de Material:"
+msgstr "Desaplicar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Gravar Alterações"
+msgstr "Gravar Mensagem"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Gravar Alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Gravar"
+msgstr "Gravar Lista"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Gravar tamanho da lista"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Correspondências:"
+msgstr "Ramos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Criar novo Projeto"
+msgstr "Criar Novo Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Remover Pista de Animação"
+msgstr "Remover Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Nome do Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Remoto"
+msgstr "Remotos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Criar novo Projeto"
+msgstr "Criar Novo Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Remover item"
+msgstr "Remover Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Remoto "
+msgstr "Nome do Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Remoto "
+msgstr "URL do Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Trazer"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Puxar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Impulso"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Fonte Malha:"
+msgstr "Forçar Impulso"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9931,22 +9928,19 @@ msgstr "Mudança de tipo"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Desmesclado"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Vista"
+msgstr "Vista:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Separar Caminho"
+msgstr "Separar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Modificado"
+msgstr "Unificado"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -10933,7 +10927,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Features"
-msgstr "Características"
+msgstr "Funcionalidades"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
@@ -10941,7 +10935,7 @@ msgstr "Personalizado (separados por vírgula):"
#: editor/project_export.cpp
msgid "Feature List:"
-msgstr "Lista de Características:"
+msgstr "Lista de Funcionalidades:"
#: editor/project_export.cpp
msgid "Script"
@@ -11019,8 +11013,8 @@ msgstr "Erro ao abrir ficheiro comprimido (não está no formato ZIP)."
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
msgstr ""
-"Ficheiro de projeto \".zip\" inválido, não contém um ficheiro \"project.godot"
-"\"."
+"Ficheiro de projeto \".zip\" inválido, não contém um ficheiro \"project."
+"godot\"."
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
@@ -11150,7 +11144,7 @@ msgid ""
"Not recommended for web games"
msgstr ""
"Qualidade visual superior\n"
-"Todas as características disponíveis\n"
+"Todas as funcionalidades disponíveis\n"
"Incompatível com hardware antigo\n"
"Não recomendado para jogos Web"
@@ -11166,7 +11160,7 @@ msgid ""
"Recommended for web games"
msgstr ""
"Qualidade visual inferior\n"
-"Algumas características indisponíveis\n"
+"Algumas funcionalidades indisponíveis\n"
"Funciona na maioria do hardware\n"
"Recomendado para jogos Web"
@@ -11595,7 +11589,7 @@ msgstr "Evento Ação de Entrada movido"
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr "Sobrepor por Característica"
+msgstr "Sobrepor por Funcionalidade"
#: editor/project_settings_editor.cpp
msgid "Add %d Translations"
@@ -12088,6 +12082,9 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Incapaz de guardar um ramo filho de uma cena já instanciada.\n"
+"Para guardar este ramo na sua própria cena, abra a cena original, clique "
+"direito neste ramo e selecione \"Guardar Ramo como Cena\"."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12095,6 +12092,9 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Incapaz de guardar um ramo que é parte de uma cena herdada.\n"
+"Para guardar este ramo na sua própria cena, abra a cena original, clique "
+"direito neste ramo e selecione \"Guardar Ramo como Cena\"."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12237,7 +12237,7 @@ msgstr "Tornar Raiz da Cena"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr "Combinar a partir da Cena"
+msgstr "Mesclar a Partir da Cena"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
@@ -12770,6 +12770,16 @@ msgstr "Definir Raio da Esfera do Oclusor"
msgid "Set Occluder Sphere Position"
msgstr "Definir Posição da Esfera do Oclusor"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Definir Posição do Ponto do Portal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Definir posição do Ponto da curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Mudar Raio do Cilindro"
@@ -13481,38 +13491,36 @@ msgid "Edit Member"
msgstr "Editar Membro"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Definir expressão"
+msgstr "Expressão"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Voltar"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animação"
+msgstr "Condição"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "se (cond) é:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Enquanto"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "enquanto (cond):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iterador"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "para (elem) em (input):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13528,79 +13536,71 @@ msgstr "O iterador tornou-se inválido: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Sequência"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Renomear diretoria:"
+msgstr "em ordem:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Inclinação:"
+msgstr "Alternar"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "'input' é:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Tipos:"
+msgstr "Conversão de Tipo"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "É %s?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "Em %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Auto"
+msgstr "Nele Próprio"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "No carácter %s"
+msgstr "Subtrair %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Multiplicar %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Dividir %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Adicionar %s"
+msgstr "Mod %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Definir %s"
+msgstr "ShiftLeft %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "ShiftRight %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Fixado %s"
+msgstr "BitAnd %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "BitOr %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "BitXor %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13625,19 +13625,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Nome de propriedade índice '%s' inválido no nó %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Definir %s"
+msgstr "Emitir %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Funções"
+msgstr "Função"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Redimensionar Array"
+msgstr "Compor Array"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13649,7 +13646,7 @@ msgstr ": Argumentos inválidos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a se cond, senão b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13660,64 +13657,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet não encontrado no script: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Recarregar"
+msgstr "Pré-carregar"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Ãndice Z"
+msgstr "Obter Ãndice"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Ãndice Z"
+msgstr "Definir Ãndice"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Constante"
+msgstr "Constante Global"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Constante"
+msgstr "Constante de Classe"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Constante"
+msgstr "Constante Básica"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Constante"
+msgstr "Constante Matemática"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "Ativa Singleton GDNative"
+msgstr "Obter Singleton do Motor"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Nó TimeSeek"
+msgstr "Obter Nó da Cena"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Edição da Ãrvore de Cena"
+msgstr "Obter Ãrvore da Cena"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Auto"
+msgstr "Obter Próprio"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Cortar Nós"
+msgstr "CustomNode"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13733,33 +13718,28 @@ msgstr ""
"ou cadeia (error)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Chamadas"
+msgstr "SubCall"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Constantes"
+msgstr "Construir %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Usar Espaço Local"
+msgstr "Obter Var Local"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Usar Espaço Local"
+msgstr "Definir Var Local"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "Ação"
+msgstr "Ação %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Desconstruir %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13767,40 +13747,35 @@ msgstr "Procurar VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Yield"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Esperar"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Mover Frame"
+msgstr "Próximo Frame"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Frame de Física %"
+msgstr "Próximo Frame de Física"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s sec(s)"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Sinal"
+msgstr "WaitSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Sinal"
+msgstr "WaitNodeSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Instância"
+msgstr "WaitInstanceSignal"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14162,10 +14137,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificador Inválido:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "O ícone obrigatório não está especificado na predefinição."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Parar Servidor HTTP"
@@ -14206,16 +14177,202 @@ msgstr "Incapaz de criar diretoria do servidor HTTP:"
msgid "Error starting HTTP server:"
msgstr "Erro ao iniciar servidor HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nome do projeto inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometria inválida, incapaz de criar polígono."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Não consegui criar pasta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Caminho base inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Falha ao carregar recurso."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Falha ao carregar recurso."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extensão inválida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extensão inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ãcones não encontrados."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "A criar miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Incapaz de encontrar modelo APK para exportar:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de pacote inválido:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarização: assinatura de código necessária."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarização: hardened runtime necessário."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarização: hardened runtime necessário."
#: platform/osx/export/export.cpp
@@ -14226,6 +14383,69 @@ msgstr "Notarização: nome Apple ID não especificado."
msgid "Notarization: Apple ID password not specified."
msgstr "Notarização: senha Apple ID não especificada."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nome curto de pacote inválido."
@@ -14284,13 +14504,34 @@ msgstr "Dimensão inválida da imagem do logótipo 310x150 (deve ser 310x150)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Dimensões inválidas da imagem do ecrã inicial (deve ser 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Caminho inválido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extensão inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID do produto inválido."
+
#: 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 ""
-"Um recurso SpriteFrames tem de ser criado ou definido na Propriedade \"Frames"
-"\" para que AnimatedSprite mostre frames."
+"Um recurso SpriteFrames tem de ser criado ou definido na Propriedade "
+"\"Frames\" para que AnimatedSprite mostre frames."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14419,6 +14660,8 @@ msgid ""
"The NavigationObstacle2D only serves to provide collision avoidance to a "
"Node2D object."
msgstr ""
+"NavigationObstacle2D serve apenas para fornecer prevenção de colisão a um "
+"objeto Node2D."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14444,7 +14687,6 @@ msgstr ""
"ParallaxBackground."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
@@ -14462,6 +14704,12 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"No macOS a renderização de Particles2D é muito mais lenta do que a de "
+"CPUParticles2D devido a transformações serem implementadas no CPU e não no "
+"GPU.\n"
+"Considere usar CPUParticles2D quando desenvolver para macOS.\n"
+"Pode usar a opção \"Converter em CPUParticles2D\" da barra de ferramentas "
+"para este propósito."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14686,7 +14934,7 @@ msgstr "Uma SpotLight com ângulo superior a 90 graus não cria sombras."
#: scene/3d/navigation_agent.cpp
msgid "The NavigationAgent can be used only under a spatial node."
-msgstr ""
+msgstr "O NavigationAgent pode ser apenas usado dentro de um nó espacial."
#: scene/3d/navigation_mesh_instance.cpp
msgid ""
@@ -14701,6 +14949,8 @@ msgid ""
"The NavigationObstacle only serves to provide collision avoidance to a "
"spatial object."
msgstr ""
+"NavigationObstacle serve apenas para fornecer prevenção de colisão a um "
+"objeto espacial."
#: scene/3d/occluder.cpp
msgid "No shape is set."
@@ -14711,11 +14961,10 @@ msgid "Only uniform scales are supported."
msgstr "Apenas são suportadas escalas uniformes."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Partículas baseadas em GPU não são suportadas pelo driver de vídeo GLES2.\n"
"Use o nó CPUParticles. Pode usar a opção \"Converter em CPUParticles\" para "
@@ -14728,6 +14977,12 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"No macOS a renderização de Particles é muito mais lenta do que a de "
+"CPUParticles devido a transformações serem implementadas no CPU e não no "
+"GPU.\n"
+"Considere usar CPUParticles quando desenvolver para macOS.\n"
+"Pode usar a opção \"Converter em CPUParticles\" da barra de ferramentas para "
+"este propósito."
#: scene/3d/particles.cpp
msgid ""
@@ -14916,8 +15171,8 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Um recurso SpriteFrames tem de ser criado ou definido na Propriedade \"Frames"
-"\" de forma a que AnimatedSprite3D mostre frames."
+"Um recurso SpriteFrames tem de ser criado ou definido na Propriedade "
+"\"Frames\" de forma a que AnimatedSprite3D mostre frames."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -14997,9 +15252,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Este nó foi descontinuado. Use antes AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Cor: #%s\n"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index b60b09c80e..5d3f9ee158 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -117,7 +117,7 @@
# Arthur Phillip D. Silva <artphil.dev@gmail.com>, 2021.
# Gustavo HM 102 <gustavohm102@gmail.com>, 2021.
# Douglas Leão <djlsplays@gmail.com>, 2021.
-# PauloFRs <paulofr1@hotmail.com>, 2021.
+# PauloFRs <paulofr1@hotmail.com>, 2021, 2022.
# Diego Bloise <diego-dev@outlook.com>, 2021.
# Alkoarism <Alkoarism@gmail.com>, 2021.
# リーLee <kaualee304@gmail.com>, 2021.
@@ -133,13 +133,14 @@
# Orangotango De tanga <luizinho0045@gmail.com>, 2021.
# Felipe SiFa <felipe@logus.digital>, 2022.
# Gabriel Gian <gabrielgian@live.com>, 2022.
+# waleson azevedo pessoa de melo <walesonmelo23@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2022-01-07 11:42+0000\n"
-"Last-Translator: Felipe SiFa <felipe@logus.digital>\n"
+"PO-Revision-Date: 2022-02-14 22:08+0000\n"
+"Last-Translator: PauloFRs <paulofr1@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -147,7 +148,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -449,9 +450,8 @@ msgid "Duplicate Key(s)"
msgstr "Duplicar Chave(s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "Adicionar %d Frame(s)"
+msgstr "Adicionar valor(es) de RESET"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -627,7 +627,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Alterar Escala das Chaves na Anim"
+msgstr "Anim Adicionar teclas de RESET"
#: editor/animation_track_editor.cpp
msgid ""
@@ -636,8 +636,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1501,7 +1501,7 @@ msgid "Bus Options"
msgstr "Opções do canal"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -1613,7 +1613,7 @@ msgstr "Nome Inválido."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Não pode começar com um dígito."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2241,9 +2241,8 @@ msgid "Properties"
msgstr "Propriedades"
#: editor/editor_help.cpp
-#, fuzzy
msgid "overrides %s:"
-msgstr "sobrescrever:"
+msgstr "substitui %s:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2303,11 +2302,11 @@ msgstr "Descrições do Método"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Atualmente não existe descrição para este método. Por favor nos ajude [color="
-"$color][url=$url]contribuindo uma[/url][/color]!"
+"Atualmente não existe descrição para este método. Por favor nos ajude "
+"[color=$color][url=$url]contribuindo uma[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2385,16 +2384,17 @@ msgstr "Propriedade:"
#: editor/editor_inspector.cpp
#, fuzzy
msgid "Pin value"
-msgstr "(valor)"
+msgstr "Valor do pino"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
-msgstr ""
+msgstr "Fixar um valor força-o a ser salvo mesmo que seja igual ao padrão."
#: editor/editor_inspector.cpp
+#, fuzzy
msgid "Pin value [Disabled because '%s' is editor-only]"
-msgstr ""
+msgstr "Valor do pino [Desativado porque '%s' é somente editor]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2409,26 +2409,23 @@ msgstr "Definir Múltiplos:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "%s fixado"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "%s não fixado"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
msgstr "Copiar Propriedades"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
msgstr "Colar Propriedades"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Copiar Caminho do Script"
+msgstr "Copiar Caminho da Propriedade"
#: editor/editor_log.cpp
msgid "Output:"
@@ -3161,9 +3158,8 @@ msgid "Install Android Build Template..."
msgstr "Instalar Modelo de Compilação Android..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Abrir a Pasta de dados do Editor"
+msgstr "Abrir Pasta de Dados do Usuário"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3252,7 +3248,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr ""
+msgstr "Forçar Fallbacks do Shader"
#: editor/editor_node.cpp
msgid ""
@@ -3263,6 +3259,13 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Quando esta opção estiver habilitada, os shaders serão usados em seu "
+"formulário de fallback (visível por meio de um ubershader ou oculto) durante "
+"todo o tempo de execução.\n"
+"Isso é útil para verificar a aparência e o desempenho de fallbacks, que "
+"normalmente são exibidos brevemente.\n"
+"A compilação de sombreador assíncrono deve ser habilitada nas configurações "
+"do projeto para que esta opção faça a diferença."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3426,10 +3429,16 @@ msgid "Update Continuously"
msgstr "Atualizar Continuamente"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Atualizar quando Alterado"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Alterações de Material:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ocultar Spinner de Atualização"
@@ -3875,9 +3884,8 @@ msgstr "Importar a Partir do Nó:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Erro"
+msgstr "Erro %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4209,6 +4217,14 @@ msgstr "Nome contém caracteres inválidos."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4327,7 +4343,7 @@ msgstr "Ordenar por Último Modificado"
msgid "Sort by First Modified"
msgstr "Ordenar por Primeiro Modificado"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicar..."
@@ -4428,9 +4444,8 @@ msgid "Replace..."
msgstr "Substituir..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "Substituir Tudo"
+msgstr "Substituir em Arquivos"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4441,9 +4456,8 @@ msgid "Replace: "
msgstr "Substituir: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "Substituir Tudo"
+msgstr "Substituir tudo (SEM DESFAZER)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4669,6 +4683,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"Selecione um arquivo de recurso no sistema de arquivos ou no inspetor para "
+"ajustar as configurações de importação."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5141,6 +5157,10 @@ msgid "Rename Animation"
msgstr "Renomear Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicar Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Misturar com o Próximo Alterado"
@@ -5153,10 +5173,6 @@ msgid "Load Animation"
msgstr "Carregar Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicar Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Nenhuma animação para copiar!"
@@ -5727,7 +5743,7 @@ msgstr "Todos"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search templates, projects, and demos"
-msgstr "Pesquisar modelos, projetos e demonstrações"
+msgstr "Pesquisar modelos, projetos, e demonstrações"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
@@ -6139,9 +6155,8 @@ msgid "Alt+Drag: Move selected node."
msgstr "Alt+Arrastar: Mover nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+Arrastar: Mover nó selecionado."
+msgstr "Alt+Arrastar: Dimensionar o nó selecionado."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
@@ -6175,7 +6190,7 @@ msgstr "Modo de Escalonamento"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Shift: Scale proportionally."
-msgstr ""
+msgstr "Shift: Dimensiona proporcionalmente."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6274,9 +6289,8 @@ msgstr "Travar o objeto selecionado no local (não pode ser movido)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Fixar Seleção"
+msgstr "Bloquear nós selecionados"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6285,9 +6299,8 @@ msgstr "Destravar o objeto selecionado (pode ser movido)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Destravar Selecionado"
+msgstr "Desbloqueie os nós selecionados"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6296,9 +6309,8 @@ msgstr "Garante que os filhos do objeto não sejam selecionáveis."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Agrupar Selecionados"
+msgstr "Agrupar nós selecionados"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6307,9 +6319,8 @@ msgstr "Restaura a habilidade dos filhos do objeto de serem selecionados."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Desagrupar Selecionados"
+msgstr "Desagrupar nós selecionados"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -7954,9 +7965,8 @@ msgid "Find in Files..."
msgstr "Procurar nos Arquivos..."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "Substituir..."
+msgstr "Substituir em Arquivos..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -8484,16 +8494,15 @@ msgstr "Alternar Visão Livre"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "Diminuir o Campo de Visão"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Aumentar o Campo de Visão"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "Redefinir padrões"
+msgstr "Redefinir o Campo de Visão para o Padrão"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -9223,22 +9232,19 @@ msgstr "Adicionar Modelo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "Filtre a lista de tipos ou crie um novo tipo personalizado:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "Perfis Disponíveis:"
+msgstr "Tipos baseados em nós disponíveis:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "O nome do arquivo está vazio."
+msgstr "O nome do tipo está vazio!"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Are you sure you want to create an empty type?"
-msgstr "Tem certeza de que quer abrir mais de um projeto?"
+msgstr "Tem certeza de que deseja criar um tipo vazio?"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Confirm Item Rename"
@@ -9857,9 +9863,8 @@ msgid "TileSet"
msgstr "Conjunto de Telha"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Nenhum complemento VCS está disponível."
+msgstr "Nenhum plug-in VCS está disponível."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9869,53 +9874,48 @@ msgstr "Erro"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"As configurações remotas estão vazias. Os recursos VCS que usam a rede podem "
+"não funcionar."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Nenhum nome fornecido."
+msgstr "Nenhuma mensagem de commit foi fornecida."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Confirmação"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Alterações de Shader:"
+msgstr "Mudanças em fases"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Alterações de Shader:"
+msgstr "Mudanças Não Fásicas"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Confirmação"
+msgstr "Commit:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Encontro:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Subárvore"
+msgstr "Subtítulo:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Deseja remover a ramificação %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Tem certeza de que quer abrir mais de um projeto?"
+msgstr "Deseja remover o controle remoto %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Redefinir"
+msgstr "Aplicar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9926,106 +9926,96 @@ msgid "Initialize"
msgstr "Inicializar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Remover Ponto"
+msgstr "Login remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Renomear"
+msgstr "Nome do usuário"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Senha"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Caminho da chave pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Selecione o caminho da chave pública SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Caminho da chave privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Selecione o caminho da chave privada SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH Passphrase"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Detectar novas mudanças"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Fechar e salvar alterações?"
+msgstr "Descartar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Armazenando alterações locais..."
+msgstr "Preparar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Alterações de Material:"
+msgstr "Desfaça todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Confirmar Mudanças"
+msgstr "Mensagem de Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Confirmar Mudanças"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Confirmação"
+msgstr "Lista de compromissos"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Confirmar tamanho da lista"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Correspondências:"
+msgstr "Ramos"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Criar Novo Projeto"
+msgstr "Criar Novo Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Remover Trilha da Anim"
+msgstr "Remover Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Nome do Ramo"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -10033,41 +10023,36 @@ msgid "Remotes"
msgstr "Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Criar Novo Projeto"
+msgstr "Criar Novo Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Remover Item"
+msgstr "Remover remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Remoto "
+msgstr "Nome Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Remoto "
+msgstr "URL do Remoto"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Buscar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Puxar"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Empurre"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Malha de Origem:"
+msgstr "Forçar Push"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10087,22 +10072,19 @@ msgstr "Alteração de tipo"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Não mesclado"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Visualizar"
+msgstr "Visualizar:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Dividir Caminho"
+msgstr "Dividir"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Modificado"
+msgstr "Unificado"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -10126,7 +10108,7 @@ msgstr "Booleano"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sampler"
-msgstr "Sampler"
+msgstr "Amostrador"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
@@ -10138,7 +10120,7 @@ msgstr "Adicionar porta de saída"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port type"
-msgstr "Alterar tipo da porta de entrada"
+msgstr "Alterar o tipo de porta de entrada"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port type"
@@ -10182,7 +10164,7 @@ msgstr "Adicionar Nó ao Visual Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Node(s) Moved"
-msgstr "Node(s) Movidos"
+msgstr "Nó(s) Movidos"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -10191,7 +10173,7 @@ msgstr "Duplicar Nó(s)"
#: editor/plugins/visual_shader_editor_plugin.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Paste Nodes"
-msgstr "Colar Nodes"
+msgstr "Colar Nós"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Delete Nodes"
@@ -10291,7 +10273,7 @@ msgstr "Cor constante."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color uniform."
-msgstr "Uniformidade de cor."
+msgstr "Cor uniforme."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the boolean result of the %s comparison between two parameters."
@@ -10694,8 +10676,8 @@ msgstr ""
"OuterProduct trata o primeiro parâmetro \"c\" como um vetor coluna (matriz "
"com uma coluna) e o segundo parâmetro \"r\" como um vetor linha (matriz com "
"uma linha) e faz uma matriz algébrica linear multiplicar \"c * r\", "
-"produzindo uma matriz cujo número de linhas é o número de componentes em \"c"
-"\" e cujo número de colunas é o número de componentes em \"r\"."
+"produzindo uma matriz cujo número de linhas é o número de componentes em "
+"\"c\" e cujo número de colunas é o número de componentes em \"r\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes transform from four vectors."
@@ -12250,6 +12232,10 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Não é possível salvar um branch que é filho de uma cena já instanciada.\n"
+"Para salvar esta ramificação em sua própria cena, abra a cena original, "
+"clique com o botão direito nesta ramificação e selecione \"Salvar "
+"ramificação como cena\"."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12257,6 +12243,10 @@ msgid ""
"To save this branch into its own scene, open the original scene, right click "
"on this branch, and select \"Save Branch as Scene\"."
msgstr ""
+"Não é possível salvar uma ramificação que faz parte de uma cena herdada.\n"
+"Para salvar esta ramificação em sua própria cena, abra a cena original, "
+"clique com o botão direito nesta ramificação e selecione \"Salvar "
+"ramificação como cena\"."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12931,6 +12921,16 @@ msgstr "Definir Raio Da Esfera Do Oclusor"
msgid "Set Occluder Sphere Position"
msgstr "Definir Posição Da Esfera Do Oclusor"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Definir Posição Do Ponto Do Portal"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Definir Posição do Ponto da Curva"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Alterar Raio do Cilindro"
@@ -13183,7 +13183,7 @@ msgstr "Atribua um recurso MeshLibrary a este GridMap para usar seus meshes."
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Begin Bake"
-msgstr "Iniciar pré-cálculo"
+msgstr "Iniciar bake"
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Preparing data structures"
@@ -13643,34 +13643,32 @@ msgid "Edit Member"
msgstr "Editar Membro"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Definir expressão"
+msgstr "Expressão"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Retornar"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animação"
+msgstr "Condição"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "if (cond) is:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Enquanto"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "while(cond):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Iterador"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
@@ -13690,7 +13688,7 @@ msgstr "Iterador tornou-se inválido: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Seqüência"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
@@ -13698,18 +13696,16 @@ msgid "in order:"
msgstr "Renomear pasta:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Tom:"
+msgstr "Switch"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Modelos:"
+msgstr "Tipo de Projeção"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
@@ -13934,7 +13930,7 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Esperar"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14089,7 +14085,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Missing 'build-tools' directory!"
-msgstr "Diretório 'ferramentas-da-plataforma' está faltando!"
+msgstr "Diretório 'build-tools' está faltando!"
#: platform/android/export/export_plugin.cpp
msgid "Unable to find Android SDK build-tools' apksigner command."
@@ -14155,8 +14151,8 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
-"Versão do \"Target Sdk\" precisa ser igual ou maior que a versão do \"Min Sdk"
-"\"."
+"Versão do \"Target Sdk\" precisa ser igual ou maior que a versão do \"Min "
+"Sdk\"."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -14337,10 +14333,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "O nome não é um identificador válido:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Ãcone necessário não especificado na predefinição."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Parar Servidor HTTP"
@@ -14381,16 +14373,202 @@ msgstr "Não foi possível criar o diretório do servidor HTTP:"
msgid "Error starting HTTP server:"
msgstr "Erro ao iniciar servidor HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nome de projeto inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geometria inválida, não é possível criar o polígono."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Não foi possível criar a pasta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Caminho base inválido."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Falha ao carregar recurso."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Falha ao carregar recurso."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Extensão inválida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Extensão inválida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ãcones não encontrados."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Criando Miniatura"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Não foi possível encontrar o modelo de APK para exportar:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de pacote inválido:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Notarização: assinatura de código necessária."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Notarização: requer tempo de execução reforçado."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Notarização: requer tempo de execução reforçado."
#: platform/osx/export/export.cpp
@@ -14401,6 +14579,69 @@ msgstr "Notarização: Nome do Apple ID não especificado."
msgid "Notarization: Apple ID password not specified."
msgstr "Notarização: Senha do Apple ID não especificada."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Nome de pacote inválido."
@@ -14453,6 +14694,27 @@ msgstr "Dimensões inválidas de logo retangular de 310x150 (deve ser 310x150)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Dimensões inválidas da tela de abertura (deve ser 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Caminho inválido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Extensão inválida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID de produto inválido."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14888,8 +15150,8 @@ msgstr "Apenas escalas uniformes são suportadas."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Partículas baseadas em GPU não são suportadas pelo driver de vídeo GLES2.\n"
"Use o nó CPUParticles como substituto. Você pode usar a opção \"Converter "
@@ -15091,8 +15353,8 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Um recurso SpriteFrames deve ser criado ou definido na propriedade \"Frames"
-"\" para que o nó AnimatedSprite3D mostre quadros."
+"Um recurso SpriteFrames deve ser criado ou definido na propriedade "
+"\"Frames\" para que o nó AnimatedSprite3D mostre quadros."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -15173,9 +15435,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Este nó foi descontinuado. Use AnimationTree em vez disso."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Cor: #%s\n"
@@ -15235,7 +15498,7 @@ msgstr "Deve usar uma extensão válida."
#: scene/gui/graph_edit.cpp
msgid "Enable grid minimap."
-msgstr "Ativar mini mapa em grade."
+msgstr "Ativar minimap em grade."
#: scene/gui/nine_patch_rect.cpp
msgid ""
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 216de7fab1..1c63a57d74 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -520,8 +520,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1389,7 +1389,7 @@ msgid "Bus Options"
msgstr "Opțiuni Pistă Audio"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicat"
@@ -2198,8 +2198,8 @@ msgstr "Descrierile Metodei"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Nu există în prezent nici o descriere pentru această metodă. Te rog ajută-ne "
"de prin a [color = $color] [url = $url] contribui cu una [/ URL] [/ color]!"
@@ -3319,10 +3319,16 @@ msgid "Update Continuously"
msgstr "Actualizare continuă"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Actualizează Doar La Modificare"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Modificări ale Actualizării"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Dezactivează Cercul de Actualizare"
@@ -4088,6 +4094,14 @@ msgstr "Numele furnizat conține caractere nevalide."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4201,7 +4215,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicați..."
@@ -5030,6 +5044,10 @@ msgid "Rename Animation"
msgstr "Redenumește Animația"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicare Animație"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Amestecă Următoarea Schimbare"
@@ -5042,10 +5060,6 @@ msgid "Load Animation"
msgstr "Încarcă Animație"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicare Animație"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "No animation to copy!"
msgstr "EROARE: Nicio copie a animației!"
@@ -12943,6 +12957,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Setare Curbă În Poziție"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Setare poziție punct de curbă"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Setare poziție punct de curbă"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -14316,10 +14340,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Identificator nevalid:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14364,17 +14384,196 @@ msgstr "Directorul nu a putut fi creat."
msgid "Error starting HTTP server:"
msgstr "Eroare la scrierea TextFile:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Nume de Proiect Nevalid."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Directorul nu a putut fi creat."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Cale nevalidă."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Încărcarea resursei a eșuat."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Încărcarea resursei a eșuat."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Trebuie să utilizaţi o extensie valida."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Trebuie să utilizaţi o extensie valida."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nu s-a găsit nici o sub-resursă."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Creând Thumbnail"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Identificator nevalid:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14385,6 +14584,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14443,6 +14705,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Cale nevalidă."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Trebuie să utilizaţi o extensie valida."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nume de Proiect Nevalid."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14795,8 +15078,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15039,7 +15322,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index d8ca320413..77e4143911 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -101,12 +101,13 @@
# mrvladus <mrvladus@yandex.ru>, 2021.
# DΞLTΛ <craftercrafter43@gmail.com>, 2021.
# AngryPhilomel <an.aries@icloud.com>, 2021.
+# Russkikh Michail <summersay415@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-02-10 07:50+0000\n"
"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
@@ -114,9 +115,9 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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.10.1\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.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -605,8 +606,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -848,7 +849,7 @@ msgstr "Заменить вÑÑ‘"
#: editor/code_editor.cpp
msgid "Selection Only"
-msgstr "Только выделÑть"
+msgstr "Только выделенное"
#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp
#: editor/plugins/text_editor.cpp
@@ -1468,7 +1469,7 @@ msgid "Bus Options"
msgstr "Параметры шины"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дублировать"
@@ -2262,8 +2263,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвует опиÑание Ñтого ÑвойÑтва. ПожалуйÑта [color="
-"$color][url=$url]помогите нам[/url][/color]!"
+"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвует опиÑание Ñтого ÑвойÑтва. ПожалуйÑта "
+"[color=$color][url=$url]помогите нам[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2271,11 +2272,11 @@ msgstr "ОпиÑÐ°Ð½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð¾Ð²"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвует опиÑание Ñтого метода. ПожалуйÑта [color="
-"$color][url=$url]помогите нам[/url][/color]!"
+"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвует опиÑание Ñтого метода. ПожалуйÑта "
+"[color=$color][url=$url]помогите нам[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3124,9 +3125,8 @@ msgid "Install Android Build Template..."
msgstr "УÑтановить шаблон Ñборки Android..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Открыть папку данных редактора"
+msgstr "Открыть папку данных пользователÑ"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3395,10 +3395,16 @@ msgid "Update Continuously"
msgstr "Ðепрерывное обновление"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "ОбновлÑть при изменениÑÑ…"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Материалов изменено:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Скрыть индикатор обновлений"
@@ -3843,9 +3849,8 @@ msgstr "Импортировать из узла:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Ошибка"
+msgstr "Ошибка %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4169,6 +4174,14 @@ msgstr "Ð˜Ð¼Ñ Ñодержит недопуÑтимые Ñимволы."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4287,7 +4300,7 @@ msgstr "Сортировать по поÑледнему изменению"
msgid "Sort by First Modified"
msgstr "Сортировать по первому изменению"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Дублировать..."
@@ -5096,6 +5109,10 @@ msgid "Rename Animation"
msgstr "Переименовать анимацию"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дублировать анимацию"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Изменена поÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ"
@@ -5108,10 +5125,6 @@ msgid "Load Animation"
msgstr "Загрузить анимацию"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Дублировать анимацию"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ðет анимации Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ!"
@@ -7977,7 +7990,7 @@ msgstr "2D Ñкелет"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Reset to Rest Pose"
-msgstr "Создать позу покоÑ"
+msgstr "Задать позу покоÑ"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Overwrite Rest Pose"
@@ -9803,9 +9816,8 @@ msgid "TileSet"
msgstr "Ðабор тайлов"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Ðет доÑтупных VCS плагинов."
+msgstr "Ðет доÑтупных плагинов VCS."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9815,53 +9827,47 @@ msgstr "Ошибка"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Удалённые наÑтройки пуÑты. Функции VCS, иÑпользующие Ñеть, могут не работать."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Ðе предоÑтавлено имÑ."
+msgstr "Ðе указано Ñообщение коммита."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "Коммит"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Шейдеров изменено:"
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² индекÑе"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Шейдеров изменено:"
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ в индекÑе"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "Коммит"
+msgstr "Коммит:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Дата:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Поддерево"
+msgstr "Подзаголовок:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Вы хотите удалить ветку %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Ð’Ñ‹ уверены, что хотите Ñоздать пуÑтой тип?"
+msgstr "Ð’Ñ‹ хотите удалить отÑлеживаемую ветку %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Применить ÑброÑ"
+msgstr "Применить"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9872,148 +9878,132 @@ msgid "Initialize"
msgstr "Инициализировать"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Удалить точку"
+msgstr "Удалённый вход"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Переименовать"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Пароль"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "Путь к открытому ключу SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Выберите путь к открытому ключу SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "Путь к закрытому ключу SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Выберите путь к закрытому ключу SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "ÐŸÐ°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Проверить изменениÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Закрыть и Ñохранить изменениÑ?"
+msgstr "Отменить вÑе изменениÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Сохранение локальных изменений..."
+msgstr "ИндекÑировать вÑе изменениÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Материалов изменено:"
+msgstr "Убрать из индекÑа вÑе изменениÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Закоммитить изменениÑ"
+msgstr "Сообщение коммита"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Закоммитить изменениÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "Коммит"
+msgstr "СпиÑок коммитов"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Размер ÑпиÑка коммитов"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "СовпадениÑ:"
+msgstr "Ветки"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Создать новый проект"
+msgstr "Создать новую ветку"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Удалить дорожку"
+msgstr "Удалить ветку"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Ð˜Ð¼Ñ Ð²ÐµÑ‚ÐºÐ¸"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Удаленный"
+msgstr "Внешние репозитории"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Создать новый проект"
+msgstr "Добавить внешний репозиторий"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Удалить Ñлемент"
+msgstr "Удалить внешний репозиторий"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Удаленный "
+msgstr "Ðазвание внешнего репозиториÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Удаленный "
+msgstr "URL внешнего репозиториÑ"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Извлечь"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Получить"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Отправить"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñетка:"
+msgstr "Принудительно отправить"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -10033,22 +10023,19 @@ msgstr "Изменить тип"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Ðеобъединён"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Вид"
+msgstr "Вид:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Разделить путь"
+msgstr "Раздельный"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Изменён"
+msgstr "Единый"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12890,6 +12877,16 @@ msgstr "Задать Ñ€Ð°Ð´Ð¸ÑƒÑ Ñферы окклюдера"
msgid "Set Occluder Sphere Position"
msgstr "Задать положение Ñферы окклюдера"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Задать положение точки портала"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "УÑтановить положение точки кривой"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Изменить Ñ€Ð°Ð´Ð¸ÑƒÑ Ñ†Ð¸Ð»Ð¸Ð½Ð´Ñ€Ð°"
@@ -13601,38 +13598,36 @@ msgid "Edit Member"
msgstr "Редактировать Ñлемент"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Задать выражение"
+msgstr "Выражение"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Возврат"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "анимациÑ"
+msgstr "УÑловие"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "ЕÑли (уÑловие):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Пока"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "пока (уÑловие):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "Итератор"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "Ð´Ð»Ñ (Ñлемент) в (вход):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13648,79 +13643,71 @@ msgstr "Итератор Ñтал недейÑтвительным: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "ПоÑледовательноÑть"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "Переименование папки:"
+msgstr "в порÑдке:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Ð’Ñ‹Ñота:"
+msgstr "МножеÑтвенный выбор"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "«вход» равен:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Типы:"
+msgstr "Приведение типа"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "%s иÑтинно?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "Ðа %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Субъект"
+msgstr "Ðа ÑебÑ"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "Ðа Ñимволе %s"
+msgstr "ВычеÑть %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Умножить %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Разделить %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Добавить %s"
+msgstr "ОÑтаток от Ð´ÐµÐ»ÐµÐ½Ð¸Ñ %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Задать %s"
+msgstr "Сдвиг влево %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "Сдвиг вправо %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Закреплено %s"
+msgstr "Побитовое И %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Побитовое ИЛИ %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Побитовое ИÑключающее ИЛИ %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13745,19 +13732,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ ÑвойÑтва-индекÑа «%s» в узле %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Задать %s"
+msgstr "Излучить %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Функции"
+msgstr "ФункциÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Изменить размер маÑÑива"
+msgstr "Создать маÑÑив"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13769,7 +13753,7 @@ msgstr ": ÐедопуÑтимые аргументы: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a еÑли уÑловие, иначе b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13780,64 +13764,52 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet не найден в Ñкрипте: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Перезагрузить"
+msgstr "Предзагрузить"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z-индекÑ"
+msgstr "Получить индекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z-индекÑ"
+msgstr "Задать индекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "КонÑтанта"
+msgstr "Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñтанта"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "КонÑтанта"
+msgstr "КонÑтанта клаÑÑа"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "КонÑтанта"
+msgstr "Ð‘Ð°Ð·Ð¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "КонÑтанта"
+msgstr "МатематичеÑÐºÐ°Ñ ÐºÐ¾Ð½Ñтанта"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "Включён GDNative Ñинглтон"
+msgstr "Получить Ñинглтон движка"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "TimeSeek узел"
+msgstr "Получить узел Ñцены"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Редактирование дерева Ñцены"
+msgstr "Получить дерево Ñцены"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Субъект"
+msgstr "Получить ÑебÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Вырезать узлы"
+msgstr "ПользовательÑкий узел"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13853,33 +13825,28 @@ msgstr ""
"out) или Ñтрока (error)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Вызовы"
+msgstr "Подвызов"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "КонÑтанты"
+msgstr "СоÑтавить %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "ИÑпользовать локальное проÑтранÑтво"
+msgstr "Получить локальную переменную"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "ИÑпользовать локальное проÑтранÑтво"
+msgstr "Задать локальную переменную"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "ДейÑтвие"
+msgstr "ДейÑтвие %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "Разобрать %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13887,40 +13854,35 @@ msgstr "ИÑкать VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "ПриоÑтановить"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Ждать"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "ПеремеÑтить кадр"
+msgstr "Следующий кадр"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Кадр физики %"
+msgstr "Следующий физичеÑкий кадр"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s Ñек"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Сигнал"
+msgstr "Ждать Ñигнал"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Сигнал"
+msgstr "Ждать Ñигнал узла"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Добавить ÑкземплÑÑ€"
+msgstr "Ждать Ñигнал объекта"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14278,10 +14240,6 @@ msgstr "App Store Team ID не указан - невозможно наÑтроÐ
msgid "Invalid Identifier:"
msgstr "Ðеверный идентификатор:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Требуемый значок не указан в предуÑтановке."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "ОÑтановить HTTP-Ñервер"
@@ -14322,16 +14280,202 @@ msgstr "Ðе удалоÑÑŒ Ñоздать каталог HTTP-Ñервера:"
msgid "Error starting HTTP server:"
msgstr "Ошибка запуÑка HTTP-Ñервера:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, Ð½ÐµÐ»ÑŒÐ·Ñ Ñоздать полигональную Ñетку."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Ðевозможно Ñоздать папку."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "ÐедопуÑтимый базовый путь."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Ðе удалоÑÑŒ загрузить реÑурÑ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Ðе удалоÑÑŒ загрузить реÑурÑ."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "ÐедопуÑтимое раÑширение."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "ÐедопуÑтимое раÑширение."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Иконки не найдены."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Создание ÑÑкизов"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Ðе удалоÑÑŒ найти шаблон APK Ð´Ð»Ñ ÑкÑпорта:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðеверный идентификатор пакета:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Предупреждение: требуетÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñание кода."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Предупреждение: требуетÑÑ ÑƒÑиленный рантайм."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Предупреждение: требуетÑÑ ÑƒÑиленный рантайм."
#: platform/osx/export/export.cpp
@@ -14342,6 +14486,69 @@ msgstr "Предупреждение: Ð¸Ð¼Ñ Apple ID не указано."
msgid "Notarization: Apple ID password not specified."
msgstr "Предупреждение: пароль Apple ID не указан."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "ÐедопуÑтимое короткое Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°."
@@ -14394,6 +14601,27 @@ msgstr "Ðеверные размеры широкого логотипа 310x15
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ðеверные размеры заÑтавки (должны быть 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "ÐедопуÑтимый путь."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "ÐедопуÑтимое раÑширение."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ðеверный GUID продукта."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14559,15 +14787,14 @@ msgstr ""
"узла ParallaxBackground."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
"GPU-чаÑтицы не поддерживаютÑÑ Ð²Ð¸Ð´ÐµÐ¾Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð¾Ð¼ GLES2.\n"
-"ВмеÑто Ñтого иÑпользуйте узел CPUParticles2D. Ð”Ð»Ñ Ñтого можно "
-"воÑпользоватьÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ «Преобразовать в CPUParticles»."
+"ВмеÑто Ñтого иÑпользуйте узел CPUParticles2D. Ð”Ð»Ñ Ñтой цели вы можете "
+"иÑпользовать опцию «Преобразовать в CPUParticles2D» панели инÑтрументов."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14577,6 +14804,13 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"Ð’ macOS отриÑовка Particles2D выполнÑетÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ медленнее, чем "
+"CPUParticles2D, из-за того что Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑвÑзь Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·ÑƒÐµÑ‚ÑÑ Ð½Ð° "
+"CPU, а не на GPU.\n"
+"РаÑÑмотрите возможноÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ CPUParticles2D вмеÑто Particles2D при "
+"работе Ñ macOS.\n"
+"Ð”Ð»Ñ Ñтой цели вы можете воÑпользоватьÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ «Преобразовать в "
+"CPUParticles2D» панели инÑтрументов."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14833,15 +15067,14 @@ msgid "Only uniform scales are supported."
msgstr "ПоддерживаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ маÑштабирование uniform."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPU-чаÑтицы не поддерживаютÑÑ Ð²Ð¸Ð´ÐµÐ¾Ð´Ñ€Ð°Ð¹Ð²ÐµÑ€Ð¾Ð¼ GLES2.\n"
-"ВмеÑто Ñтого иÑпользуйте узел CPUParticles. Ð”Ð»Ñ Ñтого можно воÑпользоватьÑÑ "
-"опцией «Преобразовать в CPUParticles»."
+"ВмеÑто Ñтого иÑпользуйте узел CPUParticles. Ð”Ð»Ñ Ñтой цели вы можете "
+"воÑпользоватьÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ «Преобразовать в CPUParticles» панели инÑтрументов."
#: scene/3d/particles.cpp
msgid ""
@@ -14850,6 +15083,13 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"Ð’ macOS отриÑовка Particles выполнÑетÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ медленнее, чем CPUParticles, "
+"из-за того что Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑвÑзь Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·ÑƒÐµÑ‚ÑÑ Ð½Ð° CPU, а не на "
+"GPU.\n"
+"РаÑÑмотрите возможноÑть иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ CPUParticles вмеÑто Particles при "
+"работе Ñ macOS.\n"
+"Ð”Ð»Ñ Ñтой цели вы можете воÑпользоватьÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ «Преобразовать в "
+"CPUParticles» панели инÑтрументов."
#: scene/3d/particles.cpp
msgid ""
@@ -15120,9 +15360,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Этот узел был удален. ВмеÑто Ñтого иÑпользуйте AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Цвет: #%s\n"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index f3802b7346..178bcfdfad 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -518,8 +518,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1357,7 +1357,7 @@ msgid "Bus Options"
msgstr "à·à·Šâ€à¶»à·’à¶­:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2132,8 +2132,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3164,7 +3164,11 @@ msgid "Update Continuously"
msgstr "අඛණ්ඩව"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3891,6 +3895,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4003,7 +4015,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4801,19 +4813,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12314,6 +12326,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13626,10 +13646,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13670,16 +13686,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13690,6 +13876,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13742,6 +13991,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14092,8 +14359,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14333,7 +14600,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index f7acfad23a..d502613ca1 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -512,8 +512,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1382,7 +1382,7 @@ msgid "Bus Options"
msgstr "Možnosti pre Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikovať"
@@ -2191,8 +2191,8 @@ msgstr "Popisky Metód"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Zatiaľ tu není žiadny popisok pre túto metódu. Prosím pomôžte nám pomocou "
"[color=$color][url=$url]prispetím jedného[/url][/color]!"
@@ -3303,10 +3303,16 @@ msgid "Update Continuously"
msgstr "Aktualizovať priebežne"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Aktualizovať po Zmene"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Parameter sa Zmenil"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Skryť aktualizáciu Spinner"
@@ -4092,6 +4098,14 @@ msgstr "Meno obsahuje neplatné písmená."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4211,7 +4225,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplikovať..."
@@ -5026,6 +5040,10 @@ msgid "Rename Animation"
msgstr "Premenovať Animáciu"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplikovať Animáciu"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Blend sa ÄŽalej Zmenil"
@@ -5038,10 +5056,6 @@ msgid "Load Animation"
msgstr "NaÄítaÅ¥ Animáciu"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplikovať Animáciu"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Žiadne animácie na skopírovanie!"
@@ -12842,6 +12856,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Všetky vybrané"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Všetky vybrané"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Všetky vybrané"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14217,10 +14241,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Nesprávna veľkosť písma."
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14266,17 +14286,196 @@ msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
msgid "Error starting HTTP server:"
msgstr "Error pri ukladaní TileSet-u!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Neplatné meno skupiny."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Neplatný Názov."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Nepodarilo sa naÄítaÅ¥ prostriedok."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Nepodarilo sa naÄítaÅ¥ prostriedok."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Nesprávna veľkosť písma."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Nesprávna veľkosť písma."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Nenašli sa žiadne \"sub-resources\"."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Vytváranie Náhľadu"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Nesprávna veľkosť písma."
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14287,6 +14486,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14344,6 +14606,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Neplatná cesta."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Nesprávna veľkosť písma."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Nesprávna veľkosť písma."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14710,8 +14993,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14952,7 +15235,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 3c6fc8e571..551b2a5c91 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -26,8 +26,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
-"%100==4 ? 2 : 3;\n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 4.5-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
@@ -544,8 +544,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1441,7 +1441,7 @@ msgid "Bus Options"
msgstr "Možnosti Vodila"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Podvoji"
@@ -2265,8 +2265,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Trenutno ni opisa za to lastnost. Pomagajte nam s [color=$color][url="
-"$url]prispevkom[/url][/color]!"
+"Trenutno ni opisa za to lastnost. Pomagajte nam s [color=$color]"
+"[url=$url]prispevkom[/url][/color]!"
#: editor/editor_help.cpp
#, fuzzy
@@ -2275,11 +2275,11 @@ msgstr "Opis Metode:"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Trenutno ni opisa za to metodo. Pomagajte nam s [color=$color][url="
-"$url]prispevkom[/url][/color]!"
+"Trenutno ni opisa za to metodo. Pomagajte nam s [color=$color]"
+"[url=$url]prispevkom[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3423,11 +3423,16 @@ msgstr "Neprekinjeno"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Posodobi Spremembe"
#: editor/editor_node.cpp
#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Spremebe v Shader"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Hide Update Spinner"
msgstr "OnemogoÄi Posodobitve Kolesca"
@@ -4202,6 +4207,14 @@ msgstr "Ime vsebuje neveljavne znake."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4325,7 +4338,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Podvoji..."
@@ -5202,6 +5215,10 @@ msgid "Rename Animation"
msgstr "Preimenuj Animacijo"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Podvoji Animacijo"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Naslednjo Mešanje se je Spremenilo"
@@ -5214,10 +5231,6 @@ msgid "Load Animation"
msgstr "Naloži Animacijo"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Podvoji Animacijo"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "No animation to copy!"
msgstr "NAPAKA: Ni animacije za kopiranje!"
@@ -13183,6 +13196,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "Nastavi Krivuljo na Položaj"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Nastavi Položaj Krivuljne ToÄke"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Nastavi Položaj Krivuljne ToÄke"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -14575,10 +14598,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ime ni pravilen identifikator:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14623,17 +14642,196 @@ msgstr "Mape ni mogoÄe ustvariti."
msgid "Error starting HTTP server:"
msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Neveljavno Ime Projekta."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Mape ni mogoÄe ustvariti."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Neveljavna Pot."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Napaka pri nalaganju vira."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Napaka pri nalaganju vira."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Uporabiti moraš valjavno razširitev."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Uporabiti moraš valjavno razširitev."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ni Zadetka!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Ustvarjanje SliÄic"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ime ni pravilen identifikator:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14644,6 +14842,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14702,6 +14963,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Neveljavna Pot."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Uporabiti moraš valjavno razširitev."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Neveljavno Ime Projekta."
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -15072,8 +15354,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15322,7 +15604,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index 6e4a0c84fe..b4115a9c60 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -503,8 +503,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1378,7 +1378,7 @@ msgid "Bus Options"
msgstr "Përshkrimi i Klasës"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dyfisho"
@@ -2208,8 +2208,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Nuk ka për momentin përshkrim për këtë veti. Të lutem na ndihmo duke [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"Nuk ka për momentin përshkrim për këtë veti. Të lutem na ndihmo duke "
+"[color=$color][url=$url]contributing one[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2217,8 +2217,8 @@ msgstr "Përshkrimi i Metodës"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Nuk ka për momentin një përshkrim për këtë metod. Të lutem na ndihmo duke "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -3359,7 +3359,12 @@ msgstr "I Vazhdueshëm"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr "Përditëso Ndryshimet"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "Përditëso Ndryshimet"
#: editor/editor_node.cpp
@@ -4141,6 +4146,14 @@ msgstr "Emri permban karaktere të pasakta."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4260,7 +4273,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Dyfisho..."
@@ -5086,19 +5099,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12780,6 +12793,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14135,10 +14156,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14183,16 +14200,195 @@ msgstr "Nuk mund të krijoj folderin."
msgid "Error starting HTTP server:"
msgstr "Gabim gjatë ruajtjes së TileSet-it!"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Emri i grupit i pasakt."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Nuk mund të krijoj folderin."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Rruga e pasaktë."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Dështoi të ngarkojë resursin."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Dështoi të ngarkojë resursin."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Duhet të perdorësh një shtesë të lejuar."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Duhet të perdorësh një shtesë të lejuar."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Konstantet"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Duke Krijuar Kornizat"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14203,6 +14399,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14257,6 +14516,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Rruga e pasaktë."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Duhet të perdorësh një shtesë të lejuar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Emri i grupit i pasakt."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14609,8 +14889,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14850,7 +15130,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 95723f17e4..fab8794167 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -18,8 +18,8 @@ msgstr ""
"Language: sr_Cyrl\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
@@ -566,8 +566,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1497,7 +1497,7 @@ msgid "Bus Options"
msgstr "ПоÑтавке баÑа"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дуплирај"
@@ -2363,8 +2363,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Тренутно нема опиÑа ове оÑобине. Молимо помозите нама тако што ћете [color="
-"$color][url=$url]напиÑати једну[/url][/color]!"
+"Тренутно нема опиÑа ове оÑобине. Молимо помозите нама тако што ћете "
+"[color=$color][url=$url]напиÑати једну[/url][/color]!"
#: editor/editor_help.cpp
#, fuzzy
@@ -2373,11 +2373,11 @@ msgstr "ОпиÑи Метода"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете [color="
-"$color][url=$url]напиÑати једну[/url][/color]!"
+"Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете "
+"[color=$color][url=$url]напиÑати једну[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3553,11 +3553,16 @@ msgstr "Трајан"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Ðжурирај промене"
#: editor/editor_node.cpp
#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Промене материјала"
+
+#: editor/editor_node.cpp
+#, fuzzy
msgid "Hide Update Spinner"
msgstr "ИÑкључи индикатор ажурирања"
@@ -4399,6 +4404,14 @@ msgstr "Дато име Ñадржи неважећа Ñлова."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4526,7 +4539,7 @@ msgstr "Задњи Измењен"
msgid "Sort by First Modified"
msgstr "Задњи Измењен"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "Дуплирај"
@@ -5445,6 +5458,10 @@ msgid "Rename Animation"
msgstr "Преименуј анимацију"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дуплирај анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Промена Ñледеће анимације"
@@ -5457,10 +5474,6 @@ msgid "Load Animation"
msgstr "Учитај анимацију"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Дуплирај анимацију"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "No animation to copy!"
msgstr "Грешка: нема анимације за копирање!"
@@ -14306,6 +14319,16 @@ msgstr "Промени ОпÑег Цилиндар Облика"
msgid "Set Occluder Sphere Position"
msgstr "ПоÑтави почетну позицију криве"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "ПоÑтави позицију тачке криве"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "ПоÑтави позицију тачке криве"
+
#: modules/csg/csg_gizmos.cpp
#, fuzzy
msgid "Change Cylinder Radius"
@@ -15825,11 +15848,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ðеважећи идентификатор:"
-#: platform/iphone/export/export.cpp
-#, fuzzy
-msgid "Required icon is not specified in the preset."
-msgstr "Ðеопходна иконица није наведена у подешавању."
-
#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Stop HTTP Server"
@@ -15880,17 +15898,198 @@ msgstr "ÐеуÑпех при прављењу директоријума."
msgid "Error starting HTTP server:"
msgstr "Грешка памћена Ñцена."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ðеважеће име."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Ðеважећа геометрија, неуÑпешно креирање многоугла."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "ÐеуÑпех при прављењу директоријума."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ðеважећа оÑновна путања."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Грешка при учитавању реÑурÑа."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Грешка при учитавању реÑурÑа."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Мора Ñе кориÑтити важећа екÑтензија."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Мора Ñе кориÑтити важећа екÑтензија."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Ðије пронађено!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Прављење приказа"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "ÐеуÑпешно отварање нацрта за извоз:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ðеважећи идентификатор:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -15901,6 +16100,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -15966,6 +16228,27 @@ msgstr "Ðеважеће димензије Ñлике за широки логÐ
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ðеважеће димензије Ñлике за уводни екран (треба да буде 620*300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ðеважећи пут."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Мора Ñе кориÑтити важећа екÑтензија."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ðеважећи GUID продукт."
+
#: scene/2d/animated_sprite.cpp
#, fuzzy
msgid ""
@@ -16435,8 +16718,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr "GPU-базиране чеÑтице ниÑу подржане од Ñтране GLES2 видео управљача."
#: scene/3d/particles.cpp
@@ -16718,7 +17001,7 @@ msgstr "Овај члан је заÑтарео. КориÑти AnimationTree к
#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Боја: #%s\n"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index a3db7ebbae..e4a6a62ec9 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -19,8 +19,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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"
+"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 3.8-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
@@ -521,8 +521,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1365,7 +1365,7 @@ msgid "Bus Options"
msgstr "Funkcije:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2144,8 +2144,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3180,8 +3180,14 @@ msgid "Update Continuously"
msgstr "Neprekidna"
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Napravi"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Napravi"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3910,6 +3916,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4022,7 +4036,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4823,19 +4837,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12431,6 +12445,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13755,10 +13777,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13799,16 +13817,187 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Kontanta"
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13819,6 +14008,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13871,6 +14123,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14221,8 +14491,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14462,7 +14732,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 87d39fb5ee..9645a3adff 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -526,8 +526,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1395,7 +1395,7 @@ msgid "Bus Options"
msgstr "Buss-alternativ"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicera"
@@ -2214,8 +2214,8 @@ msgstr "Metodbeskrivning"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Det finns för närvarande ingen beskrivning för denna metod. Snälla hjälp oss "
"genom att [color=$color][url=$url]bidra med en[/url][/color]!"
@@ -3345,10 +3345,15 @@ msgstr "Kontinuerlig"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
msgstr "Uppdatera Ändringar"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materialförändringar:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr ""
@@ -4113,6 +4118,14 @@ msgstr "Namnet innehåller ogiltiga tecken."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4237,7 +4250,7 @@ msgstr "Senast Ändrad"
msgid "Sort by First Modified"
msgstr "Senast Ändrad"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Duplicera..."
@@ -5091,6 +5104,10 @@ msgid "Rename Animation"
msgstr "Byt namn på Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Duplicera Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr ""
@@ -5103,10 +5120,6 @@ msgid "Load Animation"
msgstr "Ladda Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Duplicera Animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ingen animation finns att kopiera!"
@@ -12944,6 +12957,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14311,10 +14332,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ogiltig identifierare:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14357,17 +14374,197 @@ msgstr "Kunde inte skapa HTTP-serverkatalog:"
msgid "Error starting HTTP server:"
msgstr "Fel vid start av HTTP-server:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ogiltigt projektnamn."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Kunde inte skapa mapp."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ogiltig Sökväg."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Misslyckades att ladda resurs."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Misslyckades att ladda resurs."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Måste använda en giltigt filändelse."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Måste använda en giltigt filändelse."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Hittades inte!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Skapar Miniatyr"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Kunde inte öppna mall för export:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ogiltig identifierare:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14378,6 +14575,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14434,6 +14694,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ogiltig Sökväg."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Måste använda en giltigt filändelse."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ogiltig produkt GUID."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14808,8 +15089,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15055,7 +15336,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index 4de4a497eb..6a737cca56 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -519,8 +519,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1359,7 +1359,7 @@ msgid "Bus Options"
msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2135,8 +2135,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3166,7 +3166,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3894,6 +3898,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4006,7 +4018,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
msgid "Duplicate..."
msgstr "அசைவூடà¯à®Ÿà¯ போலிபசà¯à®šà®¾à®µà®¿à®•ளà¯"
@@ -4802,19 +4814,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12318,6 +12330,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13630,10 +13650,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13674,16 +13690,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13694,6 +13880,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13746,6 +13995,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14096,8 +14363,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14337,7 +14604,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 8c86f7f276..f329a3c39f 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -497,8 +497,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1332,7 +1332,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2105,8 +2105,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3132,7 +3132,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3856,6 +3860,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3968,7 +3980,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4754,19 +4766,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12197,6 +12209,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13494,10 +13514,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13538,16 +13554,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13558,6 +13744,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13610,6 +13859,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13960,8 +14227,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14201,7 +14468,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 4f1443f031..3359054a03 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -519,8 +519,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1385,7 +1385,7 @@ msgid "Bus Options"
msgstr "ตัวเลือภBus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ทำซ้ำ"
@@ -2189,8 +2189,8 @@ msgstr "รายละเอียดเมท็อด"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr "เมท็อดนี้ยังไม่มีคำอธิบาย โปรดช่วย[color=$color][url=$url]à¹à¸à¹‰à¹„ข[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3276,10 +3276,16 @@ msgid "Update Continuously"
msgstr "อัพเดทอย่างต่อเนื่อง"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "อัพเดทเมื่อเปลี่ยนà¹à¸›à¸¥à¸‡"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "จำนวนครั้งที่เปลี่ยนวัสดุ"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "ซ่อนตัวหมุนà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ท"
@@ -4055,6 +4061,14 @@ msgstr "อัà¸à¸©à¸£à¸šà¸²à¸‡à¸•ัวใช้ไม่ได้"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4175,7 +4189,7 @@ msgstr "à¹à¸à¹‰à¹„ขล่าสุด"
msgid "Sort by First Modified"
msgstr "à¹à¸à¹‰à¹„ขล่าสุด"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "ทำซ้ำ..."
@@ -4979,6 +4993,10 @@ msgid "Rename Animation"
msgstr "เปลี่ยนชื่อà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "ทำซ้ำà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¹„ปข้างหน้า"
@@ -4991,10 +5009,6 @@ msgid "Load Animation"
msgstr "โหลดà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "ทำซ้ำà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "ไม่มีà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¹ƒà¸«à¹‰à¸„ัดลอà¸!"
@@ -12782,6 +12796,16 @@ msgstr "ปรับรัศมีทรงà¹à¸„ปซูล"
msgid "Set Occluder Sphere Position"
msgstr "à¸à¸³à¸«à¸™à¸”เส้นโค้งขาเข้า"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "à¸à¸³à¸«à¸™à¸”พิà¸à¸±à¸”จุดเส้นโค้ง"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "à¸à¸³à¸«à¸™à¸”พิà¸à¸±à¸”จุดเส้นโค้ง"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "ปรับรัศมีทรงà¸à¸£à¸°à¸šà¸­à¸"
@@ -13937,8 +13961,8 @@ msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-"โมดูล \"GodotPaymentV3\" ที่ไม่ถูà¸à¸•้องได้รวมอยู่ในà¸à¸²à¸£à¸•ั้งค่าโปรเจà¸à¸•์ \"android/modules"
-"\" (เปลี่ยนà¹à¸›à¸¥à¸‡à¹ƒà¸™ Godot 3.2.2)\n"
+"โมดูล \"GodotPaymentV3\" ที่ไม่ถูà¸à¸•้องได้รวมอยู่ในà¸à¸²à¸£à¸•ั้งค่าโปรเจà¸à¸•์ \"android/"
+"modules\" (เปลี่ยนà¹à¸›à¸¥à¸‡à¹ƒà¸™ Godot 3.2.2)\n"
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
@@ -14149,10 +14173,6 @@ msgstr "App Store Team ID ยังไม่ได้ระบุ - ไม่ส
msgid "Invalid Identifier:"
msgstr "ระบุไม่ถูà¸à¸•้อง:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "ไอคอนที่จำเป็นไม่ได้ระบุไว้ในพรีเซ็ต"
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "หยุดเซิฟเวอร์ HTTP"
@@ -14197,17 +14217,200 @@ msgstr "ไม่สามารถสร้างโฟลเดอร์"
msgid "Error starting HTTP server:"
msgstr "ผิดพลาดขณะบันทึà¸à¸‰à¸²à¸"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "ชื่อโปรเจà¸à¸•์ไม่ถูà¸à¸•้อง"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "รูปเรขาคณิตผิดพลาด ไม่สามารถสร้างโพลีà¸à¸­à¸™"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "ไม่สามารถสร้างโฟลเดอร์"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸à¸²à¸™à¹„ม่ถูà¸à¸•้อง"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "โหลดทรัพยาà¸à¸£à¹„ม่ได้"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "โหลดทรัพยาà¸à¸£à¹„ม่ได้"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้อง"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้อง"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "ไม่พบ!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸•ัวอย่าง"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"ไม่พบเทมเพลต APK สำหรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "ระบุไม่ถูà¸à¸•้อง:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14218,6 +14421,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "ชื่อà¹à¸žà¹‡à¸„เà¸à¸ˆà¹à¸šà¸šà¸ªà¸±à¹‰à¸™à¸œà¸´à¸”พลาด"
@@ -14270,6 +14536,27 @@ msgstr "ขนาดโลโà¸à¹‰à¸à¸§à¹‰à¸²à¸‡ 310x150 ผิดพลาด
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "ขนาดรูปหน้าจอเริ่มโปรà¹à¸à¸£à¸¡à¸œà¸´à¸”พลาด (ต้องเป็น 620x300)"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸œà¸´à¸”พลาด"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้อง"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID ของโปรà¹à¸à¸£à¸¡à¹„ม่ถูà¸à¸•้อง"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14664,8 +14951,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"ไดรเวอร์ GLES2 ไม่สนับสนุนระบบพาร์ติเคิลโดยใช้à¸à¸²à¸£à¹Œà¸”จอ\n"
"ใช้โหนด CPUParticles à¹à¸—น คุณสามารถใช้ตัวเลือภ\"à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™ CPUParticles\" ได้"
@@ -14920,9 +15207,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "โหนดนี้เลิà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¹‰à¸§ ใช้โหนด AnimationTree à¹à¸—น"
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"สี: #%s\n"
diff --git a/editor/translations/tl.po b/editor/translations/tl.po
index ecf0928c49..3384446e1d 100644
--- a/editor/translations/tl.po
+++ b/editor/translations/tl.po
@@ -511,8 +511,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -930,8 +930,8 @@ msgstr "Ayusin Ang Pagkakabit:"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
msgstr ""
-"Tiyak ka bang gusto mong alisin lahat ng mga pagkakabit mula sa hudyat \"%s"
-"\"?"
+"Tiyak ka bang gusto mong alisin lahat ng mga pagkakabit mula sa hudyat "
+"\"%s\"?"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
@@ -1370,7 +1370,7 @@ msgid "Bus Options"
msgstr "Kaayusan ng Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Doblehin"
@@ -2148,8 +2148,8 @@ msgstr "Panglalarawan ng mga Method"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Kasalukuyang walang paglalarawan sa method na ito. Maaring tulungan kami sa "
"pamamagitan ng [color=$color][url=$url]pag-kontribyut[/url][/color]!"
@@ -3189,8 +3189,14 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "Pansinin ang anumang pagbabago"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Pansinin ang anumang pagbabago"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3914,6 +3920,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4026,7 +4040,7 @@ msgstr "Ayusin ayon sa Huling Binago"
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4814,19 +4828,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12294,6 +12308,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13611,10 +13633,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13655,16 +13673,190 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Nabigong lumikha ng folder."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Di-wastong pangalan."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Di-wastong pangalan."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Ginagawa ang Thumbnail"
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13675,6 +13867,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13727,6 +13982,25 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Di-wastong pangalan."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14077,8 +14351,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14318,9 +14592,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr ""
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Kulay: #%s\n"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index f318616c3e..87535e17f4 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -66,13 +66,16 @@
# Aysu Toprak <moonwater99@hotmail.com>, 2021.
# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021.
# seckiyn <kyofl6@gmail.com>, 2022.
+# Amigos Sus <amigossus66@gmail.com>, 2022.
+# Ferhat Geçdoğan <ferhatgectao@gmail.com>, 2022.
+# Recep GUCLUER <rgucluer@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-03 03:55+0000\n"
-"Last-Translator: seckiyn <kyofl6@gmail.com>\n"
+"PO-Revision-Date: 2022-02-13 20:11+0000\n"
+"Last-Translator: Recep GUCLUER <rgucluer@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -80,7 +83,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -89,7 +92,7 @@ msgstr "convert() için geçersiz türde argüman, TYPE_* sabitlerini kullanın.
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "1 uzunluÄŸunda bir metin bekleniyor (bir karakter)."
+msgstr "1(bir) karakter uzunluÄŸunda bir dize bekleniyor ."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -107,7 +110,7 @@ msgstr "self kullanılamaz çünkü örnek boş (geçilmedi)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
-msgstr "\"%s\" düğümünde geçersiz işlem '%s' ve '%s'."
+msgstr "\"%s\" işlecinde geçersiz terimler, '%s' ve '%s'."
#: core/math/expression.cpp
msgid "Invalid index of type %s for base type %s"
@@ -382,9 +385,8 @@ msgid "Duplicate Key(s)"
msgstr "Yinelenen Anahtar(lar)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Add RESET Value(s)"
-msgstr "%d Çerçeve[ler]'i ekle"
+msgstr "SIFIRLAMA DeÄŸer(ler)'i ekle"
#: editor/animation_track_editor.cpp
msgid "Delete Key(s)"
@@ -556,9 +558,8 @@ msgstr ""
"Bu seçenek yalnızca tek izli olduğundan, Bezier düzenlemede işe yaramaz."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Anim Add RESET Keys"
-msgstr "Animasyon Anahtarı Ölçekle"
+msgstr "Animasyon SIFIRLAMA Anahtarları Ekle"
#: editor/animation_track_editor.cpp
msgid ""
@@ -567,8 +568,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1432,7 +1433,7 @@ msgid "Bus Options"
msgstr "Bus ayarları"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Çoğalt"
@@ -1544,7 +1545,7 @@ msgstr "Geçersiz ad."
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "Basamak ile baÅŸlayamaz."
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2175,7 +2176,7 @@ msgstr "Özellikler"
#: editor/editor_help.cpp
#, fuzzy
msgid "overrides %s:"
-msgstr "üzerine yaz:"
+msgstr "% üzerine yazılmışlar:"
#: editor/editor_help.cpp
msgid "default:"
@@ -2206,9 +2207,8 @@ msgid "Icons"
msgstr "Simgeler"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Styles"
-msgstr "Yoldam"
+msgstr "Stiller"
#: editor/editor_help.cpp
msgid "Enumerations"
@@ -2236,8 +2236,8 @@ msgstr "Yöntem Açıklamaları"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Bu metot için henüz bir açıklama yok. Bize [color=$color][url=$url]katkıda "
"bulunarak[/url][/color] yardım edebilirsiniz!"
@@ -2316,18 +2316,19 @@ msgid "Property:"
msgstr "Özellik:"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Pin value"
-msgstr "(deÄŸer)"
+msgstr "İğneleme değeri"
#: editor/editor_inspector.cpp
msgid ""
"Pinning a value forces it to be saved even if it's equal to the default."
msgstr ""
+"Bir değeri iğnelemek onu varsayılana eşit olsa bile kaydedilmesine zorlar."
#: editor/editor_inspector.cpp
msgid "Pin value [Disabled because '%s' is editor-only]"
msgstr ""
+"Değer sabitle [Devre dışı bırakıldı çünkü '%s' sadece editör için aktiftir]"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -2342,26 +2343,23 @@ msgstr "Çoklu Ayarla:"
#: editor/editor_inspector.cpp
msgid "Pinned %s"
-msgstr ""
+msgstr "% SabitlenmiÅŸler"
#: editor/editor_inspector.cpp
msgid "Unpinned %s"
-msgstr ""
+msgstr "%SabitlenmemiÅŸler"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property"
-msgstr "Özellikleri Kopyala"
+msgstr "Özelliği Kopyala"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Paste Property"
-msgstr "Özellikleri Yapıştır"
+msgstr "Özelliği Yapıştır"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Copy Property Path"
-msgstr "Betik Yolunu Kopyala"
+msgstr "Özellik Yolunu Kopyala"
#: editor/editor_log.cpp
msgid "Output:"
@@ -3087,9 +3085,8 @@ msgid "Install Android Build Template..."
msgstr "Android İnşa Şablonunu Yükle ..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Düzenleyici Verileri Klasörünü Aç"
+msgstr "Kullanıcı Veri Klasörünü Aç"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3179,7 +3176,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Force Shader Fallbacks"
-msgstr ""
+msgstr "Shader Yedeklerini Zorla"
#: editor/editor_node.cpp
msgid ""
@@ -3190,6 +3187,13 @@ msgid ""
"Asynchronous shader compilation must be enabled in the project settings for "
"this option to make a difference."
msgstr ""
+"Bu seçenek etkinleştirildiğinde, tüm çalışma sürelerinde gölgelendiriciler "
+"güvenli ayarlarında (UberShader ile görünür olacak veya gizli "
+"kalacak)kullanılacaklar.\n"
+"Bu, normalde hızlıca görüntülenen güvenli ayarların görünüm ve performansını "
+"kontrol etmede kullanışlıdır.\n"
+"Bu seçeneğin bir fark yaratabilmesi için proje ayarlarında asenkron "
+"gölgelendirme derlemesinin etkinleştirilmesi gerekir."
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -3354,10 +3358,16 @@ msgid "Update Continuously"
msgstr "Sürekli Güncelle"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Değişiklik Olduğunda Güncelle"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Materyal DeÄŸiÅŸiklikleri:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Güncelleme Topacını Gizle"
@@ -3801,9 +3811,8 @@ msgstr "Düğümden İçe Aktar:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Hata"
+msgstr "%s Hatası"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4128,6 +4137,14 @@ msgstr "İsim geçersiz karkterler içeriyor."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4246,7 +4263,7 @@ msgstr "Son Değişiklik Tarihi'ne göre sırala"
msgid "Sort by First Modified"
msgstr "İlk Değişiklik Tarihi'ne göre sırala"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Çoğalt..."
@@ -4347,9 +4364,8 @@ msgid "Replace..."
msgstr "DeÄŸiÅŸtir..."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Replace in Files"
-msgstr "Tümünü Değiştir"
+msgstr "Dosyaiçlerinde Değiştir"
#: editor/find_in_files.cpp
msgid "Find: "
@@ -4360,9 +4376,8 @@ msgid "Replace: "
msgstr "DeÄŸiÅŸtir: "
#: editor/find_in_files.cpp
-#, fuzzy
msgid "Replace All (NO UNDO)"
-msgstr "Tümünü Değiştir"
+msgstr "Tümünü Değiştir (GERİ ALMA YOK)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4590,6 +4605,8 @@ msgid ""
"Select a resource file in the filesystem or in the inspector to adjust "
"import settings."
msgstr ""
+"İçe aktarma ayarlarını yapmak için dosya sisteminde ve ya kontrolcüde bir "
+"kaynak dosyası seçin."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -5057,6 +5074,10 @@ msgid "Rename Animation"
msgstr "Animasyonu Yeniden Adlandır"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Animasyonu Çoğalt"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Sonraki Değişeni Karıştır"
@@ -5069,10 +5090,6 @@ msgid "Load Animation"
msgstr "Animasyon Yükle"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Animasyonu Çoğalt"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Kopyalanacak animasyon yok!"
@@ -6051,9 +6068,8 @@ msgid "Alt+Drag: Move selected node."
msgstr "Alt+Sürükle: Seçili düğümü taşıyın."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Scale selected node."
-msgstr "Alt+Sürükle: Seçili düğümü taşıyın."
+msgstr "Alt+Sürükle: Seçili düğümü boyutlandırın."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "V: Set selected node's pivot position."
@@ -6087,7 +6103,7 @@ msgstr "Esnetme Åžekli"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Shift: Scale proportionally."
-msgstr ""
+msgstr "Shift: Orantılı olarak boyutlandır."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6186,9 +6202,8 @@ msgstr "Seçilen nesneyi yerine kilitleyin (taşınamaz)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock Selected Node(s)"
-msgstr "Seçimi Kilitle"
+msgstr "Seçilmiş Düğüm/leri Kilitle"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6197,9 +6212,8 @@ msgstr "Seçilen nesnenin kilidini açın (taşınabilir)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unlock Selected Node(s)"
-msgstr "Seçim Kilidini Aç"
+msgstr "Seçilmiş Düğüm/leri Aç"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6208,9 +6222,8 @@ msgstr "Nesnenin çocuğunun seçilemez olduğundan kuşkusuz olur."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected Node(s)"
-msgstr "Seçilenleri Grupla"
+msgstr "Seçilen Düğümleri Grupla"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6219,9 +6232,8 @@ msgstr "Nesnenin çocuğunun seçilebilme yeteneğini geri kazandırır."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected Node(s)"
-msgstr "Seçilen Grubu Dağıt"
+msgstr "Seçilen Düğümleri Dağıt"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -7320,7 +7332,7 @@ msgstr "Izgara Ayarları"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Snap"
-msgstr "Yapış"
+msgstr "Tutunma"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Enable Snap"
@@ -7861,9 +7873,8 @@ msgid "Find in Files..."
msgstr "Dosyalarda Bul..."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Replace in Files..."
-msgstr "DeÄŸiÅŸtir..."
+msgstr "Dosyalariçinde Değiştir..."
#: editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
@@ -8390,16 +8401,15 @@ msgstr "Serbest Bakış Aç / Kapat"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Decrease Field of View"
-msgstr ""
+msgstr "Görüş Alanını Azalt"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Increase Field of View"
-msgstr ""
+msgstr "Görüş Alanını Artır"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Reset Field of View to Default"
-msgstr "Varsayılanlara dön"
+msgstr "Varsayılan Görüş Alanına Dön"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -9129,22 +9139,19 @@ msgstr "Tür Ekle"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Filter the list of types or create a new custom type:"
-msgstr ""
+msgstr "Tip listesini süz veya yeni bir özel tip oluştur."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Available Node-based types:"
-msgstr "Kullanılabilir Profiller:"
+msgstr "Kullanılabilir Düğüm-tabanlı Türler:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "Dosya ismi boÅŸ."
+msgstr "Tür adı boş!"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Are you sure you want to create an empty type?"
-msgstr "Birden fazla proje açmakta kararlı mısınız?"
+msgstr "BoÅŸ bir tip oluÅŸturmak istediÄŸinize emin misiniz ?"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Confirm Item Rename"
@@ -9767,9 +9774,8 @@ msgid "TileSet"
msgstr "DöşemeTakımı"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Hiçbir VCS eklentisi mevcut değil."
+msgstr "Hiçbir VKS eklentisi mevcut değil."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9778,54 +9784,47 @@ msgstr "Hata"
#: editor/plugins/version_control_editor_plugin.cpp
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
-msgstr ""
+msgstr "Remote ayarları boş. Ağ kullanan VKS özellikleri çalışmayabilir."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "SaÄŸlanan isim yok."
+msgstr "Herhangi bir taahhüt mesajı verilmedi."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "İşle"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Gölgelendirici Değişiklikleri:"
+msgstr "Onaya hazırlanan Değişiklikler"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Gölgelendirici Değişiklikleri:"
+msgstr "Aşamasız Değişiklikler"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "İşle"
+msgstr "İşleme:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Tarih:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Altağaç"
+msgstr "Altyazı:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "%s dalını silmek istiyor musun?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Birden fazla proje açmakta kararlı mısınız?"
+msgstr "%s uzak kod deposunu kaldırmak istiyor musunuz ?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "Sıfırla"
+msgstr "Uygula"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9836,148 +9835,132 @@ msgid "Initialize"
msgstr "EtkinleÅŸtir"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Noktayı kaldır"
+msgstr "Uzak GiriÅŸ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Yeniden Adlandır"
+msgstr "Kullanıcı adı"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Åžifre"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "SSH Genel Anahtar Yolu"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "SSH genel anahtar yolu seç"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "SSH Özel Anahtar Yolu"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "SSH özel anahtar yolu seç"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH Parolası"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "Yeni deÄŸiÅŸiklikleri tespit et"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Kapa ve deÄŸiÅŸiklikleri kaydet?"
+msgstr "Tüm değişiklikleri sil"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Yerel değişiklikler kayıt ediliyor..."
+msgstr "Tüm değişiklikleri işlemeye hazırla"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Materyal DeÄŸiÅŸiklikleri:"
+msgstr "Tüm İşleme Hazırlıklarını Geri Al"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "Değişiklikleri İşle"
+msgstr "İşleme Mesajı"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "Değişiklikleri İşle"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "İşle"
+msgstr "İşlemler Listesi"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "İşlem listesi boyutu"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "EÅŸleÅŸmeler:"
+msgstr "Dallar"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Yeni Proje OluÅŸtur"
+msgstr "Yeni Dal OluÅŸtur"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Animasyon İzini Kaldır"
+msgstr "Dalı Sil"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Dal Adı"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Uzak"
+msgstr "Uzak Kod Depoları"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Yeni Proje OluÅŸtur"
+msgstr "Yeni Uzak Depo OluÅŸtur"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Öğeyi Kaldır"
+msgstr "Uzak Depoyu Kaldır"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Uzak "
+msgstr "Uzak Depo Adı"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Uzak "
+msgstr "Uzak Depo URL'si"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Çek"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Çek"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "Gönder"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Kaynak Örüntü:"
+msgstr "Zorla Gönder"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9997,22 +9980,19 @@ msgstr "Türdeğiştir"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "BirleÅŸtirilmemiÅŸ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "Görüş"
+msgstr "Görüş:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Yolu Ayır"
+msgstr "Ayır"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "DeÄŸiÅŸti"
+msgstr "BirleÅŸik"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12834,6 +12814,16 @@ msgstr "Engelleyici Silindir Yarıçapını Ayarla"
msgid "Set Occluder Sphere Position"
msgstr "Engelleyici Küre Konumunu Ayarla"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Portal Noktası Konumunu Ayarla"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Eğri Noktası Konumu Ayarla"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Silindir Yarıçapını Değiştir"
@@ -13543,18 +13533,16 @@ msgid "Edit Member"
msgstr "Üye Düzenle"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "İfadeyi ayarla"
+msgstr "İfade"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "Dön"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "animasyon"
+msgstr "KoÅŸul"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
@@ -13590,7 +13578,7 @@ msgstr "Yineleyici geçersiz durumda: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "Dizi"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
@@ -13598,18 +13586,16 @@ msgid "in order:"
msgstr "Klasör yeniden adlandırma:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Perde:"
+msgstr "DeÄŸiÅŸtir"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Türler:"
+msgstr "Tür Değişimi"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
@@ -13625,22 +13611,20 @@ msgid "On Self"
msgstr "Kendi"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "%s karakterinde"
+msgstr "%s'ı çıkar"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "%s'ı Çarp"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "%s'ı Böl"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Ekle %s"
+msgstr "%s'in Modunu Al"
#: modules/visual_script/visual_script_func_nodes.cpp
#, fuzzy
@@ -13652,17 +13636,16 @@ msgid "ShiftRight %s"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Ekle %s"
+msgstr "%s'ın BitAnd'ını Al"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "%s'ın BitOr'unu Al"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "%s'ın BitXor'unu Al"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13692,9 +13675,8 @@ msgid "Emit %s"
msgstr "Ayarla %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "İşlevler"
+msgstr "Fonksiyon"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -13722,54 +13704,44 @@ msgid "VariableSet not found in script: "
msgstr "VariableSet betikte bulunamadı: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Yeniden Yükle"
+msgstr "Önceden Yükle"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Derinlik İndeksi"
+msgstr "İndeksi Al"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Derinlik İndeksi"
+msgstr "İndeksi Ayarla"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Sabit"
+msgstr "Genel Sabit"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Sabit"
+msgstr "Sınıf Sabiti"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Sabit"
+msgstr "Basit Sabit"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Sabit"
+msgstr "Matematik Sabiti"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "GDNative İskelet Etkinleştirildi"
+msgstr "Motor İskeletini Al"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "TimeSeek Düğümü"
+msgstr "Sahne Düğümünü Al"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Sahne Ağacı Düzenleme"
+msgstr "Sahne Ağacını Al"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -13777,9 +13749,8 @@ msgid "Get Self"
msgstr "Kendi"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Düğümleri Kes"
+msgstr "ÖzelSınıf"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13799,19 +13770,16 @@ msgid "SubCall"
msgstr "Çağrılar"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "Sabitler"
+msgstr "%s'ı Oluştur"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "Yerel Ekseni Kullan"
+msgstr "Yerel DeÄŸiÅŸkeni Al"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "Yerel Ekseni Kullan"
+msgstr "Yerel DeÄŸiÅŸkeni Ayarla"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -13820,7 +13788,7 @@ msgstr "Eylem"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "%s'ı Yapısını Ayır"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13832,31 +13800,27 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "Bekle"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "Çerçeveyi Taşı"
+msgstr "Sonraki Çerçeve"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Fizik Kare %"
+msgstr "Sonraki Fizik Çerçevesi"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s saniye/ler"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Sinyal"
+msgstr "BeklemeSinyali"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Sinyal"
+msgstr "DüğümBeklemeSinyali"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
@@ -14009,13 +13973,12 @@ msgstr ""
"Eklentileri kullanabilmek için \"Özel Derleme Kullan\" seçeneği aktif olmalı."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VrApi\" "
"or \"OpenXR\"."
msgstr ""
-"\"El Takibi(Hand Tracking)\" sadece \"Xr Modu\" \"Oculus Mobile VR\" "
-"olduğunda geçerlidir."
+"\"El Takibi (Hand Tracking)\" sadece \"Xr Modu\" \"Oculus Mobile VR\" ya da "
+"\"OpenXR\" olduğunda geçerlidir."
#: platform/android/export/export_plugin.cpp
msgid "\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\"."
@@ -14222,10 +14185,6 @@ msgstr "App Store Ekip Kimliği belirtilmedi - proje yapılandırılamıyor."
msgid "Invalid Identifier:"
msgstr "Geçersiz Tanımlayıcı:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "Ön ayarda gerekli simge belirtilmemiş."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "HTTP sunucuyu durdur"
@@ -14266,16 +14225,202 @@ msgstr "HTTP sunucu klasörü oluşturulamadı:"
msgid "Error starting HTTP server:"
msgstr "HTTP sunucusu başlatılırken hata:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Geçersiz Proje Adı."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Geçersiz geometri, çokgen oluşturulamıyor."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Klasör oluşturulamadı."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Geçersiz ana yol."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Kaynak yükleme başarısız oldu."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Kaynak yükleme başarısız oldu."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Geçersiz uzantı."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Geçersiz uzantı."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Simge bulunamadı."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Küçük Bediz Oluşturuluyor"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Dışa aktarılacak şablon APK bulunamadı:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Geçersiz paket tanımlayıcısı:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "Noter tasdiki: kod imzalama gerekli."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "Noter onayı: sertleştirilmiş çalışma zamanı gerekli."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "Noter onayı: sertleştirilmiş çalışma zamanı gerekli."
#: platform/osx/export/export.cpp
@@ -14286,6 +14431,69 @@ msgstr "Noter tasdik: Apple Kimliği adı belirtilmedi."
msgid "Notarization: Apple ID password not specified."
msgstr "Noter tasdik: Apple Kimliği parolası belirtilmedi."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Geçersiz paket kısa ismi."
@@ -14338,6 +14546,27 @@ msgstr "Geçersiz kare 310x150 belirtkenin bediz boyutları (310x150 olmalı)."
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Geçersiz açılış görüntülüğü bediz boyutları (620x300 olmalı)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Geçersiz yol."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Geçersiz uzantı."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Geçersiz ürün GUID'i."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14465,7 +14694,7 @@ msgstr "Bu engelleyici için engelleyici çokgeni boş. Lütfen bir çokgen çiz
#: scene/2d/navigation_agent_2d.cpp
msgid "The NavigationAgent2D can be used only under a Node2D node."
-msgstr ""
+msgstr "NavigationAgent2D sadece Node2D düğümünün altında kullanılabilir."
#: scene/2d/navigation_obstacle_2d.cpp
msgid ""
@@ -14498,15 +14727,14 @@ msgstr ""
"çalışır."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
"GPU tabanlı parçacıklar GLES2 video sürücüsü tarafından desteklenmez.\n"
-"Bunun yerine CPUParçacıklar2B düğümünü kullanın. Bu amaçla "
-"\"CPUParçacıklar'a Dönüştür\" seçeneğini kullanabilirsiniz."
+"Bunun yerine CPUParticles2D düğümünü kullanın. Bunun için \"CPUParticles2D'a "
+"Dönüştür\" seçeneğini kullanabilirsiniz."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14746,7 +14974,7 @@ msgstr "90 dereceden geniş açılı SpotIşık gölge oluşturamaz."
#: scene/3d/navigation_agent.cpp
msgid "The NavigationAgent can be used only under a spatial node."
-msgstr ""
+msgstr "NavigationAgent sadece Spatial düğümünün altında kullanılabilir."
#: scene/3d/navigation_mesh_instance.cpp
msgid ""
@@ -14774,8 +15002,8 @@ msgstr "Yalnızca tek tip ölçekler desteklenir."
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GPU tabanlı parçacıklar GLES2 video sürücüsü tarafından desteklenmez.\n"
"Bunun yerine CPUParçacık düğümünü kullanın. Bu amaçla \"CPUParçacık'a "
@@ -14813,8 +15041,8 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"YolTakibet'in DÖNME_ODAKLI öğesi, üst Yol'un Eğri kaynağında \"Yukarı Vektör"
-"\" özelliğinin etkinleştirilmesini gerektiriyor."
+"YolTakibet'in DÖNME_ODAKLI öğesi, üst Yol'un Eğri kaynağında \"Yukarı "
+"Vektör\" özelliğinin etkinleştirilmesini gerektiriyor."
#: scene/3d/physics_body.cpp
msgid ""
@@ -15059,9 +15287,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "Bu düğüm kullanımdan kaldırıldı. Bunun yerine AnimasyonAğacı kullanın."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Renk: #%s\n"
diff --git a/editor/translations/tt.po b/editor/translations/tt.po
index abbc0eed73..8459c61d41 100644
--- a/editor/translations/tt.po
+++ b/editor/translations/tt.po
@@ -497,8 +497,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1332,7 +1332,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2105,8 +2105,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3131,7 +3131,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3855,6 +3859,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3967,7 +3979,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4753,19 +4765,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12194,6 +12206,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13485,10 +13505,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13529,16 +13545,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13549,6 +13735,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13601,6 +13850,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13951,8 +14218,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14192,7 +14459,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po
index e83ce5dc02..3b2ebd6275 100644
--- a/editor/translations/tzm.po
+++ b/editor/translations/tzm.po
@@ -495,8 +495,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1330,7 +1330,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2103,8 +2103,8 @@ msgstr ""
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3129,7 +3129,11 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Vital Changes"
msgstr ""
#: editor/editor_node.cpp
@@ -3853,6 +3857,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -3965,7 +3977,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4751,19 +4763,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12190,6 +12202,14 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ""
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Polygon Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Hole Point Position"
+msgstr ""
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13481,10 +13501,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13525,16 +13541,186 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create \"%s\" subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13545,6 +13731,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -13597,6 +13846,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -13947,8 +14214,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14188,7 +14455,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index e1d0021c08..63a2ecc734 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -17,12 +17,13 @@
# Микола Тимошенко <9081@ukr.net>, 2020.
# Miroslav <zinmirx@gmail.com>, 2020.
# IllusiveMan196 <hamsterrv@gmail.com>, 2021.
+# KazanskiyMaks <kazanskiy.maks@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-01-24 02:05+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
@@ -30,9 +31,9 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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.10.1\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.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -523,8 +524,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1390,7 +1391,7 @@ msgid "Bus Options"
msgstr "Параметри шини"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дублювати"
@@ -2116,6 +2117,7 @@ msgstr "КлаÑ:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
+#, fuzzy
msgid "Inherits:"
msgstr "УÑпадковує:"
@@ -2197,11 +2199,11 @@ msgstr "ОпиÑи методів"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"У поточній верÑÑ–Ñ— немає опиÑу цього методу. Будь лаÑка, [color=$color][url="
-"$url]Ñтворіть його[/url][/color]!"
+"У поточній верÑÑ–Ñ— немає опиÑу цього методу. Будь лаÑка, [color=$color]"
+"[url=$url]Ñтворіть його[/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2882,8 +2884,9 @@ msgstr "Видалити компонуваннÑ"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
+#, fuzzy
msgid "Default"
-msgstr "Типовий"
+msgstr "За замовчуваннÑм"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
@@ -3050,9 +3053,8 @@ msgid "Install Android Build Template..."
msgstr "Ð’Ñтановити шаблон Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Android…"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÐºÐ¸ даних редактора"
+msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ‚ÐµÐºÐ¸ даних кориÑтувача"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3323,10 +3325,16 @@ msgid "Update Continuously"
msgstr "Оновлювати неперервно"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Оновлювати при зміні"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Зміни матеріалу:"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Приховати Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°"
@@ -3772,9 +3780,8 @@ msgstr "Імпортувати з вузла:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "Помилка"
+msgstr "Помилка %s"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4099,6 +4106,14 @@ msgstr "Ðазва міÑтить некоректні Ñимволи."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4217,7 +4232,7 @@ msgstr "УпорÑдкувати за оÑтаннім внеÑеннÑм змі
msgid "Sort by First Modified"
msgstr "УпорÑдкувати за початковим внеÑеннÑм змін"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Дублювати..."
@@ -5033,6 +5048,10 @@ msgid "Rename Animation"
msgstr "Перейменувати анімацію"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Дублювати анімацію"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Змінена подальша анімаціÑ"
@@ -5045,10 +5064,6 @@ msgid "Load Animation"
msgstr "Завантажити анімацію"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Дублювати анімацію"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Ðемає анімації Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ!"
@@ -6495,7 +6510,7 @@ msgstr "ПлаÑкий 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "ПлаÑкий 1"
+msgstr "Площина 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -9748,9 +9763,8 @@ msgid "TileSet"
msgstr "Ðабір плиток"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
-msgstr "Ðемає доÑтупних доданків ÑиÑтем ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми."
+msgstr "Ðемає доÑтупних додатків ÑиÑтем ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9760,53 +9774,48 @@ msgstr "Помилка"
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
msgstr ""
+"Параметри віддаленого Ñховища Ñ” порожніми. МожливоÑті ÑиÑтеми ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ "
+"верÑÑ–Ñми, Ñкі викориÑтовують мережу, можуть не працювати."
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "Ім'Ñ Ð½Ðµ вказано."
+msgstr "Ðе було надано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ внеÑок."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "ВнеÑок"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "Зміни шейдерів:"
+msgstr "Етапні зміни"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "Зміни шейдерів:"
+msgstr "Ðеетапні зміни"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "ВнеÑок"
+msgstr "ВнеÑок:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "Дата:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "Піддерево"
+msgstr "Підзаголовок:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "Хочете вилучити гілку %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "Ви Ñправді хочете Ñтворити порожній тип?"
+msgstr "Ви Ñправді хочете вилучити віддалене Ñховище %s?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "ЗаÑтоÑувати ÑкиданнÑ"
+msgstr "ЗаÑтоÑувати"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9817,148 +9826,132 @@ msgid "Initialize"
msgstr "Ініціалізувати"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "Вилучити точку"
+msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача віддаленого Ñховища"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "Перейменувати"
+msgstr "КориÑтувач"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "Пароль"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "ШлÑÑ… до відкритого ключа SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "Виберіть шлÑÑ… до відкритого ключа SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "ШлÑÑ… до закритого ключа SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "Виберіть шлÑÑ… до закритого ключа SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Пароль SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "ВиÑвити зміни"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "Закрити та зберегти зміни?"
+msgstr "Відкинути уÑÑ– зміни"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… змін..."
+msgstr "Створити етап з уÑÑ–Ñ… змін"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "Зміни матеріалу:"
+msgstr "СкаÑувати етап з уÑÑ–Ñ… змін"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "ВнеÑти зміни"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²Ð½ÐµÑку"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
msgstr "ВнеÑти зміни"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "ВнеÑок"
+msgstr "СпиÑок внеÑку"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "Розмір ÑпиÑку внеÑку"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "Збіги:"
+msgstr "Гілки"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "Створити новий проєкт"
+msgstr "Створити гілку"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "Видалити доріжку"
+msgstr "Вилучити гілку"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "Ðазва гілки"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "Віддалений"
+msgstr "Віддалені Ñховища"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "Створити новий проєкт"
+msgstr "Створити віддалене Ñховище"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "Вилучити елемент"
+msgstr "Вилучити віддалене Ñховище"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "Віддалений "
+msgstr "Ðазва віддаленого Ñховища"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "Віддалений "
+msgstr "ÐдреÑа віддаленого Ñховища"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "Отримати"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "Отримати"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "ЗапиÑати"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "Початкова Ñітка:"
+msgstr "ПримуÑово запиÑати"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9978,22 +9971,19 @@ msgstr "Зміна типу"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "Ðеоб'єднано"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "ПереглÑд"
+msgstr "ПереглÑд:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "Розділити шлÑÑ…"
+msgstr "Розділити"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "Змінено"
+msgstr "Уніфіковано"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -12837,6 +12827,16 @@ msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñфери закупорюваннÑ"
msgid "Set Occluder Sphere Position"
msgstr "Ð’Ñтановити позицію Ñфери закупорюваннÑ"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Задати Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ порталу"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Задати Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸ кривої"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Змінити Ñ€Ð°Ð´Ñ–ÑƒÑ Ñ†Ð¸Ð»Ñ–Ð½Ð´Ñ€Ð°"
@@ -13551,38 +13551,36 @@ msgid "Edit Member"
msgstr "Редагувати член"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "Ð’Ñтановити вираз"
+msgstr "Вираз"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "ПовернутиÑÑ"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "анімаціÑ"
+msgstr "Умова"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "Ñкщо (cond) має значеннÑ:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Доки"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "доки (cond):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "ітератор"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "Ð´Ð»Ñ (elem) у (input):"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13598,79 +13596,71 @@ msgstr "Ітератор Ñтав недійÑним: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "ПоÑлідовніÑть"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "ÐŸÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÐ¸:"
+msgstr "у порÑдку:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "Тон:"
+msgstr "ПеремкнутиÑÑ"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "«input» має значеннÑ:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "Типи:"
+msgstr "Виклик типу"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "Чи %s?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "При %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "Цей об'єкт"
+msgstr "Ðа Ñобі"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "Ðа Ñимволі %s"
+msgstr "ВіднÑти %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "Помножити на %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "Поділити на %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "Додати %s"
+msgstr "Поділити націло %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "Ð’Ñтановити %s"
+msgstr "ЗÑунути ліворуч %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "ЗÑунути праворуч %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "Пришпилено %s"
+msgstr "Побітове «І» %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "Побітове «ÐБО» %s"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "Побітове «Виключне ÐБО» %s"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13695,19 +13685,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "Ðекоректна назва влаÑтивоÑті індекÑу, «%s», у вузлі %s."
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "Ð’Ñтановити %s"
+msgstr "ÐадіÑлати %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
-msgstr "Функції"
+msgstr "ФункціÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "Змінити розмір маÑиву"
+msgstr "Композитний маÑив"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13719,7 +13706,7 @@ msgstr ": ÐеприпуÑтимі аргументи: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "a Ñкщо cond, інакше b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13730,64 +13717,52 @@ msgid "VariableSet not found in script: "
msgstr "Ðе знайдено VariableSet у Ñкрипті: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "Перезавантажити"
+msgstr "Попередньо завантажити"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z-індекÑ"
+msgstr "Отримати індекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z-індекÑ"
+msgstr "Ð’Ñтановити індекÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "Сталий"
+msgstr "Загальна Ñтала"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "Сталий"
+msgstr "Стала клаÑу"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "Сталий"
+msgstr "Базова Ñтала"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "Сталий"
+msgstr "Математична Ñтала"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "Увімкнений одинак GDNative"
+msgstr "Отримати Ñинглтон рушіÑ"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "Вузол пошуку чаÑу"
+msgstr "Отримати вузол Ñцени"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ— Ñцени"
+msgstr "Отримати ієрархію Ñцен"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "Цей об'єкт"
+msgstr "Отримати Ñебе"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "Вирізати вузли"
+msgstr "Ðетиповий вузол"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13802,33 +13777,28 @@ msgstr ""
"out) або Ñ€Ñдок (error)."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "Виклики"
+msgstr "Підвиклик"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "КонÑтанти"
+msgstr "Побудувати %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "ВикориÑтати локальний проÑтір"
+msgstr "Отримати локальну змінну"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "ВикориÑтати локальний проÑтір"
+msgstr "Ð’Ñтановити локальну змінну"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "ДіÑ"
+msgstr "Ð”Ñ–Ñ %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "ДеконÑтруювати %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13836,40 +13806,35 @@ msgstr "Шукати VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Результат"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "ОчікуваннÑ"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "ПереÑунути кадр"
+msgstr "ÐаÑтупний кадр"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "Фізичний кадр %"
+msgstr "ÐаÑтупний фізичний кадр"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s Ñекунд"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "Сигнал"
+msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñигналу"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Сигнал"
+msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñигналу вузла"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "ЕкземплÑÑ€"
+msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñигналу екземплÑра"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -14243,10 +14208,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "Ðекоректний ідентифікатор:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "У шаблоні не вказано потрібної піктограми."
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Зупинити HTTP-Ñервер"
@@ -14287,16 +14248,202 @@ msgstr "Ðе вдалоÑÑ Ñтворити каталог на Ñервері
msgid "Error starting HTTP server:"
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запуÑку Ñервера HTTP:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Ðекоректна назва проєкту."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Ðекоректна геометріÑ, неможливо Ñтворити багатокутник."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Ðеможливо Ñтворити теку."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "Ðекоректний базовий шлÑÑ…."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ реÑурÑ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ реÑурÑ."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Ðекоректний ÑуфікÑ."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Ðекоректний ÑуфікÑ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Піктограм не знайдено."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Створюємо мініатюру"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ шаблон APK Ð´Ð»Ñ ÐµÐºÑпортуваннÑ:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðекоректний ідентифікатор пакунка:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "ЗаÑвідченнÑ: потрібен код підпиÑуваннÑ."
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "ЗаÑвідченнÑ: потрібне Ñтійке Ñередовище запуÑку."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "ЗаÑвідченнÑ: потрібне Ñтійке Ñередовище запуÑку."
#: platform/osx/export/export.cpp
@@ -14307,6 +14454,69 @@ msgstr "ЗаÑвідченнÑ: не вказано назву ідентифіÐ
msgid "Notarization: Apple ID password not specified."
msgstr "ЗаÑвідченнÑ: не вказано пароль до ідентифікатора Apple."
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Ðекоректна Ñкорочена назва пакунка."
@@ -14369,6 +14579,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ðекоректні розмірноÑті Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–ÐºÐ½Ð° Ð²Ñ–Ñ‚Ð°Ð½Ð½Ñ (мають бути 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "Ðеправильний шлÑÑ…."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Ðекоректний ÑуфікÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "Ðекоректний GUID продукту."
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14531,16 +14762,15 @@ msgstr ""
"ParallaxBackground."
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
-"У драйвері GLES2 не передбачено підтримки чаÑток із обробкою за допомогою "
-"графічного процеÑора.\n"
+"У відеодрайвері GLES2 не передбачено підтримки чаÑток із обробкою за "
+"допомогою графічного процеÑора.\n"
"Вам Ñлід ÑкориÑтатиÑÑ Ð²ÑƒÐ·Ð»Ð¾Ð¼ CPUParticles2D. Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ можете вибрати пункт "
-"«Перетворити на CPUParticles»."
+"«Перетворити на CPUParticles2D» на панелі інÑтрументів."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14550,6 +14780,12 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"У macOS обробка Particles2D є набагато повільнішою за CPUParticles2D через "
+"те, що відгук Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾ на загальному процеÑорі, а не на "
+"графічному процеÑорі.\n"
+"Вам варто ÑкориÑтатиÑÑ CPUParticles2D, Ñкщо метою Ñ” запуÑк на macOS.\n"
+"Ви можете ÑкориÑтатиÑÑ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ пунктом панелі інÑтрументів «Перетворити на "
+"CPUParticles2D»."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14806,16 +15042,15 @@ msgid "Only uniform scales are supported."
msgstr "Передбачено підтримку лише однорідних маÑштабів."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
-"У драйвері GLES2 не передбачено підтримки чаÑток із обробкою за допомогою "
-"графічного процеÑора.\n"
+"У відеодрайвері GLES2 не передбачено підтримки чаÑток із обробкою за "
+"допомогою графічного процеÑора.\n"
"Вам Ñлід ÑкориÑтатиÑÑ Ð²ÑƒÐ·Ð»Ð¾Ð¼ CPUParticles. Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ можете вибрати пункт "
-"«Перетворити на CPUParticles»."
+"«Перетворити на CPUParticles» на панелі інÑтрументів."
#: scene/3d/particles.cpp
msgid ""
@@ -14824,6 +15059,12 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"У macOS обробка Particles є набагато повільнішою за CPUParticles через те, "
+"що відгук Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€ÐµÐ°Ð»Ñ–Ð·Ð¾Ð²Ð°Ð½Ð¾ на загальному процеÑорі, а не на "
+"графічному процеÑорі.\n"
+"Вам варто ÑкориÑтатиÑÑ CPUParticles, Ñкщо метою Ñ” запуÑк на macOS.\n"
+"Ви можете ÑкориÑтатиÑÑ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ пунктом панелі інÑтрументів «Перетворити на "
+"CPUParticles»."
#: scene/3d/particles.cpp
msgid ""
@@ -15103,9 +15344,10 @@ msgstr ""
"Цей вузол вважаєтьÑÑ Ð·Ð°Ñтарілим. СкориÑтайтеÑÑ Ð·Ð°Ð¼Ñ–Ñть нього AnimationTree."
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"Колір: #%s\n"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index a93f7f85b5..90156465b3 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -504,8 +504,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1355,7 +1355,7 @@ msgid "Bus Options"
msgstr "سب سکریپشن بنائیں"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2151,8 +2151,8 @@ msgstr "سب سکریپشن بنائیں"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3193,8 +3193,14 @@ msgid "Update Continuously"
msgstr ""
#: editor/editor_node.cpp
-msgid "Update When Changed"
-msgstr ""
+#, fuzzy
+msgid "Update All Changes"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "سب سکریپشن بنائیں"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -3935,6 +3941,14 @@ msgstr ""
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4054,7 +4068,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr ""
@@ -4869,19 +4883,19 @@ msgid "Rename Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -12560,6 +12574,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr ".تمام کا انتخاب"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr ".تمام کا انتخاب"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr ".تمام کا انتخاب"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -13905,10 +13929,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr ""
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -13952,16 +13972,187 @@ msgstr ""
msgid "Error starting HTTP server:"
msgstr ""
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no exe name."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid binary format."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to process nested resources."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get CodeResources hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+msgid "Invalid entitlements file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid executable file."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "No identity found."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not find template app to export:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -13972,6 +14163,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr ""
@@ -14024,6 +14278,24 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid icon path:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid file version:"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid product version:"
+msgstr ""
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14374,8 +14646,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -14615,7 +14887,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index f9bec13fd9..12cb91b7f9 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -522,8 +522,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1389,7 +1389,7 @@ msgid "Bus Options"
msgstr "Tùy chá»n Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Nhân đôi"
@@ -2188,8 +2188,8 @@ msgstr "Mô tả phương thức"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"Hiện phương thức này chưa được mô tả. Các bạn [color=$color][url=$url]đóng "
"góp[/url][/color] giúp chúng mình nha!"
@@ -3285,10 +3285,16 @@ msgid "Update Continuously"
msgstr "Cập nhật Liên tục"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "Cập nhật khi có thay đổi"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "Äối số đã thay đổi"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "Ẩn cái xoay xoay cập nhật"
@@ -4063,6 +4069,14 @@ msgstr "Tên có chứa kí tự không hợp lệ."
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4183,7 +4197,7 @@ msgstr "Sửa đổi lần cuối"
msgid "Sort by First Modified"
msgstr "Sửa đổi lần cuối"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "Nhân đôi..."
@@ -4990,6 +5004,10 @@ msgid "Rename Animation"
msgstr "Äổi tên Hoạt ảnh"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "Nhân bản Hoạt ảnh"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "Chuyển đổi animation Tiếp theo Thay đổi"
@@ -5002,10 +5020,6 @@ msgid "Load Animation"
msgstr "Nạp Hoạt ảnh"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "Nhân bản Hoạt ảnh"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "Không có hoạt ảnh để sao chép!"
@@ -12831,6 +12845,16 @@ msgstr "Chỉnh bán kính hình trụ"
msgid "Set Occluder Sphere Position"
msgstr "Äặt vị trí Ä‘iểm uốn"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "Äặt vị trí Ä‘iểm uốn"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "Äặt vị trí Ä‘iểm uốn"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "Thay Äổi Bán Kính Hình Trụ"
@@ -14227,10 +14251,6 @@ msgstr "App Store Team ID không được chỉ định - không thể cấu hì
msgid "Invalid Identifier:"
msgstr "Äịnh danh không hợp lệ:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "Dừng Máy chủ HTTP"
@@ -14275,17 +14295,198 @@ msgstr "Không thể tạo folder."
msgid "Error starting HTTP server:"
msgstr "Lỗi khi lưu scene."
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "Tên dự án không hợp lệ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "Hình không hợp lệ, không thể tạo đa giác."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "Không thể tạo folder."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "ÄÆ°á»ng dẫn sai."
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "Nạp tài nguyên thất bại."
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "Nạp tài nguyên thất bại."
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "Tên đuôi không hợp lệ."
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "Tên đuôi không hợp lệ."
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "Không tìm thấy tài nguyên phụ."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "Tạo hình thu nhá»"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "Không thể mở bản mẫu để xuất:"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Äịnh danh không hợp lệ:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14296,6 +14497,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "Gói có tên ngắn không hợp lệ."
@@ -14348,13 +14612,34 @@ msgstr "Kích thước ảnh logo 310x150 không hợp lệ (phải là 310x150)
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ảnh mở màn có kích thước không hợp lệ (phải là 620x300)."
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "ÄÆ°á»ng dẫn sai."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "Tên đuôi không hợp lệ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "GUID sản phẩm không hợp lệ."
+
#: 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 ""
-"Tài nguyên SpriteFrames phải được tạo hoặc đặt trong thuộc tính \"Khung hình"
-"\" thì AnimatedSprite mới hiển thị các khung hình được."
+"Tài nguyên SpriteFrames phải được tạo hoặc đặt trong thuộc tính \"Khung "
+"hình\" thì AnimatedSprite mới hiển thị các khung hình được."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14754,8 +15039,8 @@ msgstr ""
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"Video driver GLES2 không hỗ trợ hạt dựa trên bộ xử lí GPU.\n"
"Thay vào đó hãy dùng nút CPUParticles2D. Bạn có thể dùng tùy chá»n \"Chuyển "
@@ -15005,7 +15290,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 314cc33f9f..0675b564d3 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -88,7 +88,7 @@ msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2022-01-12 16:52+0000\n"
+"PO-Revision-Date: 2022-02-12 21:43+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"
@@ -97,7 +97,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.10.1\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -580,16 +580,16 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
"此动画属于导入的场景,因此ä¸ä¼šä¿å­˜å¯¹å¯¼å…¥è½¨é“的更改。\n"
"\n"
"è¦å¯ç”¨æ·»åŠ è‡ªå®šä¹‰è½¨é“的功能,å¯ä»¥åœ¨åœºæ™¯çš„导入设置中将\n"
-"“Animation > Storage†设为 “ Filesâ€ï¼Œå¹¶å¯ç”¨ “Animation > Keep Custom "
-"Tracksâ€ï¼Œç„¶åŽé‡æ–°å¯¼å…¥ã€‚\n"
+"“Animation > Storageâ€è®¾ä¸ºâ€œFilesâ€ï¼Œå¹¶å¯ç”¨â€œAnimation > Keep Custom Tracksâ€ï¼Œç„¶"
+"åŽé‡æ–°å¯¼å…¥ã€‚\n"
"或者也å¯ä»¥ä½¿ç”¨å°†åŠ¨ç”»å¯¼å…¥ä¸ºå•独文件的导入预设。"
#: editor/animation_track_editor.cpp
@@ -1432,7 +1432,7 @@ msgid "Bus Options"
msgstr "总线选项"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "创建副本"
@@ -2215,8 +2215,8 @@ msgstr "方法说明"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"当剿²¡æœ‰æ­¤æ–¹æ³•的说明。请帮我们[color=$color][url=$url]贡献一个[/url][/"
"color]ï¼"
@@ -3034,9 +3034,8 @@ msgid "Install Android Build Template..."
msgstr "安装 Android 构建模æ¿..."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Open User Data Folder"
-msgstr "打开 “编辑器数æ®â€ 文件夹"
+msgstr "打开 “用户数æ®â€ 文件夹"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
@@ -3291,10 +3290,16 @@ msgid "Update Continuously"
msgstr "æŒç»­æ›´æ–°"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "当有更改时更新"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "æè´¨å˜æ›´ï¼š"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "éšè—更新旋转图"
@@ -3726,9 +3731,8 @@ msgstr "从节点中导入:"
#. TRANSLATORS: %s refers to the name of a version control system (e.g. "Git").
#: editor/editor_vcs_interface.cpp
-#, fuzzy
msgid "%s Error"
-msgstr "错误"
+msgstr "%s 错误"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -4041,6 +4045,14 @@ msgstr "åç§°åŒ…å«æ— æ•ˆå­—符。"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4092,7 +4104,7 @@ msgstr "添加到收è—"
#: editor/filesystem_dock.cpp
msgid "Remove from Favorites"
-msgstr "从收è—中删除"
+msgstr "从收è—中移除"
#: editor/filesystem_dock.cpp
msgid "Edit Dependencies..."
@@ -4158,7 +4170,7 @@ msgstr "按最近修改"
msgid "Sort by First Modified"
msgstr "按最早修改"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "å¤åˆ¶ä¸º..."
@@ -4954,6 +4966,10 @@ msgid "Rename Animation"
msgstr "é‡å‘½å动画"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "å¤åˆ¶åŠ¨ç”»"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "æ··åˆä¸‹ä¸€æ­¥å˜æ›´"
@@ -4966,10 +4982,6 @@ msgid "Load Animation"
msgstr "加载动画"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "å¤åˆ¶åŠ¨ç”»"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "没有需è¦å¤åˆ¶çš„动画ï¼"
@@ -9602,7 +9614,6 @@ msgid "TileSet"
msgstr "图å—集"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS plugins are available."
msgstr "没有å¯ç”¨çš„ VCS æ’件。"
@@ -9613,54 +9624,47 @@ msgstr "错误"
#: editor/plugins/version_control_editor_plugin.cpp
msgid ""
"Remote settings are empty. VCS features that use the network may not work."
-msgstr ""
+msgstr "远程仓库设置为空。使用网络的 VCS 特性å¯èƒ½æ— æ³•工作。"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided."
-msgstr "没有æä¾›å称。"
+msgstr "未æä¾›æäº¤æ¶ˆæ¯ã€‚"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
msgstr "æäº¤"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Staged Changes"
-msgstr "ç€è‰²å™¨å˜æ›´ï¼š"
+msgstr "暂存修改"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstaged Changes"
-msgstr "ç€è‰²å™¨å˜æ›´ï¼š"
+msgstr "撤销暂存修改"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit:"
-msgstr "æäº¤"
+msgstr "æäº¤ï¼š"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Date:"
-msgstr ""
+msgstr "日期:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Subtitle:"
-msgstr "å­æ ‘"
+msgstr "副标题:"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Do you want to remove the %s branch?"
-msgstr ""
+msgstr "是å¦è¦ç§»é™¤ %s 分支?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Do you want to remove the %s remote?"
-msgstr "确定è¦åˆ›å»ºç©ºç±»åž‹å—?"
+msgstr "是å¦è¦ç§»é™¤ %s 远程仓库?"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Apply"
-msgstr "应用é‡ç½®"
+msgstr "应用"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9671,148 +9675,132 @@ msgid "Initialize"
msgstr "åˆå§‹åŒ–"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Login"
-msgstr "移除点"
+msgstr "远程仓库登录"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Username"
-msgstr "é‡å‘½å"
+msgstr "用户å"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Password"
-msgstr ""
+msgstr "密ç "
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Public Key Path"
-msgstr ""
+msgstr "SSH 公钥路径"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH public key path"
-msgstr ""
+msgstr "选择 SSH 公钥路径"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Private Key Path"
-msgstr ""
+msgstr "SSH ç§é’¥è·¯å¾„"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Select SSH private key path"
-msgstr ""
+msgstr "选择 SSH ç§é’¥è·¯å¾„"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH 密ç "
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
msgstr "检测新å˜åŒ–"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Discard all changes"
-msgstr "关闭并ä¿å­˜æ›´æ”¹å—?"
+msgstr "丢弃所有修改"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage all changes"
-msgstr "ä¿å­˜æœ¬åœ°æ›´æ”¹..."
+msgstr "暂存所有修改"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unstage all changes"
-msgstr "æè´¨å˜æ›´ï¼š"
+msgstr "撤销暂存所有修改"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Message"
-msgstr "æäº¤å˜æ›´"
+msgstr "æäº¤æ¶ˆæ¯"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
-msgstr "æäº¤å˜æ›´"
+msgstr "æäº¤ä¿®æ”¹"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit List"
-msgstr "æäº¤"
+msgstr "æäº¤åˆ—表"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr ""
+msgstr "æäº¤åˆ—表大å°"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "10"
-msgstr ""
+msgstr "10"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "20"
-msgstr ""
+msgstr "20"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "30"
-msgstr ""
+msgstr "30"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Branches"
-msgstr "匹é…项:"
+msgstr "分支"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Branch"
-msgstr "新建项目"
+msgstr "新建分支"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Branch"
-msgstr "移除动画轨é“"
+msgstr "移除分支"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branch Name"
-msgstr ""
+msgstr "分支åç§°"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remotes"
-msgstr "远程"
+msgstr "远程仓库"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Create New Remote"
-msgstr "新建项目"
+msgstr "新建远程仓库"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remove Remote"
-msgstr "移除项目"
+msgstr "移除远程仓库"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote Name"
-msgstr "远程 "
+msgstr "远程仓库åç§°"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Remote URL"
-msgstr "远程 "
+msgstr "远程仓库 URL"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Fetch"
-msgstr ""
+msgstr "抓å–"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Pull"
-msgstr ""
+msgstr "拉å–"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Push"
-msgstr ""
+msgstr "推é€"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Force Push"
-msgstr "æºç½‘格:"
+msgstr "强制推é€"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
@@ -9820,7 +9808,7 @@ msgstr "已修改"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Renamed"
-msgstr "æ›´å"
+msgstr "已更å"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Deleted"
@@ -9832,22 +9820,19 @@ msgstr "类型更改"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unmerged"
-msgstr ""
+msgstr "未åˆå¹¶"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View:"
-msgstr "视图"
+msgstr "查看:"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Split"
-msgstr "拆分路径"
+msgstr "拆分"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Unified"
-msgstr "已修改"
+msgstr "è”åˆ"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -9879,7 +9864,7 @@ msgstr "添加输入端å£"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
-msgstr "增加输出端å£"
+msgstr "添加输出端å£"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port type"
@@ -10447,7 +10432,7 @@ msgstr "è®¡ç®—å˜æ¢çš„倒数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the transpose of a transform."
-msgstr "è®¡ç®—ä¸€ä¸ªå˜æ¢çš„转置。"
+msgstr "è®¡ç®—å˜æ¢çš„转置。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Multiplies transform by transform."
@@ -10664,7 +10649,7 @@ msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰ä½¿ç”¨æœ¬åœ°å·®åˆ†çš„“ xâ€
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
"differencing."
-msgstr "(仅适用于片段/光照模å¼ï¼‰ï¼ˆå‘é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„“yâ€å¯¼æ•°ã€‚"
+msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆå‘é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„“yâ€å¯¼æ•°ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10787,7 +10772,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"筛选导出éžèµ„æºæ–‡ä»¶æˆ–文件夹\n"
-"(使用英文逗å·åˆ†éš”,如:*.json, *.txt, docs/* )"
+"(以英文逗å·åˆ†éš”,如:*.json, *.txt, docs/* )"
#: editor/project_export.cpp
msgid ""
@@ -11287,7 +11272,7 @@ msgstr "é‡å‘½å输入事件"
#: editor/project_settings_editor.cpp
msgid "Change Action deadzone"
-msgstr "修改动作盲区"
+msgstr "修改动作死区"
#: editor/project_settings_editor.cpp
msgid "Add Input Action Event"
@@ -11509,7 +11494,7 @@ msgstr "动作"
#: editor/project_settings_editor.cpp
msgid "Deadzone"
-msgstr "盲区"
+msgstr "死区"
#: editor/project_settings_editor.cpp
msgid "Device:"
@@ -12602,6 +12587,16 @@ msgstr "è®¾ç½®é®æŒ¡çƒä½“åŠå¾„"
msgid "Set Occluder Sphere Position"
msgstr "è®¾ç½®é®æŒ¡çƒä½“ä½ç½®"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "设置入å£é¡¶ç‚¹ä½ç½®"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "设置曲线的顶点ä½ç½®"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "修改圆柱体åŠå¾„"
@@ -13300,38 +13295,36 @@ msgid "Edit Member"
msgstr "编辑æˆå‘˜"
#: modules/visual_script/visual_script_expression.cpp
-#, fuzzy
msgid "Expression"
-msgstr "设置表达å¼"
+msgstr "表达å¼"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Return"
-msgstr ""
+msgstr "返回"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Condition"
-msgstr "动画"
+msgstr "æ¡ä»¶"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "if (cond) is:"
-msgstr ""
+msgstr "如果 cond 是:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "循环"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
-msgstr ""
+msgstr "åªè¦ cond æˆç«‹ï¼š"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator"
-msgstr ""
+msgstr "迭代器"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "for (elem) in (input):"
-msgstr ""
+msgstr "对 input 中的æ¯ä¸€ä¸ª elem:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -13347,79 +13340,71 @@ msgstr "迭代器失效: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
-msgstr ""
+msgstr "åºåˆ—"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "in order:"
-msgstr "é‡å‘½å文件夹:"
+msgstr "按顺åºï¼š"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Switch"
-msgstr "俯仰角:"
+msgstr "切æ¢"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "'input' is:"
-msgstr ""
+msgstr "“inputâ€æ˜¯ï¼š"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Type Cast"
-msgstr "类型:"
+msgstr "类型转æ¢"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Is %s?"
-msgstr ""
+msgstr "是 %s å—?"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "On %s"
-msgstr ""
+msgstr "对 %s"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "On Self"
-msgstr "仅自己"
+msgstr "对自身"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Subtract %s"
-msgstr "ä½äºŽå­—符 %s"
+msgstr "å°† %s å‡åŽ»"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Multiply %s"
-msgstr ""
+msgstr "将 %s 乘以"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Divide %s"
-msgstr ""
+msgstr "将 %s 除以"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Mod %s"
-msgstr "添加 %s"
+msgstr "将 %s 求模"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "ShiftLeft %s"
-msgstr "设置 %s"
+msgstr "å°† %s å‘左移ä½"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "ShiftRight %s"
-msgstr ""
+msgstr "å°† %s å‘å³ç§»ä½"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "BitAnd %s"
-msgstr "将 %s 固定"
+msgstr "å°† %s 按ä½ä¸Ž"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitOr %s"
-msgstr ""
+msgstr "å°† %s æŒ‰ä½æˆ–"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "BitXor %s"
-msgstr ""
+msgstr "å°† %s 按ä½å¼‚或"
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -13444,19 +13429,16 @@ msgid "Invalid index property name '%s' in node %s."
msgstr "节点 “%s†的索引属性å “%s†无效。"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Emit %s"
-msgstr "设置 %s"
+msgstr "è§¦å‘ %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Function"
msgstr "函数"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Compose Array"
-msgstr "调整数组大å°"
+msgstr "ç»„æˆæ•°ç»„"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -13468,7 +13450,7 @@ msgstr ": æ— æ•ˆå‚æ•°: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
-msgstr ""
+msgstr "如果 cond 则 a,å¦åˆ™ b"
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -13479,64 +13461,52 @@ msgid "VariableSet not found in script: "
msgstr "脚本中未找到 VariableSet: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Preload"
-msgstr "釿–°åŠ è½½"
+msgstr "预加载"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Index"
-msgstr "Z 索引"
+msgstr "获å–索引"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Index"
-msgstr "Z 索引"
+msgstr "设置索引"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Global Constant"
-msgstr "常é‡"
+msgstr "全局常é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Class Constant"
-msgstr "常é‡"
+msgstr "类常é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Basic Constant"
-msgstr "常é‡"
+msgstr "基本常é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Math Constant"
-msgstr "常é‡"
+msgstr "数学常é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Engine Singleton"
-msgstr "å¯ç”¨çš„ GDNative å•例"
+msgstr "获å–引擎å•例"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Node"
-msgstr "TimeSeek 节点"
+msgstr "获å–场景节点"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Scene Tree"
-msgstr "场景树编辑"
+msgstr "获å–场景树"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Self"
-msgstr "仅自己"
+msgstr "获å–自身"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "CustomNode"
-msgstr "剪切节点"
+msgstr "自定义节点"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -13546,36 +13516,31 @@ msgstr "自定义节点ä¸åŒ…å« _step() 方法,ä¸èƒ½ç”Ÿæˆå›¾åƒã€‚"
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_nodes.cpp
-#, fuzzy
msgid "SubCall"
-msgstr "调用"
+msgstr "å­è°ƒç”¨"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Construct %s"
-msgstr "常é‡"
+msgstr "构造 %s"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Get Local Var"
-msgstr "使用本地空间"
+msgstr "获å–局部å˜é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Set Local Var"
-msgstr "使用本地空间"
+msgstr "设置局部å˜é‡"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Action %s"
-msgstr "动作"
+msgstr "动作 %s"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Deconstruct %s"
-msgstr ""
+msgstr "解构 %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -13583,40 +13548,35 @@ msgstr "æœç´¢ VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Yield"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
-msgstr ""
+msgstr "等待"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Frame"
-msgstr "移动帧"
+msgstr "下一帧"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "Next Physics Frame"
-msgstr "物ç†å¸§ %"
+msgstr "下一物ç†å¸§"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "%s sec(s)"
-msgstr ""
+msgstr "%s ç§’"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitSignal"
-msgstr "ä¿¡å·"
+msgstr "等待信å·"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitNodeSignal"
-msgstr "ä¿¡å·"
+msgstr "等待节点信å·"
#: modules/visual_script/visual_script_yield_nodes.cpp
-#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "实例化"
+msgstr "等待实例信å·"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -13950,10 +13910,6 @@ msgstr "未指定 App Store Team ID - 无法é…置项目。"
msgid "Invalid Identifier:"
msgstr "无效的标识符:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "预设中未指定必需的图标。"
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "åœæ­¢ HTTP æœåС噍"
@@ -13994,16 +13950,202 @@ msgstr "无法创建 HTTP æœåŠ¡å™¨ç›®å½•ï¼š"
msgid "Error starting HTTP server:"
msgstr "å¯åЍ HTTP æœåŠ¡å™¨æ—¶å‡ºé”™ï¼š"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "项目å称无效。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "无效的几何体,无法创建多边形。"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "无法创建文件夹。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "无效的基本路径。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "加载资æºå¤±è´¥ã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "加载资æºå¤±è´¥ã€‚"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "æ‰©å±•åæ— æ•ˆã€‚"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "æ‰©å±•åæ— æ•ˆã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "没有图标。"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "正在创建缩略图"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ APK:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "无效的包标识符:"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "å…¬è¯ï¼šéœ€è¦ä»£ç ç­¾å。"
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "å…¬è¯ï¼šéœ€è¦åŠ å¼ºçš„è¿è¡Œæ—¶çŽ¯å¢ƒã€‚"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "å…¬è¯ï¼šéœ€è¦åŠ å¼ºçš„è¿è¡Œæ—¶çŽ¯å¢ƒã€‚"
#: platform/osx/export/export.cpp
@@ -14014,6 +14156,69 @@ msgstr "å…¬è¯ï¼šæœªæŒ‡å®š Apple ID å称。"
msgid "Notarization: Apple ID password not specified."
msgstr "å…¬è¯ï¼šæœªæŒ‡å®š Apple ID 密ç ã€‚"
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "无效的包短å称。"
@@ -14066,6 +14271,27 @@ msgstr "宽幅 310x150 Logo 图片尺寸无效(应为 310x150)。"
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "å¯åŠ¨ç”»é¢å›¾ç‰‡å°ºå¯¸æ— æ•ˆï¼ˆåº”为 620x300)。"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "路径无效。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "æ‰©å±•åæ— æ•ˆã€‚"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "äº§å“ GUID 无效。"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14211,14 +14437,14 @@ msgstr ""
"ParallaxLayer 类型的节点必须作为 ParallaxBackground çš„å­èŠ‚ç‚¹æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/2d/particles_2d.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles2D\" toolbar option for this purpose."
msgstr ""
"基于 GPU 的粒å­ä¸å— GLES2 视频驱动程åºçš„æ”¯æŒã€‚\n"
-"改为使用 CPUParticles2D 节点。为此,å¯ä»¥ä½¿ç”¨ “转æ¢ä¸º CPUParticles†选项。"
+"改为使用 CPUParticles2D 节点。为此,å¯ä»¥ä½¿ç”¨å·¥å…·æ ä¸Šçš„“转æ¢ä¸º "
+"CPUParticles2Dâ€é€‰é¡¹ã€‚"
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14228,6 +14454,10 @@ msgid ""
"You can use the \"Convert to CPUParticles2D\" toolbar option for this "
"purpose."
msgstr ""
+"在 macOS 上,渲染 Particles2D 比 CPUParticles2D è¦æ…¢ä¸Šå¾ˆå¤šï¼Œå› ä¸ºå˜æ¢å馈是在 "
+"CPU ä¸Šå®žçŽ°çš„ï¼Œè€Œä¸æ˜¯ GPU。\n"
+"以 macOS 为目标时,请考虑使用 CPUParticles2D。\n"
+"为此,å¯ä»¥ä½¿ç”¨å·¥å…·æ ä¸Šçš„“转æ¢ä¸º CPUParticles2Dâ€é€‰é¡¹ã€‚"
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -14459,14 +14689,14 @@ msgid "Only uniform scales are supported."
msgstr "仅支æŒç»Ÿä¸€çš„缩放。"
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"基于 GPU 的粒å­ä¸å— GLES2 视频驱动程åºçš„æ”¯æŒã€‚\n"
-"改为使用 CPUParticles 节点。为此,您å¯ä»¥ä½¿ç”¨ “转æ¢ä¸º CPUParticles†选项。"
+"改为使用 CPUParticles 节点。为此,å¯ä»¥ä½¿ç”¨å·¥å…·æ ä¸Šçš„“转æ¢ä¸º CPUParticlesâ€é€‰"
+"项。"
#: scene/3d/particles.cpp
msgid ""
@@ -14475,6 +14705,10 @@ msgid ""
"Consider using CPUParticles instead when targeting macOS.\n"
"You can use the \"Convert to CPUParticles\" toolbar option for this purpose."
msgstr ""
+"在 macOS 上,渲染 Particles 比 CPUParticles è¦æ…¢ä¸Šå¾ˆå¤šï¼Œå› ä¸ºå˜æ¢å馈是在 CPU "
+"ä¸Šå®žçŽ°çš„ï¼Œè€Œä¸æ˜¯ GPU。\n"
+"以 macOS 为目标时,请考虑使用 CPUParticles。\n"
+"为此,å¯ä»¥ä½¿ç”¨å·¥å…·æ ä¸Šçš„“转æ¢ä¸º CPUParticlesâ€é€‰é¡¹ã€‚"
#: scene/3d/particles.cpp
msgid ""
@@ -14664,8 +14898,8 @@ 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 æä¾›è½¦è½®ç³»ç»Ÿçš„。请将它用作 VehicleBody çš„å­"
+"节点。"
#: scene/3d/world_environment.cpp
msgid ""
@@ -14733,14 +14967,15 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "该节点已废弃。请使用 AnimationTree 代替。"
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"颜色:#%s\n"
"鼠标左键:设置颜色\n"
-"é¼ æ ‡å³é”®ï¼šåˆ é™¤é¢„设"
+"é¼ æ ‡å³é”®ï¼šç§»é™¤é¢„设"
#: scene/gui/color_picker.cpp
msgid "Pick a color from the editor window."
@@ -14776,8 +15011,8 @@ 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†因此将ä¸ä¼šæ˜¾ç¤ºé«˜äº®å·¥å…·æç¤ºã€‚å°† "
-"Mouse Filter 设置为 “Stop†或 “Pass†å¯ä¿®æ­£æ­¤é—®é¢˜ã€‚"
+"由于该控件的 Mouse Filter 设置为“Ignoreâ€å› æ­¤å°†ä¸ä¼šæ˜¾ç¤ºé«˜äº®å·¥å…·æç¤ºã€‚å°† Mouse "
+"Filter 设置为“Stopâ€æˆ–“Passâ€å¯ä¿®æ­£æ­¤é—®é¢˜ã€‚"
#: scene/gui/dialogs.cpp
msgid "Alert!"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index a6ee771fa8..3e58cca1e2 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -538,8 +538,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1424,7 +1424,7 @@ msgid "Bus Options"
msgstr "é¸é …"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "å†è£½"
@@ -2260,8 +2260,8 @@ msgstr "æè¿°ï¼š"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -3361,7 +3361,12 @@ msgstr "連續"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Update When Changed"
+msgid "Update All Changes"
+msgstr "當改變時更新"
+
+#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
msgstr "當改變時更新"
#: editor/editor_node.cpp
@@ -4155,6 +4160,14 @@ msgstr "å字嫿œ‰ç„¡æ•ˆå­—符。"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4274,7 +4287,7 @@ msgstr ""
msgid "Sort by First Modified"
msgstr ""
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "å†è£½..."
@@ -5144,19 +5157,19 @@ msgid "Rename Animation"
msgstr "釿–°å‘½åå‹•ç•«"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Blend Next Changed"
+msgid "Duplicate Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Change Blend Time"
+msgid "Blend Next Changed"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Load Animation"
+msgid "Change Blend Time"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
+msgid "Load Animation"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
@@ -13121,6 +13134,16 @@ msgstr ""
msgid "Set Occluder Sphere Position"
msgstr "åªé™é¸ä¸­"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "åªé™é¸ä¸­"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "åªé™é¸ä¸­"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr ""
@@ -14507,10 +14530,6 @@ msgstr ""
msgid "Invalid Identifier:"
msgstr "無效字型"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr ""
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr ""
@@ -14559,17 +14578,197 @@ msgstr "無法新增資料夾"
msgid "Error starting HTTP server:"
msgstr "儲存TileSet時出ç¾éŒ¯èª¤ï¼"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "無效å稱"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, can't load."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "無法新增資料夾"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "有效的路徑"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "資æºåŠ è¼‰å¤±æ•—ã€‚"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "資æºåŠ è¼‰å¤±æ•—ã€‚"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "無效副檔å"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "無效副檔å"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "找ä¸åˆ°!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "正在建立縮圖"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr "無法新增資料夾"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "無效字型"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+msgid "Notarization: Code signing is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr ""
#: platform/osx/export/export.cpp
@@ -14580,6 +14779,69 @@ msgstr ""
msgid "Notarization: Apple ID password not specified."
msgstr ""
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
#, fuzzy
msgid "Invalid package short name."
@@ -14638,6 +14900,27 @@ msgstr ""
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "有效的路徑"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "無效副檔å"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "無效字型"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14990,8 +15273,8 @@ msgstr ""
#: scene/3d/particles.cpp
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
#: scene/3d/particles.cpp
@@ -15235,7 +15518,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index ba318ee632..e58704257e 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -28,13 +28,14 @@
# meowmeowmeowcat <meowmeowcat1211@gmail.com>, 2021.
# anthonychen <anton1554970211@126.com>, 2021.
# Chia-Hsiang Cheng <cche0109@student.monash.edu>, 2021.
+# 曹æ©é€¢ <nelson22768384@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-12-14 15:28+0000\n"
-"Last-Translator: anthonychen <anton1554970211@126.com>\n"
+"PO-Revision-Date: 2022-02-12 21:43+0000\n"
+"Last-Translator: 曹æ©é€¢ <nelson22768384@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
"Language: zh_TW\n"
@@ -42,7 +43,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.10-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -527,8 +528,8 @@ msgid ""
"\n"
"To enable the ability to add custom tracks, navigate to the scene's import "
"settings and set\n"
-"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
-"\", then re-import.\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom "
+"Tracks\", then re-import.\n"
"Alternatively, use an import preset that imports animations to separate "
"files."
msgstr ""
@@ -1379,7 +1380,7 @@ msgid "Bus Options"
msgstr "åŒ¯æµæŽ’é¸é …"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "é‡è¤‡"
@@ -1491,7 +1492,7 @@ msgstr "無效的å稱。"
#: editor/editor_autoload_settings.cpp
msgid "Cannot begin with a digit."
-msgstr ""
+msgstr "無法以數字開頭。"
#: editor/editor_autoload_settings.cpp
msgid "Valid characters:"
@@ -2166,8 +2167,8 @@ msgstr "方法說明"
#: editor/editor_help.cpp
msgid ""
-"There is currently no description for this method. Please help us by [color="
-"$color][url=$url]contributing one[/url][/color]!"
+"There is currently no description for this method. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
"è©²æ–¹æ³•ç›®å‰æ²’有說明。請幫我們[color=$color][url=$url]è²¢ç»ä¸€å€‹[/url][/color]ï¼"
@@ -3241,10 +3242,16 @@ msgid "Update Continuously"
msgstr "æŒçºŒæ›´æ–°"
#: editor/editor_node.cpp
-msgid "Update When Changed"
+#, fuzzy
+msgid "Update All Changes"
msgstr "更改時更新"
#: editor/editor_node.cpp
+#, fuzzy
+msgid "Update Vital Changes"
+msgstr "æè³ªè®Šæ›´ï¼š"
+
+#: editor/editor_node.cpp
msgid "Hide Update Spinner"
msgstr "éš±è—æ›´æ–°æ—‹è½‰åœ–"
@@ -3991,6 +3998,14 @@ msgstr "å稱包å«ç„¡æ•ˆå­—元。"
#: editor/filesystem_dock.cpp
msgid ""
+"This file extension is not recognized by the editor.\n"
+"If you want to rename it anyway, use your operating system's file manager.\n"
+"After renaming to an unknown extension, the file won't be shown in the "
+"editor anymore."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
"The following files or folders conflict with items in the target location "
"'%s':\n"
"\n"
@@ -4108,7 +4123,7 @@ msgstr "按最後修改時間排åº"
msgid "Sort by First Modified"
msgstr "按最早修改時間排åº"
-#: editor/filesystem_dock.cpp
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate..."
msgstr "é‡è¤‡..."
@@ -4906,6 +4921,10 @@ msgid "Rename Animation"
msgstr "釿–°å‘½åå‹•ç•«"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr "é‡è¤‡å‹•ç•«"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
msgstr "æ··åˆä¸‹ä¸€å€‹æ›´æ”¹"
@@ -4918,10 +4937,6 @@ msgid "Load Animation"
msgstr "載入動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Duplicate Animation"
-msgstr "é‡è¤‡å‹•ç•«"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to copy!"
msgstr "ç„¡å‹•ç•«å¯è¤‡è£½ï¼"
@@ -12558,6 +12573,16 @@ msgstr "è¨­å®šé®æ“‹çƒé«”åŠå¾‘"
msgid "Set Occluder Sphere Position"
msgstr "è¨­å®šé®æ“‹çƒé«”ä½ç½®"
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Polygon Point Position"
+msgstr "è¨­å®šå…¥å£æŽ§åˆ¶é»žä½ç½®"
+
+#: editor/spatial_editor_gizmos.cpp
+#, fuzzy
+msgid "Set Occluder Hole Point Position"
+msgstr "設定曲線控制點ä½ç½®"
+
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
msgstr "更改圓柱體åŠå¾‘"
@@ -13906,10 +13931,6 @@ msgstr "尚未設定 App Store Team ID - 無法設定專案。"
msgid "Invalid Identifier:"
msgstr "無效的識別符:"
-#: platform/iphone/export/export.cpp
-msgid "Required icon is not specified in the preset."
-msgstr "必須在é è¨­è¨­å®šä¸­æŒ‡å®šå¿…填圖示。"
-
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
msgstr "åœæ­¢ HTTP 伺æœå™¨"
@@ -13950,16 +13971,202 @@ msgstr "無法建立HTTP伺æœå™¨ç›®éŒ„:"
msgid "Error starting HTTP server:"
msgstr "啟動HTTP伺æœå™¨æ™‚發生錯誤:"
+#: platform/osx/export/codesign.cpp
+msgid "Can't get filesystem access."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to get Info.plist hash."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, no exe name."
+msgstr "無效的專案å稱。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Invalid Info.plist, no bundle id."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid Info.plist, can't load."
+msgstr "無效的幾何圖形,無法建立多邊形。"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to create \"%s\" subfolder."
+msgstr "無法新增資料夾。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to extract thin binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid binary format."
+msgstr "無效的基礎路徑。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Already signed!"
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to process nested resources."
+msgstr "加載資æºå¤±æ•—。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create _CodeSignature subfolder."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Failed to get CodeResources hash."
+msgstr "加載資æºå¤±æ•—。"
+
+#: platform/osx/export/codesign.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid entitlements file."
+msgstr "無效的副檔å。"
+
+#: platform/osx/export/codesign.cpp
+#, fuzzy
+msgid "Invalid executable file."
+msgstr "無效的副檔å。"
+
+#: platform/osx/export/codesign.cpp
+msgid "Can't resize signature load command."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Failed to create fat binary."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown bundle type."
+msgstr ""
+
+#: platform/osx/export/codesign.cpp
+msgid "Unknown object type."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Note: The notarization process generally takes less than an hour. When the "
+"process is completed, you'll receive an email."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"You can check progress manually by opening a Terminal and running the "
+"following command:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Run the following command to staple the notarization ticket to the exported "
+"application (optional):"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "No identity found."
+msgstr "未發ç¾ä»»ä½•圖示。"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Creating app bundle"
+msgstr "正在建立縮圖"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export:"
+msgstr ""
+"找ä¸åˆ°æ¨£æ¿APK以匯出:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Relative symlinks are not supported on this OS, the exported project might "
+"be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Requested template binary '%s' not found. It might be missing from your "
+"template archive."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making PKG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Ad-hoc signed applications require the 'Disable Library Validation' "
+"entitlement to load dynamic libraries."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Code signing DMG"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Making ZIP"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Notarization requires the app to be archived first, select the DMG or ZIP "
+"export format instead."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Sending archive for notarization"
+msgstr ""
+
#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "無效的æ†ç¶è­˜åˆ¥ç¬¦ï¼š"
#: platform/osx/export/export.cpp
-msgid "Notarization: code signing required."
+msgid ""
+"Warning: Built-in \"codesign\" is selected in the Editor Settings. Code "
+"signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Xcode command line tools are not installed, using built-in "
+"\"codesign\". Code signing is limited to ad-hoc signature only."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Notarization with an ad-hoc signature is not supported."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Code signing is required for notarization."
msgstr "公證:需è¦ç¨‹å¼ç¢¼ç°½ç½²ã€‚"
#: platform/osx/export/export.cpp
-msgid "Notarization: hardened runtime required."
+#, fuzzy
+msgid "Notarization: Hardened runtime is required for notarization."
+msgstr "公證:需è¦å¼·åŒ–執行階段(Hardened Runtime)。"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization: Timestamp runtime is required for notarization."
msgstr "公證:需è¦å¼·åŒ–執行階段(Hardened Runtime)。"
#: platform/osx/export/export.cpp
@@ -13970,6 +14177,69 @@ msgstr "公證:未指定Apple IDå稱。"
msgid "Notarization: Apple ID password not specified."
msgstr "公證:未指定Apple ID密碼。"
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is disabled. The exported project will be blocked by "
+"Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Code signing is disabled. The exported project will not run on Macs with "
+"enabled Gatekeeper and Apple Silicon powered Macs."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and will be "
+"disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Timestamping is not compatible with ad-hoc signature, and will be disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Warning: Notarization is not supported from this OS. The exported project "
+"will be blocked by Gatekeeper if it's downloaded from an unknown source."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Microphone access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Camera access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Location information access is enabled, but usage description is "
+"not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Address book access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Calendar access is enabled, but usage description is not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Privacy: Photo library access is enabled, but usage description is not "
+"specified."
+msgstr ""
+
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
msgstr "無效的套件段å稱。"
@@ -14022,6 +14292,27 @@ msgstr "無效的寬 310x150 LOGO 圖片尺寸(需為 310x150)。"
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "無效的啟動畫é¢åœ–片尺寸(應為 620x300)。"
+#: platform/windows/export/export.cpp
+msgid ""
+"The rcedit tool must be configured in the Editor Settings (Export > Windows "
+"> Rcedit) to change the icon or app information data."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid icon path:"
+msgstr "無效的路徑。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid file version:"
+msgstr "無效的副檔å。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid product version:"
+msgstr "ç„¡æ•ˆçš„ç”¢å“ GUID。"
+
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
@@ -14417,8 +14708,8 @@ msgstr "僅支æ´å‡ç­‰ç¸®æ”¾ã€‚"
#, fuzzy
msgid ""
"GPU-based particles are not supported by the GLES2 video driver.\n"
-"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
-"\" toolbar option for this purpose."
+"Use the CPUParticles node instead. You can use the \"Convert to "
+"CPUParticles\" toolbar option for this purpose."
msgstr ""
"GLES2 視訊驅動程å¼ä¸æ”¯æ´åŸºæ–¼ GPU 的粒å­ã€‚\n"
"請改為使用 CPUParticles 節點。å¯ä½¿ç”¨ã€ŒConvert to CPUParticlesã€é¸é …。"
@@ -14688,9 +14979,10 @@ msgid "This node has been deprecated. Use AnimationTree instead."
msgstr "è©²ç¯€é»žå·²åœæ­¢ç¶­è­·ï¼Œè«‹æ”¹ç‚ºä½¿ç”¨ AnimationTree。"
#: scene/gui/color_picker.cpp
+#, fuzzy
msgid ""
"Color: #%s\n"
-"LMB: Set color\n"
+"LMB: Apply color\n"
"RMB: Remove preset"
msgstr ""
"色彩: #%s\n"
diff --git a/main/main.cpp b/main/main.cpp
index 21199fe227..da79020bac 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -425,6 +425,7 @@ Error Main::test_setup() {
ResourceLoader::load_path_remaps();
register_scene_types();
+ register_driver_types();
#ifdef TOOLS_ENABLED
ClassDB::set_current_api(ClassDB::API_EDITOR);
@@ -435,7 +436,6 @@ Error Main::test_setup() {
register_platform_apis();
register_module_types();
- register_driver_types();
// Theme needs modules to be initialized so that sub-resources can be loaded.
initialize_theme();
@@ -458,13 +458,13 @@ void Main::test_cleanup() {
ResourceLoader::remove_custom_loaders();
ResourceSaver::remove_custom_savers();
- unregister_driver_types();
#ifdef TOOLS_ENABLED
EditorNode::unregister_editor_types();
#endif
unregister_module_types();
unregister_platform_apis();
+ unregister_driver_types();
unregister_scene_types();
unregister_server_types();
@@ -487,6 +487,7 @@ void Main::test_cleanup() {
}
unregister_core_driver_types();
+ unregister_core_extensions();
unregister_core_types();
OS::get_singleton()->finalize_core();
@@ -634,7 +635,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
continue;
}
#endif
-
List<String>::Element *N = I->next();
if (I->get() == "-h" || I->get() == "--help" || I->get() == "/?") { // display help
@@ -1157,6 +1157,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
// Initialize user data dir.
OS::get_singleton()->ensure_user_data_dir();
+ register_core_extensions(); // core extensions must be registered after globals setup and before display
+
ResourceUID::get_singleton()->load_from_cache(); // load UUIDs from cache.
GLOBAL_DEF("memory/limits/multithreaded_server/rid_pool_prealloc", 60);
@@ -1272,7 +1274,6 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->set_cmdline(execpath, main_args);
- register_core_extensions(); //before display
// possibly be worth changing the default from vulkan to something lower spec,
// for the project manager, depending on how smooth the fallback is.
GLOBAL_DEF_RST("rendering/driver/driver_name", "vulkan");
@@ -1529,6 +1530,7 @@ error:
}
unregister_core_driver_types();
+ unregister_core_extensions();
unregister_core_types();
OS::get_singleton()->_cmdline.clear();
@@ -1888,6 +1890,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
register_scene_types();
+ MAIN_PRINT("Main: Load Driver Types");
+
+ register_driver_types();
+
#ifdef TOOLS_ENABLED
ClassDB::set_current_api(ClassDB::API_EDITOR);
EditorNode::register_editor_types();
@@ -1923,14 +1929,12 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
camera_server = CameraServer::create();
- MAIN_PRINT("Main: Load Physics, Drivers, Scripts");
+ MAIN_PRINT("Main: Load Physics");
initialize_physics();
initialize_navigation_server();
register_server_singletons();
- register_driver_types();
-
// This loads global classes, so it must happen before custom loaders and savers are registered
ScriptServer::init_languages();
@@ -1961,6 +1965,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
return OK;
}
+String Main::get_rendering_driver_name() {
+ return rendering_driver;
+}
+
// everything the main loop needs to know about frame timings
static MainTimerSync main_timer_sync;
@@ -2810,8 +2818,6 @@ void Main::cleanup(bool p_force) {
xr_server->set_primary_interface(Ref<XRInterface>());
}
- unregister_driver_types();
-
#ifdef TOOLS_ENABLED
EditorNode::unregister_editor_types();
#endif
@@ -2820,6 +2826,7 @@ void Main::cleanup(bool p_force) {
unregister_module_types();
unregister_platform_apis();
+ unregister_driver_types();
unregister_scene_types();
unregister_server_types();
@@ -2888,6 +2895,7 @@ void Main::cleanup(bool p_force) {
memdelete(message_queue);
unregister_core_driver_types();
+ unregister_core_extensions();
unregister_core_types();
OS::get_singleton()->finalize_core();
diff --git a/main/main.h b/main/main.h
index cec31545c7..14a8fb4147 100644
--- a/main/main.h
+++ b/main/main.h
@@ -49,6 +49,7 @@ public:
static int test_entrypoint(int argc, char *argv[], bool &tests_need_run);
static Error setup(const char *execpath, int argc, char *argv[], bool p_second_phase = true);
static Error setup2(Thread::ID p_main_tid_override = 0);
+ static String get_rendering_driver_name();
#ifdef TESTS_ENABLED
static Error test_setup();
static void test_cleanup();
diff --git a/modules/basis_universal/register_types.cpp b/modules/basis_universal/register_types.cpp
index 12f9c6fc00..a3c662ba08 100644
--- a/modules/basis_universal/register_types.cpp
+++ b/modules/basis_universal/register_types.cpp
@@ -32,7 +32,6 @@
#include "core/os/os.h"
#include "servers/rendering_server.h"
-#include "texture_basisu.h"
#ifdef TOOLS_ENABLED
#include <encoder/basisu_comp.h>
@@ -272,7 +271,6 @@ void register_basis_universal_types() {
Image::basis_universal_packer = basis_universal_packer;
#endif
Image::basis_universal_unpacker = basis_universal_unpacker;
- //GDREGISTER_CLASS(TextureBasisU);
}
void unregister_basis_universal_types() {
diff --git a/modules/basis_universal/texture_basisu.cpp b/modules/basis_universal/texture_basisu.cpp
deleted file mode 100644
index 1ac4df8d19..0000000000
--- a/modules/basis_universal/texture_basisu.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*************************************************************************/
-/* texture_basisu.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* https://godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#include "texture_basisu.h"
-#if 0
-#include "core/os/os.h"
-
-#ifdef TOOLS_ENABLED
-#include <encoder/basisu_comp.h>
-#endif
-
-#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;
-};
-
-
-void TextureBasisU::set_basisu_data(const Vector<uint8_t>& p_data) {
-
-#ifdef TOOLS_ENABLED
- data = p_data;
-#endif
-
- const uint8_t* r = p_data.ptr();
- const void* ptr = r.ptr();
- int size = p_data.size();
-
- basist::transcoder_texture_format format;
- 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;
- };
-
- basist::basisu_transcoder tr(nullptr);
-
- ERR_FAIL_COND(!tr.validate_header(ptr, size));
-
- basist::basisu_image_info info;
- tr.get_image_info(ptr, size, info, 0);
- tex_size = Size2(info.m_width, info.m_height);
-
- int block_size = basist::basis_get_bytes_per_block(format);
- Vector<uint8_t> gpudata;
- gpudata.resize(info.m_total_blocks * block_size);
-
- {
- uint8_t* w = gpudata.ptrw();
- uint8_t* dst = w.ptr();
- for (int i=0; i<gpudata.size(); i++)
- dst[i] = 0x00;
-
- 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);
-
- bool ret = tr.transcode_image_level(ptr, size, 0, i, dst + ofs, level.m_total_blocks - i, format);
- if (!ret) {
- printf("failed! on level %i\n", i);
- break;
- };
-
- ofs += level.m_total_blocks * block_size;
- };
- };
-
- Ref<Image> img;
- img.instantiate();
- img->create(info.m_width, info.m_height, info.m_total_levels > 1, imgfmt, gpudata);
-
- RenderingServer::get_singleton()->texture_allocate(texture, tex_size.x, tex_size.y, 0, img->get_format(), RS::TEXTURE_TYPE_2D, flags);
- RenderingServer::get_singleton()->texture_set_data(texture, img);
-};
-
-Error TextureBasisU::import(const Ref<Image>& p_img) {
-
-#ifdef TOOLS_ENABLED
-
- Vector<uint8_t> budata;
-
- {
- Image::Format format = p_img->get_format();
- if (format != Image::FORMAT_RGB8 && format != Image::FORMAT_RGBA8) {
- ERR_FAIL_V(ERR_INVALID_PARAMETER);
- return ERR_INVALID_PARAMETER;
- };
-
- Ref<Image> copy = p_img->duplicate();
- if (format == Image::FORMAT_RGB8)
- copy->convert(Image::FORMAT_RGBA8);
-
- basisu::image buimg(p_img->get_width(), p_img->get_height());
- int size = p_img->get_width() * p_img->get_height() * 4;
-
- Vector<uint8_t> vec = copy->get_data();
- {
- const uint8_t* r = vec.ptr();
- memcpy(buimg.get_ptr(), r.ptr(), size);
- };
-
- basisu::basis_compressor_params params;
- params.m_max_endpoint_clusters = 512;
- params.m_max_selector_clusters = 512;
- params.m_multithreading = true;
-
- basisu::job_pool jpool(1);
- params.m_pJob_pool = &jpool;
-
- params.m_mip_gen = p_img->get_mipmap_count() > 0;
- params.m_source_images.push_back(buimg);
-
- basisu::basis_compressor c;
- c.init(params);
-
- int buerr = c.process();
- if (buerr != basisu::basis_compressor::cECSuccess) {
- ERR_FAIL_V(ERR_INVALID_PARAMETER);
- return ERR_INVALID_PARAMETER;
- };
-
- const basisu::uint8_vec& buvec = c.get_output_basis_file();
- budata.resize(buvec.size());
-
- {
- uint8_t* w = budata.ptrw();
- memcpy(w.ptr(), &buvec[0], budata.size());
- };
- };
-
- set_basisu_data(budata);
-
- return OK;
-#else
-
- return ERR_UNAVAILABLE;
-#endif
-};
-
-
-Vector<uint8_t> TextureBasisU::get_basisu_data() const {
- return data;
-};
-
-TextureBasisU::TextureBasisU() {
- texture = RenderingServer::get_singleton()->texture_create();
-};
-
-
-TextureBasisU::~TextureBasisU() {
- RenderingServer::get_singleton()->free(texture);
-};
-
-#endif
diff --git a/modules/bullet/slider_joint_bullet.cpp b/modules/bullet/slider_joint_bullet.cpp
index 61c3b3b0a3..b06cdeaa6a 100644
--- a/modules/bullet/slider_joint_bullet.cpp
+++ b/modules/bullet/slider_joint_bullet.cpp
@@ -334,7 +334,6 @@ real_t SliderJointBullet::getMaxAngMotorForce() {
real_t SliderJointBullet::getLinearPos() {
return sliderConstraint->getLinearPos();
- ;
}
void SliderJointBullet::set_param(PhysicsServer3D::SliderJointParam p_param, real_t p_value) {
diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp
index fbddedbe55..39e4751be3 100644
--- a/modules/csg/csg_shape.cpp
+++ b/modules/csg/csg_shape.cpp
@@ -491,61 +491,63 @@ Vector<Face3> CSGShape3D::get_faces(uint32_t p_usage_flags) const {
}
void CSGShape3D::_notification(int p_what) {
- if (p_what == NOTIFICATION_ENTER_TREE) {
- Node *parentn = get_parent();
- if (parentn) {
- parent = Object::cast_to<CSGShape3D>(parentn);
- if (parent) {
- set_base(RID());
- root_mesh.unref();
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ Node *parentn = get_parent();
+ if (parentn) {
+ parent = Object::cast_to<CSGShape3D>(parentn);
+ if (parent) {
+ set_base(RID());
+ root_mesh.unref();
+ }
}
- }
- if (use_collision && is_root_shape()) {
- root_collision_shape.instantiate();
- root_collision_instance = PhysicsServer3D::get_singleton()->body_create();
- PhysicsServer3D::get_singleton()->body_set_mode(root_collision_instance, PhysicsServer3D::BODY_MODE_STATIC);
- PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform());
- PhysicsServer3D::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid());
- PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world_3d()->get_space());
- PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
- set_collision_layer(collision_layer);
- set_collision_mask(collision_mask);
- }
+ if (use_collision && is_root_shape()) {
+ root_collision_shape.instantiate();
+ root_collision_instance = PhysicsServer3D::get_singleton()->body_create();
+ PhysicsServer3D::get_singleton()->body_set_mode(root_collision_instance, PhysicsServer3D::BODY_MODE_STATIC);
+ PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform());
+ PhysicsServer3D::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid());
+ PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world_3d()->get_space());
+ PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
+ set_collision_layer(collision_layer);
+ set_collision_mask(collision_mask);
+ }
- _make_dirty();
- }
+ _make_dirty();
+ } break;
- if (p_what == NOTIFICATION_TRANSFORM_CHANGED) {
- if (use_collision && is_root_shape() && root_collision_instance.is_valid()) {
- PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform());
- }
- }
+ case NOTIFICATION_TRANSFORM_CHANGED: {
+ if (use_collision && is_root_shape() && root_collision_instance.is_valid()) {
+ PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform());
+ }
+ } break;
- if (p_what == NOTIFICATION_LOCAL_TRANSFORM_CHANGED) {
- if (parent) {
- parent->_make_dirty();
- }
- }
+ case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
+ if (parent) {
+ parent->_make_dirty();
+ }
+ } break;
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (parent) {
- parent->_make_dirty();
- }
- }
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (parent) {
+ parent->_make_dirty();
+ }
+ } break;
- if (p_what == NOTIFICATION_EXIT_TREE) {
- if (parent) {
- parent->_make_dirty();
- }
- parent = nullptr;
+ case NOTIFICATION_EXIT_TREE: {
+ if (parent) {
+ parent->_make_dirty();
+ }
+ parent = nullptr;
- if (use_collision && is_root_shape() && root_collision_instance.is_valid()) {
- PhysicsServer3D::get_singleton()->free(root_collision_instance);
- root_collision_instance = RID();
- root_collision_shape.unref();
- }
- _make_dirty();
+ if (use_collision && is_root_shape() && root_collision_instance.is_valid()) {
+ PhysicsServer3D::get_singleton()->free(root_collision_instance);
+ root_collision_instance = RID();
+ root_collision_shape.unref();
+ }
+ _make_dirty();
+ } break;
}
}
diff --git a/modules/fbx/data/fbx_material.cpp b/modules/fbx/data/fbx_material.cpp
index bc638244d8..36e20df3a9 100644
--- a/modules/fbx/data/fbx_material.cpp
+++ b/modules/fbx/data/fbx_material.cpp
@@ -426,7 +426,7 @@ Ref<StandardMaterial3D> FBXMaterial::import_material(ImportState &state) {
// meaning is that approx equal to zero is disabled not actually zero. ;)
if (real_value && Math::is_zero_approx(real_value->Value())) {
print_verbose("clearcoat real value: " + rtos(real_value->Value()));
- spatial_material->set_clearcoat_gloss(1.0 - real_value->Value());
+ spatial_material->set_clearcoat_roughness(real_value->Value());
} else {
print_error("unsupported value type for clearcoat gloss");
}
diff --git a/modules/fbx/fbx_parser/FBXMeshGeometry.cpp b/modules/fbx/fbx_parser/FBXMeshGeometry.cpp
index b3956af762..591f2e5503 100644
--- a/modules/fbx/fbx_parser/FBXMeshGeometry.cpp
+++ b/modules/fbx/fbx_parser/FBXMeshGeometry.cpp
@@ -212,32 +212,6 @@ MeshGeometry::MeshGeometry(uint64_t id, const ElementPtr element, const std::str
m_normals = resolve_vertex_data_array<Vector3>(layer_scope, MappingInformationType, ReferenceInformationType, "Normals");
} else if (layer_type_name == "LayerElementColor") {
m_colors = resolve_vertex_data_array<Color>(layer_scope, MappingInformationType, ReferenceInformationType, "Colors", "ColorIndex");
- // NOTE: this is a useful sanity check to ensure you're getting any color data which is not default.
- // const Color first_color_check = m_colors.data[0];
- // bool colors_are_all_the_same = true;
- // size_t i = 1;
- // for(i = 1; i < m_colors.data.size(); i++)
- // {
- // const Color current_color = m_colors.data[i];
- // if(current_color.is_equal_approx(first_color_check))
- // {
- // continue;
- // }
- // else
- // {
- // colors_are_all_the_same = false;
- // break;
- // }
- // }
- //
- // if(colors_are_all_the_same)
- // {
- // print_error("Color serialisation is not working for vertex colors some should be different in the test asset.");
- // }
- // else
- // {
- // print_verbose("Color array has unique colors at index: " + itos(i));
- // }
}
}
}
diff --git a/modules/gdnative/gdnative/aabb.cpp b/modules/gdnative/gdnative/aabb.cpp
index 82aa7215b2..b8909433cc 100644
--- a/modules/gdnative/gdnative/aabb.cpp
+++ b/modules/gdnative/gdnative/aabb.cpp
@@ -31,6 +31,7 @@
#include "gdnative/aabb.h"
#include "core/math/aabb.h"
+#include "core/os/memory.h"
static_assert(sizeof(godot_aabb) == sizeof(AABB), "AABB size mismatch");
diff --git a/modules/gdnative/gdnative/plane.cpp b/modules/gdnative/gdnative/plane.cpp
index 9ac5cfb3b7..41fa0da5db 100644
--- a/modules/gdnative/gdnative/plane.cpp
+++ b/modules/gdnative/gdnative/plane.cpp
@@ -31,6 +31,7 @@
#include "gdnative/plane.h"
#include "core/math/plane.h"
+#include "core/os/memory.h"
static_assert(sizeof(godot_plane) == sizeof(Plane), "Plane size mismatch");
diff --git a/modules/gdnative/gdnative/vector3.cpp b/modules/gdnative/gdnative/vector3.cpp
index 26e94d7e5c..37c88c3cca 100644
--- a/modules/gdnative/gdnative/vector3.cpp
+++ b/modules/gdnative/gdnative/vector3.cpp
@@ -31,6 +31,8 @@
#include "gdnative/vector3.h"
#include "core/math/vector3.h"
+#include "core/math/vector3i.h"
+#include "core/os/memory.h"
static_assert(sizeof(godot_vector3) == sizeof(Vector3), "Vector3 size mismatch");
static_assert(sizeof(godot_vector3i) == sizeof(Vector3i), "Vector3i size mismatch");
diff --git a/modules/gdnative/gdnative_library_singleton_editor.cpp b/modules/gdnative/gdnative_library_singleton_editor.cpp
index e0079f93ee..ce1f41bdf1 100644
--- a/modules/gdnative/gdnative_library_singleton_editor.cpp
+++ b/modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -183,10 +183,12 @@ void GDNativeLibrarySingletonEditor::_item_edited() {
}
void GDNativeLibrarySingletonEditor::_notification(int p_what) {
- if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
- if (is_visible_in_tree()) {
- _update_libraries();
- }
+ switch (p_what) {
+ case NOTIFICATION_VISIBILITY_CHANGED: {
+ if (is_visible_in_tree()) {
+ _update_libraries();
+ }
+ } break;
}
}
diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp
index 5d5414c694..95976a8827 100644
--- a/modules/gdnative/nativescript/nativescript.cpp
+++ b/modules/gdnative/nativescript/nativescript.cpp
@@ -763,17 +763,19 @@ Variant NativeScriptInstance::call(const StringName &p_method, const Variant **p
return Variant();
}
-void NativeScriptInstance::notification(int p_notification) {
+void NativeScriptInstance::notification(int p_what) {
#ifdef DEBUG_ENABLED
- if (p_notification == MainLoop::NOTIFICATION_CRASH) {
- if (current_method_call != StringName()) {
- ERR_PRINT("NativeScriptInstance detected crash on method: " + current_method_call);
- current_method_call = "";
- }
+ switch (p_what) {
+ case MainLoop::NOTIFICATION_CRASH: {
+ if (current_method_call != StringName()) {
+ ERR_PRINT("NativeScriptInstance detected crash on method: " + current_method_call);
+ current_method_call = "";
+ }
+ } break;
}
#endif
- Variant value = p_notification;
+ Variant value = p_what;
const Variant *args[1] = { &value };
Callable::CallError error;
call("_notification", args, 1, error);
@@ -1639,7 +1641,6 @@ void NativeReloadNode::_bind_methods() {
void NativeReloadNode::_notification(int p_what) {
#ifdef TOOLS_ENABLED
-
switch (p_what) {
case NOTIFICATION_APPLICATION_FOCUS_OUT: {
if (unloaded) {
@@ -1672,7 +1673,6 @@ void NativeReloadNode::_notification(int p_what) {
}
unloaded = true;
-
} break;
case NOTIFICATION_APPLICATION_FOCUS_IN: {
@@ -1736,10 +1736,7 @@ void NativeReloadNode::_notification(int p_what) {
for (Set<StringName>::Element *R = libs_to_remove.front(); R; R = R->next()) {
NSL->library_gdnatives.erase(R->get());
}
-
} break;
- default: {
- };
}
#endif
}
diff --git a/modules/gdnative/nativescript/nativescript.h b/modules/gdnative/nativescript/nativescript.h
index 6c47d35abc..2d01de5832 100644
--- a/modules/gdnative/nativescript/nativescript.h
+++ b/modules/gdnative/nativescript/nativescript.h
@@ -209,7 +209,7 @@ public:
virtual void get_method_list(List<MethodInfo> *p_list) const;
virtual bool has_method(const StringName &p_method) const;
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error);
- virtual void notification(int p_notification);
+ virtual void notification(int p_what);
String to_string(bool *r_valid);
virtual Ref<Script> get_script() const;
diff --git a/modules/gdscript/editor_templates/CharacterBody2D/basic_movement.gd b/modules/gdscript/editor_templates/CharacterBody2D/basic_movement.gd
index edaccae018..34b5ba45b7 100644
--- a/modules/gdscript/editor_templates/CharacterBody2D/basic_movement.gd
+++ b/modules/gdscript/editor_templates/CharacterBody2D/basic_movement.gd
@@ -12,18 +12,18 @@ var gravity: int = ProjectSettings.get_setting("physics/2d/default_gravity")
func _physics_process(delta: float) -> void:
# Add the gravity.
if not is_on_floor():
- motion_velocity.y += gravity * delta
+ velocity.y += gravity * delta
# Handle Jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
- motion_velocity.y = JUMP_VELOCITY
+ velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var direction := Input.get_axis("ui_left", "ui_right")
if direction:
- motion_velocity.x = direction * SPEED
+ velocity.x = direction * SPEED
else:
- motion_velocity.x = move_toward(motion_velocity.x, 0, SPEED)
+ velocity.x = move_toward(velocity.x, 0, SPEED)
move_and_slide()
diff --git a/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd b/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
index e191e5451a..cbc9cf1064 100644
--- a/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
+++ b/modules/gdscript/editor_templates/CharacterBody3D/basic_movement.gd
@@ -12,21 +12,21 @@ var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta: float) -> void:
# Add the gravity.
if not is_on_floor():
- motion_velocity.y -= gravity * delta
+ velocity.y -= gravity * delta
# Handle Jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
- motion_velocity.y = JUMP_VELOCITY
+ velocity.y = JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
- motion_velocity.x = direction.x * SPEED
- motion_velocity.z = direction.z * SPEED
+ velocity.x = direction.x * SPEED
+ velocity.z = direction.z * SPEED
else:
- motion_velocity.x = move_toward(motion_velocity.x, 0, SPEED)
- motion_velocity.z = move_toward(motion_velocity.z, 0, SPEED)
+ velocity.x = move_toward(velocity.x, 0, SPEED)
+ velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index 94daba4bf6..9a79f3d016 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -646,41 +646,51 @@ void GDScriptAnalyzer::resolve_class_interface(GDScriptParser::ClassNode *p_clas
}
}
- if (member.variable->datatype_specifier != nullptr) {
- datatype = specified_type;
+ // Check if initalizer is an unset identifier (ie: a variable within scope, but declared below)
+ if (member.variable->initializer && !member.variable->initializer->get_datatype().is_set()) {
+ if (member.variable->initializer->type == GDScriptParser::Node::IDENTIFIER) {
+ GDScriptParser::IdentifierNode *initializer_identifier = static_cast<GDScriptParser::IdentifierNode *>(member.variable->initializer);
+ push_error(vformat(R"(Identifier "%s" must be declared above current variable.)", initializer_identifier->name), member.variable->initializer);
+ } else {
+ ERR_PRINT("Parser bug (please report): tried to assign unset node without an identifier.");
+ }
+ } else {
+ if (member.variable->datatype_specifier != nullptr) {
+ datatype = specified_type;
- if (member.variable->initializer != nullptr) {
- if (!is_type_compatible(datatype, member.variable->initializer->get_datatype(), true, member.variable->initializer)) {
- // Try reverse test since it can be a masked subtype.
- if (!is_type_compatible(member.variable->initializer->get_datatype(), datatype, true, member.variable->initializer)) {
- push_error(vformat(R"(Value of type "%s" cannot be assigned to a variable of type "%s".)", member.variable->initializer->get_datatype().to_string(), datatype.to_string()), member.variable->initializer);
- } else {
- // TODO: Add warning.
+ if (member.variable->initializer != nullptr) {
+ if (!is_type_compatible(datatype, member.variable->initializer->get_datatype(), true, member.variable->initializer)) {
+ // Try reverse test since it can be a masked subtype.
+ if (!is_type_compatible(member.variable->initializer->get_datatype(), datatype, true, member.variable->initializer)) {
+ push_error(vformat(R"(Value of type "%s" cannot be assigned to a variable of type "%s".)", member.variable->initializer->get_datatype().to_string(), datatype.to_string()), member.variable->initializer);
+ } else {
+ // TODO: Add warning.
+ mark_node_unsafe(member.variable->initializer);
+ member.variable->use_conversion_assign = true;
+ }
+ } else if (datatype.builtin_type == Variant::INT && member.variable->initializer->get_datatype().builtin_type == Variant::FLOAT) {
+#ifdef DEBUG_ENABLED
+ parser->push_warning(member.variable->initializer, GDScriptWarning::NARROWING_CONVERSION);
+#endif
+ }
+ if (member.variable->initializer->get_datatype().is_variant()) {
+ // TODO: Warn unsafe assign.
mark_node_unsafe(member.variable->initializer);
member.variable->use_conversion_assign = true;
}
- } else if (datatype.builtin_type == Variant::INT && member.variable->initializer->get_datatype().builtin_type == Variant::FLOAT) {
-#ifdef DEBUG_ENABLED
- parser->push_warning(member.variable->initializer, GDScriptWarning::NARROWING_CONVERSION);
-#endif
}
- if (member.variable->initializer->get_datatype().is_variant()) {
- // TODO: Warn unsafe assign.
- mark_node_unsafe(member.variable->initializer);
- member.variable->use_conversion_assign = true;
+ } else if (member.variable->infer_datatype) {
+ if (member.variable->initializer == nullptr) {
+ push_error(vformat(R"(Cannot infer the type of "%s" variable because there's no default value.)", member.variable->identifier->name), member.variable->identifier);
+ } else if (!datatype.is_set() || datatype.has_no_type()) {
+ push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value doesn't have a set type.)", member.variable->identifier->name), member.variable->initializer);
+ } else if (datatype.is_variant()) {
+ push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value is Variant. Use explicit "Variant" type if this is intended.)", member.variable->identifier->name), member.variable->initializer);
+ } else if (datatype.builtin_type == Variant::NIL) {
+ push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value is "null".)", member.variable->identifier->name), member.variable->initializer);
}
+ datatype.type_source = GDScriptParser::DataType::ANNOTATED_INFERRED;
}
- } else if (member.variable->infer_datatype) {
- if (member.variable->initializer == nullptr) {
- push_error(vformat(R"(Cannot infer the type of "%s" variable because there's no default value.)", member.variable->identifier->name), member.variable->identifier);
- } else if (!datatype.is_set() || datatype.has_no_type()) {
- push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value doesn't have a set type.)", member.variable->identifier->name), member.variable->initializer);
- } else if (datatype.is_variant()) {
- push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value is Variant. Use explicit "Variant" type if this is intended.)", member.variable->identifier->name), member.variable->initializer);
- } else if (datatype.builtin_type == Variant::NIL) {
- push_error(vformat(R"(Cannot infer the type of "%s" variable because the initial value is "null".)", member.variable->identifier->name), member.variable->initializer);
- }
- datatype.type_source = GDScriptParser::DataType::ANNOTATED_INFERRED;
}
datatype.is_constant = false;
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index f0dc830ed8..6fb95d32ca 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -1198,6 +1198,27 @@ static bool _guess_identifier_type(GDScriptParser::CompletionContext &p_context,
static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext &p_context, const GDScriptCompletionIdentifier &p_base, const StringName &p_identifier, GDScriptCompletionIdentifier &r_type);
static bool _guess_method_return_type_from_base(GDScriptParser::CompletionContext &p_context, const GDScriptCompletionIdentifier &p_base, const StringName &p_method, GDScriptCompletionIdentifier &r_type);
+static bool _is_expression_named_identifier(const GDScriptParser::ExpressionNode *p_expression, const StringName &p_name) {
+ if (p_expression) {
+ switch (p_expression->type) {
+ case GDScriptParser::Node::IDENTIFIER: {
+ const GDScriptParser::IdentifierNode *id = static_cast<const GDScriptParser::IdentifierNode *>(p_expression);
+ if (id->name == p_name) {
+ return true;
+ }
+ } break;
+ case GDScriptParser::Node::CAST: {
+ const GDScriptParser::CastNode *cn = static_cast<const GDScriptParser::CastNode *>(p_expression);
+ return _is_expression_named_identifier(cn->operand, p_name);
+ } break;
+ default:
+ break;
+ }
+ }
+
+ return false;
+}
+
static bool _guess_expression_type(GDScriptParser::CompletionContext &p_context, const GDScriptParser::ExpressionNode *p_expression, GDScriptCompletionIdentifier &r_type) {
bool found = false;
@@ -1904,6 +1925,14 @@ static bool _guess_identifier_type_from_base(GDScriptParser::CompletionContext &
return true;
} else if (init->start_line == p_context.current_line) {
return false;
+ // Detects if variable is assigned to itself
+ } else if (_is_expression_named_identifier(init, member.variable->identifier->name)) {
+ if (member.variable->initializer->get_datatype().is_set()) {
+ r_type.type = member.variable->initializer->get_datatype();
+ } else if (member.variable->get_datatype().is_set() && !member.variable->get_datatype().is_variant()) {
+ r_type.type = member.variable->get_datatype();
+ }
+ return true;
} else if (_guess_expression_type(p_context, init, r_type)) {
return true;
} else if (init->get_datatype().is_set() && !init->get_datatype().is_variant()) {
diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h
index db663ca48f..3ee664c76d 100644
--- a/modules/gdscript/gdscript_function.h
+++ b/modules/gdscript/gdscript_function.h
@@ -502,6 +502,8 @@ private:
List<StackDebug> stack_debug;
+ Variant _get_default_variant_for_data_type(const GDScriptDataType &p_data_type);
+
_FORCE_INLINE_ Variant *_get_variant(int p_address, GDScriptInstance *p_instance, Variant *p_stack, String &r_error) const;
_FORCE_INLINE_ String _get_call_error(const Callable::CallError &p_err, const String &p_where, const Variant **argptrs) const;
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index 8e4e457ec1..725b62f6d6 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -2692,12 +2692,13 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_attribute(ExpressionNode *
}
}
- attribute->is_attribute = true;
attribute->base = p_previous_operand;
if (!consume(GDScriptTokenizer::Token::IDENTIFIER, R"(Expected identifier after "." for attribute access.)")) {
return attribute;
}
+
+ attribute->is_attribute = true;
attribute->attribute = parse_identifier();
return attribute;
diff --git a/modules/gdscript/gdscript_vm.cpp b/modules/gdscript/gdscript_vm.cpp
index 95122714f9..6964f27423 100644
--- a/modules/gdscript/gdscript_vm.cpp
+++ b/modules/gdscript/gdscript_vm.cpp
@@ -123,6 +123,34 @@ static String _get_var_type(const Variant *p_var) {
}
#endif // DEBUG_ENABLED
+Variant GDScriptFunction::_get_default_variant_for_data_type(const GDScriptDataType &p_data_type) {
+ if (p_data_type.kind == GDScriptDataType::BUILTIN) {
+ if (p_data_type.builtin_type == Variant::ARRAY) {
+ Array array;
+ // Typed array.
+ if (p_data_type.has_container_element_type()) {
+ const GDScriptDataType &element_type = p_data_type.get_container_element_type();
+ array.set_typed(
+ element_type.kind == GDScriptDataType::BUILTIN ? element_type.builtin_type : Variant::OBJECT,
+ element_type.native_type,
+ element_type.script_type);
+ }
+
+ return array;
+ } else {
+ Callable::CallError ce;
+ Variant variant;
+ Variant::construct(p_data_type.builtin_type, variant, nullptr, 0, ce);
+
+ ERR_FAIL_COND_V(ce.error != Callable::CallError::CALL_OK, Variant());
+
+ return variant;
+ }
+ }
+
+ return Variant();
+}
+
String GDScriptFunction::_get_call_error(const Callable::CallError &p_err, const String &p_where, const Variant **argptrs) const {
String err_text;
@@ -428,7 +456,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
OPCODES_TABLE;
if (!_code_ptr) {
- return Variant();
+ return _get_default_variant_for_data_type(return_type);
}
r_err.error = Callable::CallError::CALL_OK;
@@ -467,11 +495,11 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
r_err.error = Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
r_err.argument = _argument_count;
- return Variant();
+ return _get_default_variant_for_data_type(return_type);
} else if (p_argcount < _argument_count - _default_arg_count) {
r_err.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
r_err.argument = _argument_count - _default_arg_count;
- return Variant();
+ return _get_default_variant_for_data_type(return_type);
} else {
defarg = _argument_count - p_argcount;
}
@@ -498,7 +526,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
r_err.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_err.argument = i;
r_err.expected = argument_types[i].kind == GDScriptDataType::BUILTIN ? argument_types[i].builtin_type : Variant::OBJECT;
- return Variant();
+ return _get_default_variant_for_data_type(return_type);
}
if (argument_types[i].kind == GDScriptDataType::BUILTIN) {
Variant arg;
@@ -3324,6 +3352,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
}
#endif
+ // Get a default return type in case of failure
+ retvalue = _get_default_variant_for_data_type(return_type);
+
OPCODE_OUT;
}
diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp
index 33c1c834f1..14337e87da 100644
--- a/modules/gdscript/language_server/gdscript_language_server.cpp
+++ b/modules/gdscript/language_server/gdscript_language_server.cpp
@@ -45,17 +45,20 @@ GDScriptLanguageServer::GDScriptLanguageServer() {
void GDScriptLanguageServer::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_ENTER_TREE: {
start();
- break;
- case NOTIFICATION_EXIT_TREE:
+ } break;
+
+ case NOTIFICATION_EXIT_TREE: {
stop();
- break;
+ } break;
+
case NOTIFICATION_INTERNAL_PROCESS: {
if (started && !use_thread) {
protocol.poll();
}
} break;
+
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
String host = String(_EDITOR_GET("network/language_server/remote_host"));
int port = (int)_EDITOR_GET("network/language_server/remote_port");
diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp
index f555c8912d..2c42879bd3 100644
--- a/modules/gltf/gltf_document.cpp
+++ b/modules/gltf/gltf_document.cpp
@@ -84,6 +84,41 @@
#include <cstdint>
#include <limits>
+static Ref<ImporterMesh> _mesh_to_importer_mesh(Ref<Mesh> p_mesh) {
+ Ref<ImporterMesh> importer_mesh;
+ importer_mesh.instantiate();
+ if (p_mesh.is_null()) {
+ return importer_mesh;
+ }
+
+ Ref<ArrayMesh> array_mesh = p_mesh;
+ if (p_mesh->get_blend_shape_count()) {
+ ArrayMesh::BlendShapeMode shape_mode = ArrayMesh::BLEND_SHAPE_MODE_NORMALIZED;
+ if (array_mesh.is_valid()) {
+ shape_mode = array_mesh->get_blend_shape_mode();
+ }
+ importer_mesh->set_blend_shape_mode(shape_mode);
+ for (int morph_i = 0; morph_i < p_mesh->get_blend_shape_count(); morph_i++) {
+ importer_mesh->add_blend_shape(p_mesh->get_blend_shape_name(morph_i));
+ }
+ }
+ for (int32_t surface_i = 0; surface_i < p_mesh->get_surface_count(); surface_i++) {
+ Array array = p_mesh->surface_get_arrays(surface_i);
+ Ref<Material> mat = p_mesh->surface_get_material(surface_i);
+ String mat_name;
+ if (mat.is_valid()) {
+ mat_name = mat->get_name();
+ } else {
+ // Assign default material when no material is assigned.
+ mat = Ref<StandardMaterial3D>(memnew(StandardMaterial3D));
+ }
+ importer_mesh->add_surface(p_mesh->surface_get_primitive_type(surface_i),
+ array, p_mesh->surface_get_blend_shape_arrays(surface_i), p_mesh->surface_get_lods(surface_i), mat,
+ mat_name, p_mesh->surface_get_format(surface_i));
+ }
+ return importer_mesh;
+}
+
Error GLTFDocument::_serialize(Ref<GLTFState> state, const String &p_path) {
if (!state->buffers.size()) {
state->buffers.push_back(Vector<uint8_t>());
@@ -5038,39 +5073,16 @@ GLTFMeshIndex GLTFDocument::_convert_mesh_to_gltf(Ref<GLTFState> state, MeshInst
if (p_mesh_instance->get_mesh().is_null()) {
return -1;
}
- Ref<ImporterMesh> current_mesh;
- current_mesh.instantiate();
+
+ Ref<Mesh> import_mesh = p_mesh_instance->get_mesh();
+ Ref<ImporterMesh> current_mesh = _mesh_to_importer_mesh(import_mesh);
Vector<float> blend_weights;
- {
- Ref<Mesh> import_mesh = p_mesh_instance->get_mesh();
- Ref<ArrayMesh> import_array_mesh = p_mesh_instance->get_mesh();
- if (import_mesh->get_blend_shape_count()) {
- ArrayMesh::BlendShapeMode shape_mode = ArrayMesh::BLEND_SHAPE_MODE_NORMALIZED;
- if (import_array_mesh.is_valid()) {
- shape_mode = import_array_mesh->get_blend_shape_mode();
- }
- current_mesh->set_blend_shape_mode(shape_mode);
- for (int morph_i = 0; morph_i < import_mesh->get_blend_shape_count(); morph_i++) {
- current_mesh->add_blend_shape(import_mesh->get_blend_shape_name(morph_i));
- }
- }
- for (int32_t surface_i = 0; surface_i < import_mesh->get_surface_count(); surface_i++) {
- Array array = import_mesh->surface_get_arrays(surface_i);
- Ref<Material> mat = import_mesh->surface_get_material(surface_i);
- String mat_name;
- if (mat.is_valid()) {
- mat_name = mat->get_name();
- }
- current_mesh->add_surface(import_mesh->surface_get_primitive_type(surface_i),
- array, import_mesh->surface_get_blend_shape_arrays(surface_i), import_mesh->surface_get_lods(surface_i), mat,
- mat_name, import_mesh->surface_get_format(surface_i));
- }
- int32_t blend_count = import_mesh->get_blend_shape_count();
- blend_weights.resize(blend_count);
- for (int32_t blend_i = 0; blend_i < blend_count; blend_i++) {
- blend_weights.write[blend_i] = 0.0f;
- }
+ int32_t blend_count = import_mesh->get_blend_shape_count();
+ blend_weights.resize(blend_count);
+ for (int32_t blend_i = 0; blend_i < blend_count; blend_i++) {
+ blend_weights.write[blend_i] = 0.0f;
}
+
Ref<GLTFMesh> gltf_mesh;
gltf_mesh.instantiate();
Array instance_materials;
@@ -5412,8 +5424,6 @@ void GLTFDocument::_convert_grid_map_to_gltf(GridMap *p_grid_map, GLTFNodeIndex
Vector3 cell_location = cells[k];
int32_t cell = p_grid_map->get_cell_item(
Vector3(cell_location.x, cell_location.y, cell_location.z));
- ImporterMeshInstance3D *import_mesh_node = memnew(ImporterMeshInstance3D);
- import_mesh_node->set_mesh(p_grid_map->get_mesh_library()->get_item_mesh(cell));
Transform3D cell_xform;
cell_xform.basis.set_orthogonal_index(
p_grid_map->get_cell_item_orientation(
@@ -5425,7 +5435,7 @@ void GLTFDocument::_convert_grid_map_to_gltf(GridMap *p_grid_map, GLTFNodeIndex
Vector3(cell_location.x, cell_location.y, cell_location.z)));
Ref<GLTFMesh> gltf_mesh;
gltf_mesh.instantiate();
- gltf_mesh = import_mesh_node;
+ gltf_mesh->set_mesh(_mesh_to_importer_mesh(p_grid_map->get_mesh_library()->get_item_mesh(cell)));
new_gltf_node->mesh = state->meshes.size();
state->meshes.push_back(gltf_mesh);
new_gltf_node->xform = cell_xform * p_grid_map->get_transform();
diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml
index 2ea9a78970..407ce961c8 100644
--- a/modules/gridmap/doc_classes/GridMap.xml
+++ b/modules/gridmap/doc_classes/GridMap.xml
@@ -79,6 +79,13 @@
Returns an array of [Vector3] with the non-empty cell coordinates in the grid map.
</description>
</method>
+ <method name="get_used_cells_by_item" qualifiers="const">
+ <return type="Array" />
+ <argument index="0" name="item" type="int" />
+ <description>
+ Returns an array of all cells with the given item index specified in [code]item[/code].
+ </description>
+ </method>
<method name="make_baked_meshes">
<return type="void" />
<argument index="0" name="gen_lightmap_uv" type="bool" default="false" />
@@ -110,15 +117,6 @@
Optionally, the item's orientation can be passed. For valid orientation values, see [method Basis.get_orthogonal_index].
</description>
</method>
- <method name="set_clip">
- <return type="void" />
- <argument index="0" name="enabled" type="bool" />
- <argument index="1" name="clipabove" type="bool" default="true" />
- <argument index="2" name="floor" type="int" default="0" />
- <argument index="3" name="axis" type="int" enum="Vector3.Axis" default="0" />
- <description>
- </description>
- </method>
<method name="set_collision_layer_value">
<return type="void" />
<argument index="0" name="layer_number" type="int" />
diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp
index 6df7835855..02fe4d93de 100644
--- a/modules/gridmap/grid_map.cpp
+++ b/modules/gridmap/grid_map.cpp
@@ -703,8 +703,8 @@ void GridMap::_notification(int p_what) {
RS::get_singleton()->instance_set_scenario(baked_meshes[i].instance, get_world_3d()->get_scenario());
RS::get_singleton()->instance_set_transform(baked_meshes[i].instance, get_global_transform());
}
-
} break;
+
case NOTIFICATION_TRANSFORM_CHANGED: {
Transform3D new_xform = get_global_transform();
if (new_xform == last_transform) {
@@ -721,6 +721,7 @@ void GridMap::_notification(int p_what) {
RS::get_singleton()->instance_set_transform(baked_meshes[i].instance, get_global_transform());
}
} break;
+
case NOTIFICATION_EXIT_WORLD: {
for (const KeyValue<OctantKey, Octant *> &E : octant_map) {
_octant_exit_world(E.key);
@@ -732,8 +733,8 @@ void GridMap::_notification(int p_what) {
for (int i = 0; i < baked_meshes.size(); i++) {
RS::get_singleton()->instance_set_scenario(baked_meshes[i].instance, RID());
}
-
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
_update_visibility();
} break;
@@ -873,11 +874,10 @@ void GridMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_center_z", "enable"), &GridMap::set_center_z);
ClassDB::bind_method(D_METHOD("get_center_z"), &GridMap::get_center_z);
- ClassDB::bind_method(D_METHOD("set_clip", "enabled", "clipabove", "floor", "axis"), &GridMap::set_clip, DEFVAL(true), DEFVAL(0), DEFVAL(Vector3::AXIS_X));
-
ClassDB::bind_method(D_METHOD("clear"), &GridMap::clear);
ClassDB::bind_method(D_METHOD("get_used_cells"), &GridMap::get_used_cells);
+ ClassDB::bind_method(D_METHOD("get_used_cells_by_item", "item"), &GridMap::get_used_cells_by_item);
ClassDB::bind_method(D_METHOD("get_meshes"), &GridMap::get_meshes);
ClassDB::bind_method(D_METHOD("get_bake_meshes"), &GridMap::get_bake_meshes);
@@ -907,28 +907,6 @@ void GridMap::_bind_methods() {
ADD_SIGNAL(MethodInfo("cell_size_changed", PropertyInfo(Variant::VECTOR3, "cell_size")));
}
-void GridMap::set_clip(bool p_enabled, bool p_clip_above, int p_floor, Vector3::Axis p_axis) {
- if (!p_enabled && !clip) {
- return;
- }
- if (clip && p_enabled && clip_floor == p_floor && p_clip_above == clip_above && p_axis == clip_axis) {
- return;
- }
-
- clip = p_enabled;
- clip_floor = p_floor;
- clip_axis = p_axis;
- clip_above = p_clip_above;
-
- //make it all update
- for (KeyValue<OctantKey, Octant *> &E : octant_map) {
- Octant *g = E.value;
- g->dirty = true;
- }
- awaiting_update = true;
- _update_octants_callback();
-}
-
void GridMap::set_cell_scale(float p_scale) {
cell_scale = p_scale;
_recreate_octant_data();
@@ -950,6 +928,18 @@ Array GridMap::get_used_cells() const {
return a;
}
+Array GridMap::get_used_cells_by_item(int p_item) const {
+ Array a;
+ for (const KeyValue<IndexKey, Cell> &E : cell_map) {
+ if (E.value.item == p_item) {
+ Vector3 p(E.key.x, E.key.y, E.key.z);
+ a.push_back(p);
+ }
+ }
+
+ return a;
+}
+
Array GridMap::get_meshes() const {
if (mesh_library.is_null()) {
return Array();
diff --git a/modules/gridmap/grid_map.h b/modules/gridmap/grid_map.h
index 6cdc3b178d..b09cabfe25 100644
--- a/modules/gridmap/grid_map.h
+++ b/modules/gridmap/grid_map.h
@@ -150,14 +150,8 @@ class GridMap : public Node3D {
bool center_z = true;
float cell_scale = 1.0;
- bool clip = false;
- bool clip_above = true;
- int clip_floor = 0;
-
bool recreating_octants = false;
- Vector3::Axis clip_axis = Vector3::AXIS_Z;
-
Ref<MeshLibrary> mesh_library;
Map<OctantKey, Octant *> octant_map;
@@ -260,12 +254,11 @@ public:
Vector3i world_to_map(const Vector3 &p_world_position) const;
Vector3 map_to_world(const Vector3i &p_map_position) const;
- void set_clip(bool p_enabled, bool p_clip_above = true, int p_floor = 0, Vector3::Axis p_axis = Vector3::AXIS_X);
-
void set_cell_scale(float p_scale);
float get_cell_scale() const;
Array get_used_cells() const;
+ Array get_used_cells_by_item(int p_item) const;
Array get_meshes() const;
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index a7f93a6ce9..a05905cbc3 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -63,17 +63,6 @@ void GridMapEditor::_menu_option(int p_option) {
floor->set_value(floor->get_value() + 1);
} break;
- case MENU_OPTION_CLIP_DISABLED:
- case MENU_OPTION_CLIP_ABOVE:
- case MENU_OPTION_CLIP_BELOW: {
- clip_mode = ClipMode(p_option - MENU_OPTION_CLIP_DISABLED);
- for (int i = 0; i < 3; i++) {
- int index = options->get_popup()->get_item_index(MENU_OPTION_CLIP_DISABLED + i);
- options->get_popup()->set_item_checked(index, i == clip_mode);
- }
-
- _update_clip();
- } break;
case MENU_OPTION_X_AXIS:
case MENU_OPTION_Y_AXIS:
case MENU_OPTION_Z_AXIS: {
@@ -98,7 +87,6 @@ void GridMapEditor::_menu_option(int p_option) {
}
edit_axis = Vector3::Axis(new_axis);
update_grid();
- _update_clip();
} break;
case MENU_OPTION_CURSOR_ROTATE_Y: {
@@ -943,24 +931,12 @@ void GridMapEditor::edit(GridMap *p_gridmap) {
set_process(true);
- clip_mode = p_gridmap->has_meta("_editor_clip_") ? ClipMode(p_gridmap->get_meta("_editor_clip_").operator int()) : CLIP_DISABLED;
-
_draw_grids(node->get_cell_size());
update_grid();
- _update_clip();
node->connect("cell_size_changed", callable_mp(this, &GridMapEditor::_draw_grids));
}
-void GridMapEditor::_update_clip() {
- node->set_meta("_editor_clip_", clip_mode);
- if (clip_mode == CLIP_DISABLED) {
- node->set_clip(false);
- } else {
- node->set_clip(true, clip_mode == CLIP_ABOVE, edit_floor[edit_axis], edit_axis);
- }
-}
-
void GridMapEditor::update_grid() {
grid_xform.origin.x -= 1; // Force update in hackish way.
@@ -1147,7 +1123,6 @@ void GridMapEditor::_floor_changed(float p_value) {
edit_floor[edit_axis] = p_value;
node->set_meta("_editor_floor_", Vector3(edit_floor[0], edit_floor[1], edit_floor[2]));
update_grid();
- _update_clip();
_update_selection_transform();
}
@@ -1198,11 +1173,6 @@ GridMapEditor::GridMapEditor() {
options->get_popup()->add_item(TTR("Previous Floor"), MENU_OPTION_PREV_LEVEL, Key::Q);
options->get_popup()->add_item(TTR("Next Floor"), MENU_OPTION_NEXT_LEVEL, Key::E);
options->get_popup()->add_separator();
- options->get_popup()->add_radio_check_item(TTR("Clip Disabled"), MENU_OPTION_CLIP_DISABLED);
- options->get_popup()->set_item_checked(options->get_popup()->get_item_index(MENU_OPTION_CLIP_DISABLED), true);
- options->get_popup()->add_radio_check_item(TTR("Clip Above"), MENU_OPTION_CLIP_ABOVE);
- options->get_popup()->add_radio_check_item(TTR("Clip Below"), MENU_OPTION_CLIP_BELOW);
- options->get_popup()->add_separator();
options->get_popup()->add_radio_check_item(TTR("Edit X Axis"), MENU_OPTION_X_AXIS, Key::Z);
options->get_popup()->add_radio_check_item(TTR("Edit Y Axis"), MENU_OPTION_Y_AXIS, Key::X);
options->get_popup()->add_radio_check_item(TTR("Edit Z Axis"), MENU_OPTION_Z_AXIS, Key::C);
@@ -1456,15 +1426,17 @@ GridMapEditor::~GridMapEditor() {
}
void GridMapEditorPlugin::_notification(int p_what) {
- if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
- switch ((int)EditorSettings::get_singleton()->get("editors/grid_map/editor_side")) {
- case 0: { // Left.
- Node3DEditor::get_singleton()->move_control_to_left_panel(grid_map_editor);
- } break;
- case 1: { // Right.
- Node3DEditor::get_singleton()->move_control_to_right_panel(grid_map_editor);
- } break;
- }
+ switch (p_what) {
+ case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
+ switch ((int)EditorSettings::get_singleton()->get("editors/grid_map/editor_side")) {
+ case 0: { // Left.
+ Node3DEditor::get_singleton()->move_control_to_left_panel(grid_map_editor);
+ } break;
+ case 1: { // Right.
+ Node3DEditor::get_singleton()->move_control_to_right_panel(grid_map_editor);
+ } break;
+ }
+ } break;
}
}
diff --git a/modules/gridmap/grid_map_editor_plugin.h b/modules/gridmap/grid_map_editor_plugin.h
index a25f14becd..c44c4ca7e0 100644
--- a/modules/gridmap/grid_map_editor_plugin.h
+++ b/modules/gridmap/grid_map_editor_plugin.h
@@ -55,12 +55,6 @@ class GridMapEditor : public VBoxContainer {
INPUT_PASTE,
};
- enum ClipMode {
- CLIP_DISABLED,
- CLIP_ABOVE,
- CLIP_BELOW
- };
-
enum DisplayMode {
DISPLAY_THUMBNAIL,
DISPLAY_LIST
@@ -94,7 +88,6 @@ class GridMapEditor : public VBoxContainer {
GridMap *node = nullptr;
MeshLibrary *last_mesh_library;
- ClipMode clip_mode = CLIP_DISABLED;
Transform3D grid_xform;
Transform3D edit_grid_xform;
@@ -159,9 +152,6 @@ class GridMapEditor : public VBoxContainer {
MENU_OPTION_NEXT_LEVEL,
MENU_OPTION_PREV_LEVEL,
MENU_OPTION_LOCK_VIEW,
- MENU_OPTION_CLIP_DISABLED,
- MENU_OPTION_CLIP_ABOVE,
- MENU_OPTION_CLIP_BELOW,
MENU_OPTION_X_AXIS,
MENU_OPTION_Y_AXIS,
MENU_OPTION_Z_AXIS,
@@ -200,7 +190,6 @@ class GridMapEditor : public VBoxContainer {
void _item_selected_cbk(int idx);
void _update_cursor_transform();
void _update_cursor_instance();
- void _update_clip();
void _update_theme();
void _text_changed(const String &p_text);
diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h
index 2de923c125..d6cd9e6e57 100644
--- a/modules/mono/csharp_script.h
+++ b/modules/mono/csharp_script.h
@@ -53,8 +53,9 @@ class CSharpLanguage;
#ifdef NO_SAFE_CAST
template <typename TScriptInstance, typename TScriptLanguage>
TScriptInstance *cast_script_instance(ScriptInstance *p_inst) {
- if (!p_inst)
+ if (!p_inst) {
return nullptr;
+ }
return p_inst->get_language() == TScriptLanguage::get_singleton() ? static_cast<TScriptInstance *>(p_inst) : nullptr;
}
#else
diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp
index f345dff333..07128770b7 100644
--- a/modules/mono/editor/bindings_generator.cpp
+++ b/modules/mono/editor/bindings_generator.cpp
@@ -2149,8 +2149,9 @@ Error BindingsGenerator::generate_glue(const String &p_output_dir) {
}
output.append("#ifdef TOOLS_ENABLED\n");
- for (const InternalCall &internal_call : editor_custom_icalls)
+ for (const InternalCall &internal_call : editor_custom_icalls) {
ADD_INTERNAL_CALL_REGISTRATION(internal_call);
+ }
output.append("#endif // TOOLS_ENABLED\n");
for (const InternalCall &internal_call : method_icalls) {
diff --git a/modules/mono/editor_templates/CharacterBody2D/basic_movement.cs b/modules/mono/editor_templates/CharacterBody2D/basic_movement.cs
index b0ded3133f..2ca81ab7cd 100644
--- a/modules/mono/editor_templates/CharacterBody2D/basic_movement.cs
+++ b/modules/mono/editor_templates/CharacterBody2D/basic_movement.cs
@@ -13,29 +13,29 @@ public partial class _CLASS_ : _BASE_
public override void _PhysicsProcess(float delta)
{
- Vector2 motionVelocity = MotionVelocity;
+ Vector2 velocity = Velocity;
// Add the gravity.
if (!IsOnFloor())
- motionVelocity.y += gravity * delta;
+ velocity.y += gravity * delta;
// Handle Jump.
if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
- motionVelocity.y = JumpVelocity;
+ velocity.y = JumpVelocity;
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
if (direction != Vector2.Zero)
{
- motionVelocity.x = direction.x * Speed;
+ velocity.x = direction.x * Speed;
}
else
{
- motionVelocity.x = Mathf.MoveToward(MotionVelocity.x, 0, Speed);
+ velocity.x = Mathf.MoveToward(Velocity.x, 0, Speed);
}
- MotionVelocity = motionVelocity;
+ Velocity = velocity;
MoveAndSlide();
}
}
diff --git a/modules/mono/editor_templates/CharacterBody3D/basic_movement.cs b/modules/mono/editor_templates/CharacterBody3D/basic_movement.cs
index d8c2f67ac8..a6935fe497 100644
--- a/modules/mono/editor_templates/CharacterBody3D/basic_movement.cs
+++ b/modules/mono/editor_templates/CharacterBody3D/basic_movement.cs
@@ -13,15 +13,15 @@ public partial class _CLASS_ : _BASE_
public override void _PhysicsProcess(float delta)
{
- Vector3 motionVelocity = MotionVelocity;
+ Vector3 velocity = Velocity;
// Add the gravity.
if (!IsOnFloor())
- motionVelocity.y -= gravity * delta;
+ velocity.y -= gravity * delta;
// Handle Jump.
if (Input.IsActionJustPressed("ui_accept") && IsOnFloor())
- motionVelocity.y = JumpVelocity;
+ velocity.y = JumpVelocity;
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
@@ -29,16 +29,16 @@ public partial class _CLASS_ : _BASE_
Vector3 direction = Transform.basis.Xform(new Vector3(inputDir.x, 0, inputDir.y)).Normalized();
if (direction != Vector3.Zero)
{
- motionVelocity.x = direction.x * Speed;
- motionVelocity.z = direction.z * Speed;
+ velocity.x = direction.x * Speed;
+ velocity.z = direction.z * Speed;
}
else
{
- motionVelocity.x = Mathf.MoveToward(MotionVelocity.x, 0, Speed);
- motionVelocity.z = Mathf.MoveToward(MotionVelocity.z, 0, Speed);
+ velocity.x = Mathf.MoveToward(Velocity.x, 0, Speed);
+ velocity.z = Mathf.MoveToward(Velocity.z, 0, Speed);
}
- MotionVelocity = motionVelocity;
+ Velocity = velocity;
MoveAndSlide();
}
}
diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp
index a7269d7f87..4cd4772d2c 100644
--- a/modules/mono/mono_gd/gd_mono.cpp
+++ b/modules/mono/mono_gd/gd_mono.cpp
@@ -151,8 +151,9 @@ void gd_mono_debug_init() {
.utf8();
}
#else
- if (da_args.length() == 0)
+ if (da_args.length() == 0) {
return; // Exported games don't use the project settings to setup the debugger agent
+ }
#endif
// Debugging enabled
@@ -226,8 +227,9 @@ void GDMono::add_mono_shared_libs_dir_to_path() {
path_value += mono_reg_info.bin_dir;
}
#else
- if (DirAccess::exists(bundled_bin_dir))
+ if (DirAccess::exists(bundled_bin_dir)) {
path_value += bundled_bin_dir;
+ }
#endif // TOOLS_ENABLED
#else
@@ -1269,8 +1271,9 @@ GDMono::~GDMono() {
print_verbose("Mono: Finalizing scripts domain...");
- if (mono_domain_get() != root_domain)
+ if (mono_domain_get() != root_domain) {
mono_domain_set(root_domain, true);
+ }
finalizing_scripts_domain = true;
diff --git a/modules/mono/mono_gd/support/android_support.cpp b/modules/mono/mono_gd/support/android_support.cpp
index eb8bbab948..4797d5dae1 100644
--- a/modules/mono/mono_gd/support/android_support.cpp
+++ b/modules/mono/mono_gd/support/android_support.cpp
@@ -134,8 +134,9 @@ String determine_app_native_lib_dir() {
}
String get_app_native_lib_dir() {
- if (app_native_lib_dir_cache.is_empty())
+ if (app_native_lib_dir_cache.is_empty()) {
app_native_lib_dir_cache = determine_app_native_lib_dir();
+ }
return app_native_lib_dir_cache;
}
@@ -144,10 +145,11 @@ int gd_mono_convert_dl_flags(int flags) {
int lflags = flags & MONO_DL_LOCAL ? 0 : RTLD_GLOBAL;
- if (flags & MONO_DL_LAZY)
+ if (flags & MONO_DL_LAZY) {
lflags |= RTLD_LAZY;
- else
+ } else {
lflags |= RTLD_NOW;
+ }
return lflags;
}
@@ -164,8 +166,9 @@ void *godot_dl_handle = nullptr;
void *try_dlopen(const String &p_so_path, int p_flags) {
if (!FileAccess::exists(p_so_path)) {
- if (OS::get_singleton()->is_stdout_verbose())
+ if (OS::get_singleton()->is_stdout_verbose()) {
OS::get_singleton()->print("Cannot find shared library: '%s'\n", p_so_path.utf8().get_data());
+ }
return nullptr;
}
@@ -174,13 +177,15 @@ void *try_dlopen(const String &p_so_path, int p_flags) {
void *handle = dlopen(p_so_path.utf8().get_data(), lflags);
if (!handle) {
- if (OS::get_singleton()->is_stdout_verbose())
+ if (OS::get_singleton()->is_stdout_verbose()) {
OS::get_singleton()->print("Failed to open shared library: '%s'. Error: '%s'\n", p_so_path.utf8().get_data(), dlerror());
+ }
return nullptr;
}
- if (OS::get_singleton()->is_stdout_verbose())
+ if (OS::get_singleton()->is_stdout_verbose()) {
OS::get_singleton()->print("Successfully loaded shared library: '%s'\n", p_so_path.utf8().get_data());
+ }
return handle;
}
@@ -217,20 +222,23 @@ void *gd_mono_android_dlopen(const char *p_name, int p_flags, char **r_err, void
void *gd_mono_android_dlsym(void *p_handle, const char *p_name, char **r_err, void *p_user_data) {
void *sym_addr = dlsym(p_handle, p_name);
- if (sym_addr)
+ if (sym_addr) {
return sym_addr;
+ }
if (p_handle == mono_dl_handle && godot_dl_handle) {
// Looking up for '__Internal' P/Invoke. We want to search in both the Mono and Godot shared libraries.
// This is needed to resolve the monodroid P/Invoke functions that are defined at the bottom of the file.
sym_addr = dlsym(godot_dl_handle, p_name);
- if (sym_addr)
+ if (sym_addr) {
return sym_addr;
+ }
}
- if (r_err)
+ if (r_err) {
*r_err = str_format_new("%s\n", dlerror());
+ }
return nullptr;
}
@@ -239,8 +247,9 @@ void *gd_mono_android_dlclose(void *p_handle, void *p_user_data) {
dlclose(p_handle);
// Not sure if this ever happens. Does Mono close the handle for the main module?
- if (p_handle == mono_dl_handle)
+ if (p_handle == mono_dl_handle) {
mono_dl_handle = nullptr;
+ }
return nullptr;
}
@@ -292,13 +301,15 @@ MonoBoolean _gd_mono_init_cert_store() {
ScopedLocalRef<jobject> certStoreLocal(env, env->CallStaticObjectMethod(keyStoreClass, getInstance, androidCAStoreString.get()));
- if (jni_exception_check(env))
+ if (jni_exception_check(env)) {
return 0;
+ }
env->CallVoidMethod(certStoreLocal, load, nullptr);
- if (jni_exception_check(env))
+ if (jni_exception_check(env)) {
return 0;
+ }
certStore = env->NewGlobalRef(certStoreLocal);
@@ -309,8 +320,9 @@ MonoArray *_gd_mono_android_cert_store_lookup(MonoString *p_alias) {
// The JNI code is the equivalent of:
//
// Certificate certificate = certStore.getCertificate(alias);
- // if (certificate == null)
+ // if (certificate == null) {
// return null;
+ // }
// return certificate.getEncoded();
MonoError mono_error;
@@ -340,8 +352,9 @@ MonoArray *_gd_mono_android_cert_store_lookup(MonoString *p_alias) {
ScopedLocalRef<jobject> certificate(env, env->CallObjectMethod(certStore, getCertificate, js_alias.get()));
- if (!certificate)
+ if (!certificate) {
return nullptr;
+ }
ScopedLocalRef<jbyteArray> encoded(env, (jbyteArray)env->CallObjectMethod(certificate, getEncoded));
jsize encodedLength = env->GetArrayLength(encoded);
@@ -374,11 +387,13 @@ void initialize() {
void cleanup() {
// This is called after shutting down the Mono runtime
- if (mono_dl_handle)
+ if (mono_dl_handle) {
gd_mono_android_dlclose(mono_dl_handle, nullptr);
+ }
- if (godot_dl_handle)
+ if (godot_dl_handle) {
gd_mono_android_dlclose(godot_dl_handle, nullptr);
+ }
JNIEnv *env = get_jni_env();
@@ -431,8 +446,9 @@ GD_PINVOKE_EXPORT mono_bool _monodroid_get_network_interface_up_state(const char
//
// NetworkInterface.getByName(p_ifname).isUp()
- if (!r_is_up || !p_ifname || strlen(p_ifname) == 0)
+ if (!r_is_up || !p_ifname || strlen(p_ifname) == 0) {
return 0;
+ }
*r_is_up = 0;
@@ -450,8 +466,9 @@ GD_PINVOKE_EXPORT mono_bool _monodroid_get_network_interface_up_state(const char
ScopedLocalRef<jstring> js_ifname(env, env->NewStringUTF(p_ifname));
ScopedLocalRef<jobject> networkInterface(env, env->CallStaticObjectMethod(networkInterfaceClass, getByName, js_ifname.get()));
- if (!networkInterface)
+ if (!networkInterface) {
return 0;
+ }
*r_is_up = (mono_bool)env->CallBooleanMethod(networkInterface, isUp);
@@ -463,8 +480,9 @@ GD_PINVOKE_EXPORT mono_bool _monodroid_get_network_interface_supports_multicast(
//
// NetworkInterface.getByName(p_ifname).supportsMulticast()
- if (!r_supports_multicast || !p_ifname || strlen(p_ifname) == 0)
+ if (!r_supports_multicast || !p_ifname || strlen(p_ifname) == 0) {
return 0;
+ }
*r_supports_multicast = 0;
@@ -482,8 +500,9 @@ GD_PINVOKE_EXPORT mono_bool _monodroid_get_network_interface_supports_multicast(
ScopedLocalRef<jstring> js_ifname(env, env->NewStringUTF(p_ifname));
ScopedLocalRef<jobject> networkInterface(env, env->CallStaticObjectMethod(networkInterfaceClass, getByName, js_ifname.get()));
- if (!networkInterface)
+ if (!networkInterface) {
return 0;
+ }
*r_supports_multicast = (mono_bool)env->CallBooleanMethod(networkInterface, supportsMulticast);
@@ -528,8 +547,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
ScopedLocalRef<jobject> connectivityManager(env, env->CallObjectMethod(applicationContext, getSystemService, connectivityServiceString.get()));
- if (!connectivityManager)
+ if (!connectivityManager) {
return;
+ }
ScopedLocalRef<jclass> connectivityManagerClass(env, env->FindClass("android/net/ConnectivityManager"));
ERR_FAIL_NULL(connectivityManagerClass);
@@ -539,8 +559,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
ScopedLocalRef<jobject> activeNetwork(env, env->CallObjectMethod(connectivityManager, getActiveNetwork));
- if (!activeNetwork)
+ if (!activeNetwork) {
return;
+ }
jmethodID getLinkProperties = env->GetMethodID(connectivityManagerClass,
"getLinkProperties", "(Landroid/net/Network;)Landroid/net/LinkProperties;");
@@ -548,8 +569,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
ScopedLocalRef<jobject> linkProperties(env, env->CallObjectMethod(connectivityManager, getLinkProperties, activeNetwork.get()));
- if (!linkProperties)
+ if (!linkProperties) {
return;
+ }
ScopedLocalRef<jclass> linkPropertiesClass(env, env->FindClass("android/net/LinkProperties"));
ERR_FAIL_NULL(linkPropertiesClass);
@@ -559,8 +581,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
ScopedLocalRef<jobject> dnsServers(env, env->CallObjectMethod(linkProperties, getDnsServers));
- if (!dnsServers)
+ if (!dnsServers) {
return;
+ }
ScopedLocalRef<jclass> listClass(env, env->FindClass("java/util/List"));
ERR_FAIL_NULL(listClass);
@@ -570,11 +593,13 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
int dnsServersCount = env->CallIntMethod(dnsServers, listSize);
- if (dnsServersCount > dns_servers_len)
+ if (dnsServersCount > dns_servers_len) {
dnsServersCount = dns_servers_len;
+ }
- if (dnsServersCount <= 0)
+ if (dnsServersCount <= 0) {
return;
+ }
jmethodID listGet = env->GetMethodID(listClass, "get", "(I)Ljava/lang/Object;");
ERR_FAIL_NULL(listGet);
@@ -587,8 +612,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
for (int i = 0; i < dnsServersCount; i++) {
ScopedLocalRef<jobject> dnsServer(env, env->CallObjectMethod(dnsServers, listGet, (jint)i));
- if (!dnsServer)
+ if (!dnsServer) {
continue;
+ }
ScopedLocalRef<jstring> hostAddress(env, (jstring)env->CallObjectMethod(dnsServer, getHostAddress));
const char *host_address = env->GetStringUTFChars(hostAddress, 0);
@@ -603,8 +629,9 @@ static void interop_get_active_network_dns_servers(char **r_dns_servers, int *dn
}
GD_PINVOKE_EXPORT int32_t _monodroid_get_dns_servers(void **r_dns_servers_array) {
- if (!r_dns_servers_array)
+ if (!r_dns_servers_array) {
return -1;
+ }
*r_dns_servers_array = nullptr;
@@ -661,13 +688,15 @@ GD_PINVOKE_EXPORT const char *_monodroid_timezone_get_default_id() {
ScopedLocalRef<jobject> defaultTimeZone(env, env->CallStaticObjectMethod(timeZoneClass, getDefault));
- if (!defaultTimeZone)
+ if (!defaultTimeZone) {
return nullptr;
+ }
ScopedLocalRef<jstring> defaultTimeZoneID(env, (jstring)env->CallObjectMethod(defaultTimeZone, getID));
- if (!defaultTimeZoneID)
+ if (!defaultTimeZoneID) {
return nullptr;
+ }
const char *default_time_zone_id = env->GetStringUTFChars(defaultTimeZoneID, 0);
diff --git a/modules/mono/mono_gd/support/ios_support.mm b/modules/mono/mono_gd/support/ios_support.mm
index e66b88db32..df97dfba49 100644
--- a/modules/mono/mono_gd/support/ios_support.mm
+++ b/modules/mono/mono_gd/support/ios_support.mm
@@ -94,8 +94,9 @@ GD_PINVOKE_EXPORT const char *xamarin_get_locale_country_code() {
GD_PINVOKE_EXPORT void xamarin_log(const uint16_t *p_unicode_message) {
int length = 0;
const uint16_t *ptr = p_unicode_message;
- while (*ptr++)
+ while (*ptr++) {
length += sizeof(uint16_t);
+ }
NSString *msg = [[NSString alloc] initWithBytes:p_unicode_message length:length encoding:NSUTF16LittleEndianStringEncoding];
os_log_info(OS_LOG_DEFAULT, "%{public}@", msg);
diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp
index f388661207..8e37e6943c 100644
--- a/modules/mono/utils/mono_reg_utils.cpp
+++ b/modules/mono/utils/mono_reg_utils.cpp
@@ -60,8 +60,9 @@ REGSAM _get_bitness_sam() {
LONG _RegOpenKey(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult) {
LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ, phkResult);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ | _get_bitness_sam(), phkResult);
+ }
return res;
}
@@ -92,31 +93,37 @@ LONG _find_mono_in_reg(const String &p_subkey, MonoRegInfo &r_info, bool p_old_r
HKEY hKey;
LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, (LPCWSTR)(p_subkey.utf16().get_data()), &hKey);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
if (!p_old_reg) {
res = _RegKeyQueryString(hKey, "Version", r_info.version);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
}
res = _RegKeyQueryString(hKey, "SdkInstallRoot", r_info.install_root_dir);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
res = _RegKeyQueryString(hKey, "FrameworkAssemblyDirectory", r_info.assembly_dir);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
res = _RegKeyQueryString(hKey, "MonoConfigDir", r_info.config_dir);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
- if (r_info.install_root_dir.ends_with("\\"))
+ if (r_info.install_root_dir.ends_with("\\")) {
r_info.bin_dir = r_info.install_root_dir + "bin";
- else
+ } else {
r_info.bin_dir = r_info.install_root_dir + "\\bin";
+ }
cleanup:
RegCloseKey(hKey);
@@ -129,8 +136,9 @@ LONG _find_mono_in_reg_old(const String &p_subkey, MonoRegInfo &r_info) {
HKEY hKey;
LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, (LPCWSTR)(p_subkey.utf16().get_data()), &hKey);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
res = _RegKeyQueryString(hKey, "DefaultCLR", default_clr);
@@ -147,11 +155,13 @@ cleanup:
MonoRegInfo find_mono() {
MonoRegInfo info;
- if (_find_mono_in_reg("Software\\Mono", info) == ERROR_SUCCESS)
+ if (_find_mono_in_reg("Software\\Mono", info) == ERROR_SUCCESS) {
return info;
+ }
- if (_find_mono_in_reg_old("Software\\Novell\\Mono", info) == ERROR_SUCCESS)
+ if (_find_mono_in_reg_old("Software\\Novell\\Mono", info) == ERROR_SUCCESS) {
return info;
+ }
return MonoRegInfo();
}
@@ -212,13 +222,15 @@ String find_msbuild_tools_path() {
HKEY hKey;
LONG res = _RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\14.0", &hKey);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
res = _RegKeyQueryString(hKey, "MSBuildToolsPath", msbuild_tools_path);
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto cleanup;
+ }
cleanup:
RegCloseKey(hKey);
diff --git a/modules/mono/utils/path_utils.cpp b/modules/mono/utils/path_utils.cpp
index 89851fc4d3..15a0b28181 100644
--- a/modules/mono/utils/path_utils.cpp
+++ b/modules/mono/utils/path_utils.cpp
@@ -57,8 +57,9 @@ String cwd() {
Char16String buffer;
buffer.resize((int)expected_size);
- if (::GetCurrentDirectoryW(expected_size, (wchar_t *)buffer.ptrw()) == 0)
+ if (::GetCurrentDirectoryW(expected_size, (wchar_t *)buffer.ptrw()) == 0) {
return ".";
+ }
String result;
if (result.parse_utf16(buffer.ptr())) {
@@ -95,8 +96,9 @@ String realpath(const String &p_path) {
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
- if (hFile == INVALID_HANDLE_VALUE)
+ if (hFile == INVALID_HANDLE_VALUE) {
return p_path;
+ }
const DWORD expected_size = ::GetFinalPathNameByHandleW(hFile, nullptr, 0, FILE_NAME_NORMALIZED);
@@ -177,8 +179,9 @@ String relative_to_impl(const String &p_path, const String &p_relative_to) {
#ifdef WINDOWS_ENABLED
String get_drive_letter(const String &p_norm_path) {
int idx = p_norm_path.find(":/");
- if (idx != -1 && idx < p_norm_path.find("/"))
+ if (idx != -1 && idx < p_norm_path.find("/")) {
return p_norm_path.substr(0, idx + 1);
+ }
return String();
}
#endif
diff --git a/modules/navigation/nav_utils.h b/modules/navigation/nav_utils.h
index 30930ed6ae..0c02885b10 100644
--- a/modules/navigation/nav_utils.h
+++ b/modules/navigation/nav_utils.h
@@ -32,6 +32,7 @@
#define NAV_UTILS_H
#include "core/math/vector3.h"
+#include "core/templates/vector.h"
#include <vector>
diff --git a/modules/navigation/navigation_mesh_editor_plugin.cpp b/modules/navigation/navigation_mesh_editor_plugin.cpp
index 04eca5fb0b..511490ba07 100644
--- a/modules/navigation/navigation_mesh_editor_plugin.cpp
+++ b/modules/navigation/navigation_mesh_editor_plugin.cpp
@@ -46,10 +46,12 @@ void NavigationMeshEditor::_node_removed(Node *p_node) {
}
}
-void NavigationMeshEditor::_notification(int p_option) {
- if (p_option == NOTIFICATION_ENTER_TREE) {
- button_bake->set_icon(get_theme_icon(SNAME("Bake"), SNAME("EditorIcons")));
- button_reset->set_icon(get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")));
+void NavigationMeshEditor::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE: {
+ button_bake->set_icon(get_theme_icon(SNAME("Bake"), SNAME("EditorIcons")));
+ button_reset->set_icon(get_theme_icon(SNAME("Reload"), SNAME("EditorIcons")));
+ } break;
}
}
diff --git a/modules/navigation/navigation_mesh_editor_plugin.h b/modules/navigation/navigation_mesh_editor_plugin.h
index 0e4175eca0..d581b453b3 100644
--- a/modules/navigation/navigation_mesh_editor_plugin.h
+++ b/modules/navigation/navigation_mesh_editor_plugin.h
@@ -57,7 +57,7 @@ class NavigationMeshEditor : public Control {
protected:
void _node_removed(Node *p_node);
static void _bind_methods();
- void _notification(int p_option);
+ void _notification(int p_what);
public:
void edit(NavigationRegion3D *p_nav_region);
diff --git a/modules/ogg/ogg_packet_sequence.cpp b/modules/ogg/ogg_packet_sequence.cpp
index 65058f088e..da52ecfdd5 100644
--- a/modules/ogg/ogg_packet_sequence.cpp
+++ b/modules/ogg/ogg_packet_sequence.cpp
@@ -162,6 +162,7 @@ bool OGGPacketSequencePlayback::next_ogg_packet(ogg_packet **p_packet) const {
}
uint32_t OGGPacketSequencePlayback::seek_page_internal(int64_t granule, uint32_t after_page_inclusive, uint32_t before_page_inclusive) {
+ // FIXME: This function needs better corner case handling.
if (before_page_inclusive == after_page_inclusive) {
return before_page_inclusive;
}
@@ -169,7 +170,8 @@ uint32_t OGGPacketSequencePlayback::seek_page_internal(int64_t granule, uint32_t
// Complicating the bisection search algorithm, the middle page might not have a packet that ends on it,
// which means it might not have a correct granule position. Find a nearby page that does have a packet ending on it.
uint32_t bisection_page = -1;
- for (uint32_t test_page = actual_middle_page; test_page <= before_page_inclusive; test_page++) {
+ // Don't include before_page_inclusive because that always succeeds and will cause infinite recursion later.
+ for (uint32_t test_page = actual_middle_page; test_page < before_page_inclusive; test_page++) {
if (ogg_packet_sequence->page_data[test_page].size() > 0) {
bisection_page = test_page;
break;
diff --git a/modules/openxr/SCsub b/modules/openxr/SCsub
new file mode 100644
index 0000000000..37a8f3909a
--- /dev/null
+++ b/modules/openxr/SCsub
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+
+Import("env")
+Import("env_modules")
+
+env_openxr = env_modules.Clone()
+
+#################################################
+# Add in our Khronos OpenXR loader
+
+thirdparty_obj = []
+thirdparty_dir = "#thirdparty/openxr"
+
+env_openxr.Prepend(
+ CPPPATH=[
+ thirdparty_dir,
+ thirdparty_dir + "/include",
+ thirdparty_dir + "/src",
+ thirdparty_dir + "/src/common",
+ thirdparty_dir + "/src/external/jsoncpp/include",
+ thirdparty_dir + "/src/loader",
+ ]
+)
+
+# may need to check and set:
+# - XR_USE_TIMESPEC
+
+env_thirdparty = env_openxr.Clone()
+env_thirdparty.disable_warnings()
+env_thirdparty.AppendUnique(CPPDEFINES=["DISABLE_STD_FILESYSTEM"])
+
+if env["platform"] == "android":
+ # may need to set OPENXR_ANDROID_VERSION_SUFFIX
+ env_thirdparty.AppendUnique(CPPDEFINES=["XR_OS_ANDROID", "XR_USE_PLATFORM_ANDROID"])
+
+ # may need to include java parts of the openxr loader
+elif env["platform"] == "linuxbsd":
+ env_thirdparty.AppendUnique(CPPDEFINES=["XR_OS_LINUX", "XR_USE_PLATFORM_XLIB"])
+ # FIXME: Review what needs to be set for Android and macOS.
+ env_thirdparty.AppendUnique(CPPDEFINES=["HAVE_SECURE_GETENV"])
+elif env["platform"] == "windows":
+ env_thirdparty.AppendUnique(CPPDEFINES=["XR_OS_WINDOWS", "NOMINMAX", "XR_USE_PLATFORM_WIN32"])
+
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/xr_generated_dispatch_table.c")
+
+# add in common files (hope these don't clash with us)
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/common/filesystem_utils.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/common/object_info.cpp")
+
+# add in external jsoncpp dependency
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_reader.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_value.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/external/jsoncpp/src/lib_json/json_writer.cpp")
+
+# add in load
+if env["platform"] == "android":
+ env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/android_utilities.cpp")
+
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/api_layer_interface.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/loader_core.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/loader_instance.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/loader_logger_recorders.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/loader_logger.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/manifest_file.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/runtime_interface.cpp")
+env_thirdparty.add_source_files(thirdparty_obj, thirdparty_dir + "/src/loader/xr_generated_loader.cpp")
+
+env.modules_sources += thirdparty_obj
+
+#################################################
+# And include our module source
+
+module_obj = []
+
+env_openxr.add_source_files(module_obj, "*.cpp")
+env_openxr.add_source_files(module_obj, "action_map/*.cpp")
+
+# We're a little more targetted with our extensions
+if env["platform"] == "android":
+ env_openxr.add_source_files(module_obj, "extensions/openxr_android_extension.cpp")
+if env["vulkan"]:
+ env_openxr.add_source_files(module_obj, "extensions/openxr_vulkan_extension.cpp")
+
+env.modules_sources += module_obj
+
+# Needed to force rebuilding the module files when the thirdparty library is updated.
+env.Depends(module_obj, thirdparty_obj)
diff --git a/modules/openxr/action_map/openxr_action.cpp b/modules/openxr/action_map/openxr_action.cpp
new file mode 100644
index 0000000000..59ee3f4292
--- /dev/null
+++ b/modules/openxr/action_map/openxr_action.cpp
@@ -0,0 +1,91 @@
+/*************************************************************************/
+/* openxr_action.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_action.h"
+
+void OpenXRAction::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_localized_name", "localized_name"), &OpenXRAction::set_localized_name);
+ ClassDB::bind_method(D_METHOD("get_localized_name"), &OpenXRAction::get_localized_name);
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "localized_name"), "set_localized_name", "get_localized_name");
+
+ ClassDB::bind_method(D_METHOD("set_action_type", "action_type"), &OpenXRAction::set_action_type);
+ ClassDB::bind_method(D_METHOD("get_action_type"), &OpenXRAction::get_action_type);
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "action_type", PROPERTY_HINT_ENUM, "bool,float,vector2,pose"), "set_action_type", "get_action_type");
+
+ ClassDB::bind_method(D_METHOD("set_toplevel_paths", "toplevel_paths"), &OpenXRAction::set_toplevel_paths);
+ ClassDB::bind_method(D_METHOD("get_toplevel_paths"), &OpenXRAction::get_toplevel_paths);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "toplevel_paths", PROPERTY_HINT_ARRAY_TYPE, "STRING"), "set_toplevel_paths", "get_toplevel_paths");
+
+ BIND_ENUM_CONSTANT(OPENXR_ACTION_BOOL);
+ BIND_ENUM_CONSTANT(OPENXR_ACTION_FLOAT);
+ BIND_ENUM_CONSTANT(OPENXR_ACTION_VECTOR2);
+ BIND_ENUM_CONSTANT(OPENXR_ACTION_POSE);
+}
+
+Ref<OpenXRAction> OpenXRAction::new_action(const char *p_name, const char *p_localized_name, const ActionType p_action_type, const char *p_toplevel_paths) {
+ // This is a helper function to help build our default action sets
+
+ Ref<OpenXRAction> action;
+ action.instantiate();
+ action->set_name(String(p_name));
+ action->set_localized_name(String(p_localized_name));
+ action->set_action_type(p_action_type);
+ action->parse_toplevel_paths(String(p_toplevel_paths));
+
+ return action;
+}
+
+void OpenXRAction::set_localized_name(const String p_localized_name) {
+ localized_name = p_localized_name;
+}
+
+String OpenXRAction::get_localized_name() const {
+ return localized_name;
+}
+
+void OpenXRAction::set_action_type(const OpenXRAction::ActionType p_action_type) {
+ action_type = p_action_type;
+}
+
+OpenXRAction::ActionType OpenXRAction::get_action_type() const {
+ return action_type;
+}
+
+void OpenXRAction::set_toplevel_paths(const PackedStringArray p_toplevel_paths) {
+ toplevel_paths = p_toplevel_paths;
+}
+
+PackedStringArray OpenXRAction::get_toplevel_paths() const {
+ return toplevel_paths;
+}
+
+void OpenXRAction::parse_toplevel_paths(const String p_toplevel_paths) {
+ toplevel_paths = p_toplevel_paths.split(",", false);
+}
diff --git a/modules/openxr/action_map/openxr_action.h b/modules/openxr/action_map/openxr_action.h
new file mode 100644
index 0000000000..e2cfe79e64
--- /dev/null
+++ b/modules/openxr/action_map/openxr_action.h
@@ -0,0 +1,74 @@
+/*************************************************************************/
+/* openxr_action.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_ACTION_H
+#define OPENXR_ACTION_H
+
+#include "core/io/resource.h"
+
+class OpenXRAction : public Resource {
+ GDCLASS(OpenXRAction, Resource);
+
+public:
+ enum ActionType {
+ OPENXR_ACTION_BOOL,
+ OPENXR_ACTION_FLOAT,
+ OPENXR_ACTION_VECTOR2,
+ OPENXR_ACTION_POSE,
+ OPENXR_ACTION_HAPTIC,
+ };
+
+private:
+ String localized_name;
+ ActionType action_type = OPENXR_ACTION_FLOAT;
+
+ PackedStringArray toplevel_paths;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static Ref<OpenXRAction> new_action(const char *p_name, const char *p_localized_name, const ActionType p_action_type, const char *p_toplevel_paths);
+
+ void set_localized_name(const String p_localized_name);
+ String get_localized_name() const;
+
+ void set_action_type(const ActionType p_action_type);
+ ActionType get_action_type() const;
+
+ void set_toplevel_paths(const PackedStringArray p_toplevel_paths);
+ PackedStringArray get_toplevel_paths() const;
+
+ void parse_toplevel_paths(const String p_toplevel_paths);
+};
+
+VARIANT_ENUM_CAST(OpenXRAction::ActionType);
+
+#endif // !OPENXR_ACTION_H
diff --git a/modules/openxr/action_map/openxr_action_map.cpp b/modules/openxr/action_map/openxr_action_map.cpp
new file mode 100644
index 0000000000..5391f9569a
--- /dev/null
+++ b/modules/openxr/action_map/openxr_action_map.cpp
@@ -0,0 +1,261 @@
+/*************************************************************************/
+/* openxr_action_map.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_action_map.h"
+
+void OpenXRActionMap::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_action_sets", "action_sets"), &OpenXRActionMap::set_action_sets);
+ ClassDB::bind_method(D_METHOD("get_action_sets"), &OpenXRActionMap::get_action_sets);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "action_sets", PROPERTY_HINT_RESOURCE_TYPE, "OpenXRActionSet", PROPERTY_USAGE_NO_EDITOR), "set_action_sets", "get_action_sets");
+
+ ClassDB::bind_method(D_METHOD("add_action_set", "action_set"), &OpenXRActionMap::add_action_set);
+ ClassDB::bind_method(D_METHOD("remove_action_set", "action_set"), &OpenXRActionMap::remove_action_set);
+
+ ClassDB::bind_method(D_METHOD("set_interaction_profiles", "interaction_profiles"), &OpenXRActionMap::set_interaction_profiles);
+ ClassDB::bind_method(D_METHOD("get_interaction_profiles"), &OpenXRActionMap::get_interaction_profiles);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "interaction_profiles", PROPERTY_HINT_RESOURCE_TYPE, "OpenXRInteractionProfile", PROPERTY_USAGE_NO_EDITOR), "set_interaction_profiles", "get_interaction_profiles");
+
+ ClassDB::bind_method(D_METHOD("add_interaction_profile", "interaction_profile"), &OpenXRActionMap::add_interaction_profile);
+ ClassDB::bind_method(D_METHOD("remove_interaction_profile", "interaction_profile"), &OpenXRActionMap::remove_interaction_profile);
+
+ ClassDB::bind_method(D_METHOD("create_default_action_sets"), &OpenXRActionMap::create_default_action_sets);
+}
+
+void OpenXRActionMap::set_action_sets(Array p_action_sets) {
+ action_sets = p_action_sets;
+}
+
+Array OpenXRActionMap::get_action_sets() const {
+ return action_sets;
+}
+
+void OpenXRActionMap::add_action_set(Ref<OpenXRActionSet> p_action_set) {
+ ERR_FAIL_COND(p_action_set.is_null());
+
+ if (action_sets.find(p_action_set) == -1) {
+ action_sets.push_back(p_action_set);
+ }
+}
+
+void OpenXRActionMap::remove_action_set(Ref<OpenXRActionSet> p_action_set) {
+ int idx = action_sets.find(p_action_set);
+ if (idx != -1) {
+ action_sets.remove_at(idx);
+ }
+}
+
+void OpenXRActionMap::set_interaction_profiles(Array p_interaction_profiles) {
+ interaction_profiles = p_interaction_profiles;
+}
+
+Array OpenXRActionMap::get_interaction_profiles() const {
+ return interaction_profiles;
+}
+
+void OpenXRActionMap::add_interaction_profile(Ref<OpenXRInteractionProfile> p_interaction_profile) {
+ ERR_FAIL_COND(p_interaction_profile.is_null());
+
+ if (interaction_profiles.find(p_interaction_profile) == -1) {
+ interaction_profiles.push_back(p_interaction_profile);
+ }
+}
+
+void OpenXRActionMap::remove_interaction_profile(Ref<OpenXRInteractionProfile> p_interaction_profile) {
+ int idx = interaction_profiles.find(p_interaction_profile);
+ if (idx != -1) {
+ interaction_profiles.remove_at(idx);
+ }
+}
+
+void OpenXRActionMap::create_default_action_sets() {
+ // Note, if you make changes here make sure to delete your default_action_map.tres file of it will load an old version.
+
+ // Create our Godot action set
+ Ref<OpenXRActionSet> action_set = OpenXRActionSet::new_action_set("godot", "Godot action set");
+ add_action_set(action_set);
+
+ // Create our actions
+ Ref<OpenXRAction> trigger = action_set->add_new_action("trigger", "Trigger", OpenXRAction::OPENXR_ACTION_FLOAT, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> trigger_click = action_set->add_new_action("trigger_click", "Trigger click", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> trigger_touch = action_set->add_new_action("trigger_touch", "Trigger touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> grip = action_set->add_new_action("grip", "Grip", OpenXRAction::OPENXR_ACTION_FLOAT, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> grip_click = action_set->add_new_action("grip_click", "Grip click", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> grip_touch = action_set->add_new_action("grip_touch", "Grip touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> primary = action_set->add_new_action("primary", "Primary joystick/thumbstick/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> primary_click = action_set->add_new_action("primary_click", "Primary joystick/thumbstick/trackpad click", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> primary_touch = action_set->add_new_action("primary_touch", "Primary joystick/thumbstick/trackpad touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> secondary = action_set->add_new_action("secondary", "Secondary joystick/thumbstick/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> secondary_click = action_set->add_new_action("secondary_click", "Secondary joystick/thumbstick/trackpad click", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> secondary_touch = action_set->add_new_action("secondary_touch", "Secondary joystick/thumbstick/trackpad touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> menu_button = action_set->add_new_action("menu_button", "Menu button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> select_button = action_set->add_new_action("select_button", "Select button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> ax_button = action_set->add_new_action("ax_button", "A/X button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> ax_touch = action_set->add_new_action("ax_touch", "A/X touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> by_button = action_set->add_new_action("by_button", "B/Y button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> by_touch = action_set->add_new_action("by_touch", "B/Y touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> default_pose = action_set->add_new_action("default_pose", "Default pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> aim_pose = action_set->add_new_action("aim_pose", "Aim pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> grip_pose = action_set->add_new_action("grip_pose", "Grip pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> haptic = action_set->add_new_action("haptic", "Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC, "/user/hand/left,/user/hand/right");
+
+ // Create our interaction profiles
+ Ref<OpenXRInteractionProfile> profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/khr/simple_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(menu_button, "/user/hand/left/input/menu/click,/user/hand/right/input/menu/click");
+ profile->add_new_binding(select_button, "/user/hand/left/input/select/click,/user/hand/right/input/select/click");
+ // generic has no support for triggers, grip, A/B buttons, nor joystick/trackpad inputs
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+
+ // Create our Vive controller profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/htc/vive_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(menu_button, "/user/hand/left/input/menu/click,/user/hand/right/input/menu/click");
+ profile->add_new_binding(select_button, "/user/hand/left/input/system/click,/user/hand/right/input/system/click");
+ // wmr controller has no a/b/x/y buttons
+ profile->add_new_binding(trigger, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(trigger_click, "/user/hand/left/input/trigger/click,/user/hand/right/input/trigger/click");
+ profile->add_new_binding(grip, "/user/hand/left/input/squeeze/click,/user/hand/right/input/squeeze/click"); // OpenXR will convert bool to float
+ profile->add_new_binding(grip_click, "/user/hand/left/input/squeeze/click,/user/hand/right/input/squeeze/click");
+ // primary on our vive controller is our trackpad
+ profile->add_new_binding(primary, "/user/hand/left/input/trackpad,/user/hand/right/input/trackpad");
+ profile->add_new_binding(primary_click, "/user/hand/left/input/trackpad/click,/user/hand/right/input/trackpad/click");
+ profile->add_new_binding(primary_touch, "/user/hand/left/input/trackpad/touch,/user/hand/right/input/trackpad/touch");
+ // vive controllers have no secondary input
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+
+ // Create our WMR controller profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/microsoft/motion_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ // wmr controllers have no select button we can use
+ profile->add_new_binding(menu_button, "/user/hand/left/input/menu/click,/user/hand/right/input/menu/click");
+ // wmr controller has no a/b/x/y buttons
+ profile->add_new_binding(trigger, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(trigger_click, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value"); // OpenXR will conver float to bool
+ profile->add_new_binding(grip, "/user/hand/left/input/squeeze/click,/user/hand/right/input/squeeze/click"); // OpenXR will convert bool to float
+ profile->add_new_binding(grip_click, "/user/hand/left/input/squeeze/click,/user/hand/right/input/squeeze/click");
+ // primary on our wmr controller is our thumbstick, no touch
+ profile->add_new_binding(primary, "/user/hand/left/input/thumbstick,/user/hand/right/input/thumbstick");
+ profile->add_new_binding(primary_click, "/user/hand/left/input/thumbstick/click,/user/hand/right/input/thumbstick/click");
+ // secondary on our wmr controller is our trackpad
+ profile->add_new_binding(secondary, "/user/hand/left/input/trackpad,/user/hand/right/input/trackpad");
+ profile->add_new_binding(secondary_click, "/user/hand/left/input/trackpad/click,/user/hand/right/input/trackpad/click");
+ profile->add_new_binding(secondary_touch, "/user/hand/left/input/trackpad/touch,/user/hand/right/input/trackpad/touch");
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+
+ // Create our HP MR controller profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/hp/mixed_reality_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ // hpmr controllers have no select button we can use
+ profile->add_new_binding(menu_button, "/user/hand/left/input/menu/click,/user/hand/right/input/menu/click");
+ // hpmr controllers only register click, not touch, on our a/b/x/y buttons
+ profile->add_new_binding(ax_button, "/user/hand/left/input/x/click,/user/hand/right/input/a/click"); // x on left hand, a on right hand
+ profile->add_new_binding(by_button, "/user/hand/left/input/y/click,/user/hand/right/input/b/click"); // y on left hand, b on right hand
+ profile->add_new_binding(trigger, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(trigger_click, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(grip, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value");
+ profile->add_new_binding(grip_click, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value");
+ // primary on our hpmr controller is our thumbstick
+ profile->add_new_binding(primary, "/user/hand/left/input/thumbstick,/user/hand/right/input/thumbstick");
+ profile->add_new_binding(primary_click, "/user/hand/left/input/thumbstick/click,/user/hand/right/input/thumbstick/click");
+ // No secondary on our hpmr controller
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+
+ // Create our Meta touch controller profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/oculus/touch_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ // touch controllers have no select button we can use
+ profile->add_new_binding(menu_button, "/user/hand/left/input/menu/click,/user/hand/right/input/system/click"); // right hand system click may not be available
+ profile->add_new_binding(ax_button, "/user/hand/left/input/x/click,/user/hand/right/input/a/click"); // x on left hand, a on right hand
+ profile->add_new_binding(ax_touch, "/user/hand/left/input/x/touch,/user/hand/right/input/a/touch");
+ profile->add_new_binding(by_button, "/user/hand/left/input/y/click,/user/hand/right/input/b/click"); // y on left hand, b on right hand
+ profile->add_new_binding(by_touch, "/user/hand/left/input/y/touch,/user/hand/right/input/b/touch");
+ profile->add_new_binding(trigger, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(trigger_click, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value"); // should be converted to boolean
+ profile->add_new_binding(trigger_touch, "/user/hand/left/input/trigger/touch,/user/hand/right/input/trigger/touch");
+ profile->add_new_binding(grip, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value"); // should be converted to boolean
+ profile->add_new_binding(grip_click, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value");
+ // primary on our touch controller is our thumbstick
+ profile->add_new_binding(primary, "/user/hand/left/input/thumbstick,/user/hand/right/input/thumbstick");
+ profile->add_new_binding(primary_click, "/user/hand/left/input/thumbstick/click,/user/hand/right/input/thumbstick/click");
+ profile->add_new_binding(primary_touch, "/user/hand/left/input/thumbstick/touch,/user/hand/right/input/thumbstick/touch");
+ // touch controller has no secondary input
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+
+ // Create our Valve index controller profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/valve/index_controller");
+ profile->add_new_binding(default_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ profile->add_new_binding(aim_pose, "/user/hand/left/input/aim/pose,/user/hand/right/input/aim/pose");
+ profile->add_new_binding(grip_pose, "/user/hand/left/input/grip/pose,/user/hand/right/input/grip/pose");
+ // index controllers have no select button we can use
+ profile->add_new_binding(menu_button, "/user/hand/left/input/system/click,/user/hand/right/input/system/click");
+ profile->add_new_binding(ax_button, "/user/hand/left/input/a/click,/user/hand/right/input/a/click"); // a on both controllers
+ profile->add_new_binding(ax_touch, "/user/hand/left/input/a/touch,/user/hand/right/input/a/touch");
+ profile->add_new_binding(by_button, "/user/hand/left/input/b/click,/user/hand/right/input/b/click"); // b on both controllers
+ profile->add_new_binding(by_touch, "/user/hand/left/input/b/touch,/user/hand/right/input/b/touch");
+ profile->add_new_binding(trigger, "/user/hand/left/input/trigger/value,/user/hand/right/input/trigger/value");
+ profile->add_new_binding(trigger_click, "/user/hand/left/input/trigger/click,/user/hand/right/input/trigger/click");
+ profile->add_new_binding(trigger_touch, "/user/hand/left/input/trigger/touch,/user/hand/right/input/trigger/touch");
+ profile->add_new_binding(grip, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value");
+ profile->add_new_binding(grip_click, "/user/hand/left/input/squeeze/value,/user/hand/right/input/squeeze/value"); // this should do a float to bool conversion
+ // primary on our index controller is our thumbstick
+ profile->add_new_binding(primary, "/user/hand/left/input/thumbstick,/user/hand/right/input/thumbstick");
+ profile->add_new_binding(primary_click, "/user/hand/left/input/thumbstick/click,/user/hand/right/input/thumbstick/click");
+ profile->add_new_binding(primary_touch, "/user/hand/left/input/thumbstick/touch,/user/hand/right/input/thumbstick/touch");
+ // secondary on our index controller is our trackpad
+ profile->add_new_binding(secondary, "/user/hand/left/input/trackpad,/user/hand/right/input/trackpad");
+ profile->add_new_binding(secondary_click, "/user/hand/left/input/trackpad/force,/user/hand/right/input/trackpad/force"); // not sure if this will work but doesn't seem to support click...
+ profile->add_new_binding(secondary_touch, "/user/hand/left/input/trackpad/touch,/user/hand/right/input/trackpad/touch");
+ profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+ add_interaction_profile(profile);
+}
+
+void OpenXRActionMap::create_editor_action_sets() {
+ // TODO implement
+}
+
+OpenXRActionMap::~OpenXRActionMap() {
+ action_sets.clear();
+ interaction_profiles.clear();
+}
diff --git a/modules/basis_universal/texture_basisu.h b/modules/openxr/action_map/openxr_action_map.h
index 8c8be68254..866e170468 100644
--- a/modules/basis_universal/texture_basisu.h
+++ b/modules/openxr/action_map/openxr_action_map.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* texture_basisu.h */
+/* openxr_action_map.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,53 +28,41 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef BASIS_UNIVERSAL_TEXTURE_BASISU_H
-#define BASIS_UNIVERSAL_TEXTURE_BASISU_H
+#ifndef OPENXR_ACTION_SETS_H
+#define OPENXR_ACTION_SETS_H
-#include "scene/resources/texture.h"
+#include "core/io/resource.h"
-#ifdef TOOLS_ENABLED
-#include <encoder/basisu_comp.h>
-#endif
+#include "openxr_action_set.h"
+#include "openxr_interaction_profile.h"
-#include <transcoder/basisu_transcoder.h>
+class OpenXRActionMap : public Resource {
+ GDCLASS(OpenXRActionMap, Resource);
-#if 0
-class TextureBasisU : public Texture {
- GDCLASS(TextureBasisU, Texture);
- RES_BASE_EXTENSION("butex");
-
- RID texture;
- Size2 tex_size;
-
- uint32_t flags = FLAGS_DEFAULT;
-
- Vector<uint8_t> data;
+private:
+ Array action_sets;
+ Array interaction_profiles;
+protected:
static void _bind_methods();
public:
+ void set_action_sets(Array p_action_sets);
+ Array get_action_sets() const;
- virtual int get_width() const;
- virtual int get_height() const;
- virtual RID get_rid() const;
- virtual bool has_alpha() const;
+ void add_action_set(Ref<OpenXRActionSet> p_action_set);
+ void remove_action_set(Ref<OpenXRActionSet> p_action_set);
- virtual void set_flags(uint32_t p_flags);
- virtual uint32_t get_flags() const;
+ void set_interaction_profiles(Array p_interaction_profiles);
+ Array get_interaction_profiles() const;
+ void add_interaction_profile(Ref<OpenXRInteractionProfile> p_interaction_profile);
+ void remove_interaction_profile(Ref<OpenXRInteractionProfile> p_interaction_profile);
- Error import(const Ref<Image> &p_img);
+ void create_default_action_sets();
+ void create_editor_action_sets();
- void set_basisu_data(const Vector<uint8_t>& p_data);
-
- Vector<uint8_t> get_basisu_data() const;
- String get_img_path() const;
-
- TextureBasisU();
- ~TextureBasisU();
+ ~OpenXRActionMap();
};
-#endif
-
-#endif // BASIS_UNIVERSAL_TEXTURE_BASISU_H
+#endif // !OPENXR_ACTION_SETS_H
diff --git a/modules/openxr/action_map/openxr_action_set.cpp b/modules/openxr/action_map/openxr_action_set.cpp
new file mode 100644
index 0000000000..465a709b60
--- /dev/null
+++ b/modules/openxr/action_map/openxr_action_set.cpp
@@ -0,0 +1,111 @@
+/*************************************************************************/
+/* openxr_action_set.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_action_set.h"
+
+void OpenXRActionSet::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_localized_name", "localized_name"), &OpenXRActionSet::set_localized_name);
+ ClassDB::bind_method(D_METHOD("get_localized_name"), &OpenXRActionSet::get_localized_name);
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "localized_name"), "set_localized_name", "get_localized_name");
+
+ ClassDB::bind_method(D_METHOD("set_priority", "priority"), &OpenXRActionSet::set_priority);
+ ClassDB::bind_method(D_METHOD("get_priority"), &OpenXRActionSet::get_priority);
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "priority"), "set_priority", "get_priority");
+
+ ClassDB::bind_method(D_METHOD("set_actions", "actions"), &OpenXRActionSet::set_actions);
+ ClassDB::bind_method(D_METHOD("get_actions"), &OpenXRActionSet::get_actions);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "actions", PROPERTY_HINT_RESOURCE_TYPE, "OpenXRAction", PROPERTY_USAGE_NO_EDITOR), "set_actions", "get_actions");
+
+ ClassDB::bind_method(D_METHOD("add_action", "action"), &OpenXRActionSet::add_action);
+ ClassDB::bind_method(D_METHOD("remove_action", "action"), &OpenXRActionSet::remove_action);
+}
+
+Ref<OpenXRActionSet> OpenXRActionSet::new_action_set(const char *p_name, const char *p_localized_name, const int p_priority) {
+ // This is a helper function to help build our default action sets
+
+ Ref<OpenXRActionSet> action_set;
+ action_set.instantiate();
+ action_set->set_name(String(p_name));
+ action_set->set_localized_name(p_localized_name);
+ action_set->set_priority(p_priority);
+
+ return action_set;
+}
+
+void OpenXRActionSet::set_localized_name(const String p_localized_name) {
+ localized_name = p_localized_name;
+}
+
+String OpenXRActionSet::get_localized_name() const {
+ return localized_name;
+}
+
+void OpenXRActionSet::set_priority(const int p_priority) {
+ priority = p_priority;
+}
+
+int OpenXRActionSet::get_priority() const {
+ return priority;
+}
+
+void OpenXRActionSet::set_actions(Array p_actions) {
+ actions = p_actions;
+}
+
+Array OpenXRActionSet::get_actions() const {
+ return actions;
+}
+
+void OpenXRActionSet::add_action(Ref<OpenXRAction> p_action) {
+ ERR_FAIL_COND(p_action.is_null());
+
+ if (actions.find(p_action) == -1) {
+ actions.push_back(p_action);
+ }
+}
+
+void OpenXRActionSet::remove_action(Ref<OpenXRAction> p_action) {
+ int idx = actions.find(p_action);
+ if (idx != -1) {
+ actions.remove_at(idx);
+ }
+}
+
+Ref<OpenXRAction> OpenXRActionSet::add_new_action(const char *p_name, const char *p_localized_name, const OpenXRAction::ActionType p_action_type, const char *p_toplevel_paths) {
+ // This is a helper function to help build our default action sets
+
+ Ref<OpenXRAction> new_action = OpenXRAction::new_action(p_name, p_localized_name, p_action_type, p_toplevel_paths);
+ add_action(new_action);
+ return new_action;
+}
+
+OpenXRActionSet::~OpenXRActionSet() {
+ actions.clear();
+}
diff --git a/modules/openxr/action_map/openxr_action_set.h b/modules/openxr/action_map/openxr_action_set.h
new file mode 100644
index 0000000000..012a088b1c
--- /dev/null
+++ b/modules/openxr/action_map/openxr_action_set.h
@@ -0,0 +1,70 @@
+/*************************************************************************/
+/* openxr_action_set.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_ACTION_SET_H
+#define OPENXR_ACTION_SET_H
+
+#include "core/io/resource.h"
+
+#include "openxr_action.h"
+
+class OpenXRActionSet : public Resource {
+ GDCLASS(OpenXRActionSet, Resource);
+
+private:
+ String localized_name;
+ int priority = 0;
+
+ Array actions;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static Ref<OpenXRActionSet> new_action_set(const char *p_name, const char *p_localized_name, const int p_priority = 0);
+
+ void set_localized_name(const String p_localized_name);
+ String get_localized_name() const;
+
+ void set_priority(const int p_priority);
+ int get_priority() const;
+
+ void set_actions(Array p_actions);
+ Array get_actions() const;
+
+ void add_action(Ref<OpenXRAction> p_action);
+ void remove_action(Ref<OpenXRAction> p_action);
+
+ Ref<OpenXRAction> add_new_action(const char *p_name, const char *p_localized_name, const OpenXRAction::ActionType p_action_type, const char *p_toplevel_paths);
+
+ ~OpenXRActionSet();
+};
+
+#endif // !OPENXR_ACTION_SET_H
diff --git a/modules/openxr/action_map/openxr_interaction_profile.cpp b/modules/openxr/action_map/openxr_interaction_profile.cpp
new file mode 100644
index 0000000000..bc33814f17
--- /dev/null
+++ b/modules/openxr/action_map/openxr_interaction_profile.cpp
@@ -0,0 +1,136 @@
+/*************************************************************************/
+/* openxr_interaction_profile.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_interaction_profile.h"
+
+void OpenXRIPBinding::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_action", "action"), &OpenXRIPBinding::set_action);
+ ClassDB::bind_method(D_METHOD("get_action"), &OpenXRIPBinding::get_action);
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "action", PROPERTY_HINT_RESOURCE_TYPE, "OpenXRAction"), "set_action", "get_action");
+
+ ClassDB::bind_method(D_METHOD("set_paths", "paths"), &OpenXRIPBinding::set_paths);
+ ClassDB::bind_method(D_METHOD("get_paths"), &OpenXRIPBinding::get_paths);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "paths", PROPERTY_HINT_ARRAY_TYPE, "STRING"), "set_paths", "get_paths");
+}
+
+Ref<OpenXRIPBinding> OpenXRIPBinding::new_binding(const Ref<OpenXRAction> p_action, const char *p_paths) {
+ // This is a helper function to help build our default action sets
+
+ Ref<OpenXRIPBinding> binding;
+ binding.instantiate();
+ binding->set_action(p_action);
+ binding->parse_paths(String(p_paths));
+
+ return binding;
+}
+
+void OpenXRIPBinding::set_action(const Ref<OpenXRAction> p_action) {
+ action = p_action;
+}
+
+Ref<OpenXRAction> OpenXRIPBinding::get_action() const {
+ return action;
+}
+
+void OpenXRIPBinding::set_paths(const PackedStringArray p_paths) {
+ paths = p_paths;
+}
+
+PackedStringArray OpenXRIPBinding::get_paths() const {
+ return paths;
+}
+
+void OpenXRIPBinding::parse_paths(const String p_paths) {
+ paths = p_paths.split(",", false);
+}
+
+OpenXRIPBinding::~OpenXRIPBinding() {
+ action.unref();
+}
+
+void OpenXRInteractionProfile::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_interaction_profile_path", "interaction_profile_path"), &OpenXRInteractionProfile::set_interaction_profile_path);
+ ClassDB::bind_method(D_METHOD("get_interaction_profile_path"), &OpenXRInteractionProfile::get_interaction_profile_path);
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "interaction_profile_path"), "set_interaction_profile_path", "get_interaction_profile_path");
+
+ ClassDB::bind_method(D_METHOD("set_bindings", "bindings"), &OpenXRInteractionProfile::set_bindings);
+ ClassDB::bind_method(D_METHOD("get_bindings"), &OpenXRInteractionProfile::get_bindings);
+ ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "bindings", PROPERTY_HINT_RESOURCE_TYPE, "OpenXRIPBinding", PROPERTY_USAGE_NO_EDITOR), "set_bindings", "get_bindings");
+}
+
+Ref<OpenXRInteractionProfile> OpenXRInteractionProfile::new_profile(const char *p_input_profile_path) {
+ Ref<OpenXRInteractionProfile> profile;
+ profile.instantiate();
+ profile->set_interaction_profile_path(String(p_input_profile_path));
+
+ return profile;
+}
+
+void OpenXRInteractionProfile::set_interaction_profile_path(const String p_input_profile_path) {
+ interaction_profile_path = p_input_profile_path;
+}
+
+String OpenXRInteractionProfile::get_interaction_profile_path() const {
+ return interaction_profile_path;
+}
+
+void OpenXRInteractionProfile::set_bindings(Array p_bindings) {
+ bindings = p_bindings;
+}
+
+Array OpenXRInteractionProfile::get_bindings() const {
+ return bindings;
+}
+
+void OpenXRInteractionProfile::add_binding(Ref<OpenXRIPBinding> p_binding) {
+ ERR_FAIL_COND(p_binding.is_null());
+
+ if (bindings.find(p_binding) == -1) {
+ bindings.push_back(p_binding);
+ }
+}
+
+void OpenXRInteractionProfile::remove_binding(Ref<OpenXRIPBinding> p_binding) {
+ int idx = bindings.find(p_binding);
+ if (idx != -1) {
+ bindings.remove_at(idx);
+ }
+}
+
+void OpenXRInteractionProfile::add_new_binding(const Ref<OpenXRAction> p_action, const char *p_paths) {
+ // This is a helper function to help build our default action sets
+
+ Ref<OpenXRIPBinding> binding = OpenXRIPBinding::new_binding(p_action, p_paths);
+ add_binding(binding);
+}
+
+OpenXRInteractionProfile::~OpenXRInteractionProfile() {
+ bindings.clear();
+}
diff --git a/modules/openxr/action_map/openxr_interaction_profile.h b/modules/openxr/action_map/openxr_interaction_profile.h
new file mode 100644
index 0000000000..abbc429e7d
--- /dev/null
+++ b/modules/openxr/action_map/openxr_interaction_profile.h
@@ -0,0 +1,89 @@
+/*************************************************************************/
+/* openxr_interaction_profile.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_INTERACTION_PROFILE_H
+#define OPENXR_INTERACTION_PROFILE_H
+
+#include "core/io/resource.h"
+
+#include "openxr_action.h"
+
+class OpenXRIPBinding : public Resource {
+ GDCLASS(OpenXRIPBinding, Resource);
+
+private:
+ Ref<OpenXRAction> action;
+ PackedStringArray paths;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static Ref<OpenXRIPBinding> new_binding(const Ref<OpenXRAction> p_action, const char *p_paths);
+
+ void set_action(const Ref<OpenXRAction> p_action);
+ Ref<OpenXRAction> get_action() const;
+
+ void set_paths(const PackedStringArray p_paths);
+ PackedStringArray get_paths() const;
+
+ void parse_paths(const String p_paths);
+
+ ~OpenXRIPBinding();
+};
+
+class OpenXRInteractionProfile : public Resource {
+ GDCLASS(OpenXRInteractionProfile, Resource);
+
+private:
+ String interaction_profile_path;
+ Array bindings;
+
+protected:
+ static void _bind_methods();
+
+public:
+ static Ref<OpenXRInteractionProfile> new_profile(const char *p_input_profile_path);
+
+ void set_interaction_profile_path(const String p_input_profile_path);
+ String get_interaction_profile_path() const;
+
+ void set_bindings(Array p_bindings);
+ Array get_bindings() const;
+
+ void add_binding(Ref<OpenXRIPBinding> p_binding);
+ void remove_binding(Ref<OpenXRIPBinding> p_binding);
+
+ void add_new_binding(const Ref<OpenXRAction> p_action, const char *p_paths);
+
+ ~OpenXRInteractionProfile();
+};
+
+#endif // !OPENXR_INTERACTION_PROFILE_H
diff --git a/modules/openxr/config.py b/modules/openxr/config.py
new file mode 100644
index 0000000000..f91cb1359f
--- /dev/null
+++ b/modules/openxr/config.py
@@ -0,0 +1,27 @@
+def can_build(env, platform):
+ if (
+ platform == "linuxbsd" or platform == "windows"
+ ): # or platform == "android" -- temporarily disabled android support
+ return env["openxr"]
+ else:
+ # not supported on these platforms
+ return False
+
+
+def configure(env):
+ pass
+
+
+def get_doc_classes():
+ return [
+ "OpenXRInterface",
+ "OpenXRAction",
+ "OpenXRActionSet",
+ "OpenXRActionMap",
+ "OpenXRInteractionProfile",
+ "OpenXRIPBinding",
+ ]
+
+
+def get_doc_path():
+ return "doc_classes"
diff --git a/modules/openxr/doc_classes/OpenXRAction.xml b/modules/openxr/doc_classes/OpenXRAction.xml
new file mode 100644
index 0000000000..6ff8c1ad26
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRAction.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRAction" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ An OpenXR action.
+ </brief_description>
+ <description>
+ This resource defines an OpenXR action. Actions can be used both for inputs (buttons/joystick/trigger/etc) and outputs (haptics).
+ OpenXR performs automatic conversion between action type and input type whenever possible. An analogue trigger bound to a boolean action will thus return [code]false[/core] if the trigger is depressed and [code]true[/code] if pressed fully.
+ Actions are not directly bound to specific devices, instead OpenXR recognises a limited number of top level paths that identify devices by usage. We can restrict which devices an action can be bound to by these top level paths. For instance an action that should only be used for hand held controllers can have the top level paths "/user/hand/left" and "/user/hand/right" associated with them. See the [url=https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-reserved]reserved path section in the OpenXR specification[/url] for more info on the top level paths.
+ Note that the name of the resource is used to register the action with.
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="action_type" type="int" setter="set_action_type" getter="get_action_type" enum="OpenXRAction.ActionType" default="1">
+ The type of action.
+ </member>
+ <member name="localized_name" type="String" setter="set_localized_name" getter="get_localized_name" default="&quot;&quot;">
+ The localised description of this action.
+ </member>
+ <member name="toplevel_paths" type="PackedStringArray" setter="set_toplevel_paths" getter="get_toplevel_paths" default="PackedStringArray()">
+ A collections of toplevel paths to which this action can be bound.
+ </member>
+ </members>
+ <constants>
+ <constant name="OPENXR_ACTION_BOOL" value="0" enum="ActionType">
+ This action provides a boolean value.
+ </constant>
+ <constant name="OPENXR_ACTION_FLOAT" value="1" enum="ActionType">
+ This action provides a float value between [code]0.0[/code] and [code]1.0[/code] for any analogue input such as triggers.
+ </constant>
+ <constant name="OPENXR_ACTION_VECTOR2" value="2" enum="ActionType">
+ This action provides a vector2 value and can be bound to embedded trackpads and joysticks
+ </constant>
+ <constant name="OPENXR_ACTION_POSE" value="3" enum="ActionType">
+ </constant>
+ </constants>
+</class>
diff --git a/modules/openxr/doc_classes/OpenXRActionMap.xml b/modules/openxr/doc_classes/OpenXRActionMap.xml
new file mode 100644
index 0000000000..f1def8aad8
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRActionMap.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRActionMap" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ Collection of [OpenXRActionSet] and [OpenXRInteractionProfile] resources for the OpenXR module.
+ </brief_description>
+ <description>
+ OpenXR uses an action system similar to Godots Input map system to bind inputs and outputs on various types of XR controllers to named actions. OpenXR specifies more detail on these inputs and outputs than Godot supports.
+ Another important distinction is that OpenXR offers no control over these bindings. The bindings we register are suggestions, it is up to the XR runtime to offer users the ability to change these bindings. This allows the XR runtime to fill in the gaps if new hardware becomes available.
+ The action map therefor needs to be loaded at startup and can't be changed afterwards. This resource is a container for the entire action map.
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="add_action_set">
+ <return type="void" />
+ <argument index="0" name="action_set" type="OpenXRActionSet" />
+ <description>
+ Add an action set.
+ </description>
+ </method>
+ <method name="add_interaction_profile">
+ <return type="void" />
+ <argument index="0" name="interaction_profile" type="OpenXRInteractionProfile" />
+ <description>
+ Add an interaction profile.
+ </description>
+ </method>
+ <method name="create_default_action_sets">
+ <return type="void" />
+ <description>
+ Setup this action set with our default actions.
+ </description>
+ </method>
+ <method name="remove_action_set">
+ <return type="void" />
+ <argument index="0" name="action_set" type="OpenXRActionSet" />
+ <description>
+ Remove an action set.
+ </description>
+ </method>
+ <method name="remove_interaction_profile">
+ <return type="void" />
+ <argument index="0" name="interaction_profile" type="OpenXRInteractionProfile" />
+ <description>
+ Remove an interaction profile.
+ </description>
+ </method>
+ </methods>
+ <members>
+ <member name="action_sets" type="Array" setter="set_action_sets" getter="get_action_sets" default="[]">
+ </member>
+ <member name="interaction_profiles" type="Array" setter="set_interaction_profiles" getter="get_interaction_profiles" default="[]">
+ </member>
+ </members>
+</class>
diff --git a/modules/openxr/doc_classes/OpenXRActionSet.xml b/modules/openxr/doc_classes/OpenXRActionSet.xml
new file mode 100644
index 0000000000..5a87de463e
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRActionSet.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRActionSet" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ Collection of [OpenXRAction] resources that make up an action set.
+ </brief_description>
+ <description>
+ Action sets in OpenXR define a collection of actions that can be activated in unison. This allows games to easily change between different states that require different inputs or need to reinterpret inputs. For instance we could have an action set that is active when a menu is open, an action set that is active when the player is freely walking around and an action set that is active when the player is controlling a vehicle.
+ Action sets can contain the same actions, or actions with the same name, if such action sets are active at the same time the action set with the highest priority defines which binding is active.
+ Note that the name of the resource is used to identify the action set within OpenXR.
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="add_action">
+ <return type="void" />
+ <argument index="0" name="action" type="OpenXRAction" />
+ <description>
+ Add an action to this action set.
+ </description>
+ </method>
+ <method name="remove_action">
+ <return type="void" />
+ <argument index="0" name="action" type="OpenXRAction" />
+ <description>
+ Remove an action from this action set.
+ </description>
+ </method>
+ </methods>
+ <members>
+ <member name="actions" type="Array" setter="set_actions" getter="get_actions" default="[]">
+ Collection of actions for this action set.
+ </member>
+ <member name="localized_name" type="String" setter="set_localized_name" getter="get_localized_name" default="&quot;&quot;">
+ The localised name of this action set.
+ </member>
+ <member name="priority" type="int" setter="set_priority" getter="get_priority" default="0">
+ The priority for this action set.
+ </member>
+ </members>
+</class>
diff --git a/modules/openxr/doc_classes/OpenXRIPBinding.xml b/modules/openxr/doc_classes/OpenXRIPBinding.xml
new file mode 100644
index 0000000000..3fdcde5eb5
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRIPBinding.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRIPBinding" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ Defines a binding between an [OpenXRAction] and an XR input or output.
+ </brief_description>
+ <description>
+ This binding resource binds an OpenXR action to inputs or outputs. As most controllers have left hand and right versions that are handled by the same interaction profile we can specify multiple bindings. For instance an action "Fire" could be bound to both "/user/hand/left/input/trigger" and "/user/hand/right/input/trigger".
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="action" type="OpenXRAction" setter="set_action" getter="get_action">
+ Action that is bound to these paths.
+ </member>
+ <member name="paths" type="PackedStringArray" setter="set_paths" getter="get_paths" default="PackedStringArray()">
+ Paths that define the inputs or outputs bound on the device.
+ </member>
+ </members>
+</class>
diff --git a/modules/openxr/doc_classes/OpenXRInteractionProfile.xml b/modules/openxr/doc_classes/OpenXRInteractionProfile.xml
new file mode 100644
index 0000000000..a8629caae4
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRInteractionProfile.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRInteractionProfile" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ Suggested bindings object for OpenXR.
+ </brief_description>
+ <description>
+ This object stores suggested bindings for an interaction profile. Interaction profiles define the meta data for a tracked XR device such as an XR controller.
+ For more information see the [url=https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#semantic-path-interaction-profiles]interaction profiles info in the OpenXR specification[/url].
+ </description>
+ <tutorials>
+ </tutorials>
+ <members>
+ <member name="bindings" type="Array" setter="set_bindings" getter="get_bindings" default="[]">
+ Action bindings for this interaction profile.
+ </member>
+ <member name="interaction_profile_path" type="String" setter="set_interaction_profile_path" getter="get_interaction_profile_path" default="&quot;&quot;">
+ The interaction profile path identifying the XR device.
+ </member>
+ </members>
+</class>
diff --git a/modules/openxr/doc_classes/OpenXRInterface.xml b/modules/openxr/doc_classes/OpenXRInterface.xml
new file mode 100644
index 0000000000..1160061e04
--- /dev/null
+++ b/modules/openxr/doc_classes/OpenXRInterface.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="OpenXRInterface" inherits="XRInterface" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
+ <brief_description>
+ Our OpenXR interface.
+ </brief_description>
+ <description>
+ The OpenXR interface allows Godot to interact with OpenXR runtimes and make it possible to create XR experiences and games.
+ Due to the needs of OpenXR this interface works slightly different then other plugin based XR interfaces. It needs to be initialised when Godot starts. You need to enable OpenXR, settings for this can be found in your games project settings under the XR heading. You do need to mark a viewport for use with XR in order for Godot to know which render result should be output to the headset.
+ </description>
+ <tutorials>
+ <link title="OpenXR documentation">$DOCS_URL/tutorials/vr/openxr/index.html</link>
+ </tutorials>
+</class>
diff --git a/modules/openxr/extensions/openxr_android_extension.cpp b/modules/openxr/extensions/openxr_android_extension.cpp
new file mode 100644
index 0000000000..3bd4db169c
--- /dev/null
+++ b/modules/openxr/extensions/openxr_android_extension.cpp
@@ -0,0 +1,71 @@
+/*************************************************************************/
+/* openxr_android_extension.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_android_extension.h"
+
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+OpenXRAndroidExtension *OpenXRAndroidExtension::singleton = nullptr;
+
+OpenXRAndroidExtension *OpenXRAndroidExtension::get_singleton() {
+ return singleton;
+}
+
+OpenXRAndroidExtension::OpenXRAndroidExtension(OpenXRAPI *p_openxr_api) :
+ OpenXRExtensionWrapper(p_openxr_api) {
+ singleton = this;
+
+ request_extensions[XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME] = nullptr; // must be available
+
+ // Initialize the loader
+ PFN_xrInitializeLoaderKHR xrInitializeLoaderKHR;
+ result = xrGetInstanceProcAddr(XR_NULL_HANDLE, "xrInitializeLoaderKHR", (PFN_xrVoidFunction *)(&xrInitializeLoaderKHR));
+ ERR_FAIL_COND_MSG(XR_FAILED(result), "Failed to retrieve pointer to xrInitializeLoaderKHR");
+
+ // TODO fix this code, this is still code from GDNative!
+ JNIEnv *env = android_api->godot_android_get_env();
+ JavaVM *vm;
+ env->GetJavaVM(&vm);
+ jobject activity_object = env->NewGlobalRef(android_api->godot_android_get_activity());
+
+ XrLoaderInitInfoAndroidKHR loader_init_info_android = {
+ .type = XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR,
+ .next = nullptr,
+ .applicationVM = vm,
+ .applicationContext = activity_object
+ };
+ xrInitializeLoaderKHR((const XrLoaderInitInfoBaseHeaderKHR *)&loader_init_info_android);
+ ERR_FAIL_COND_MSG(XR_FAILED(result), "Failed to call xrInitializeLoaderKHR");
+}
+
+OpenXRAndroidExtension::~OpenXRAndroidExtension() {
+ singleton = nullptr;
+}
diff --git a/modules/openxr/extensions/openxr_android_extension.h b/modules/openxr/extensions/openxr_android_extension.h
new file mode 100644
index 0000000000..e102197a55
--- /dev/null
+++ b/modules/openxr/extensions/openxr_android_extension.h
@@ -0,0 +1,47 @@
+/*************************************************************************/
+/* openxr_android_extension.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_ANDROID_EXTENSION_H
+#define OPENXR_ANDROID_EXTENSION_H
+
+#include "openxr_extension_wrapper.h"
+
+class OpenXRAndroidExtension : public OpenXRExtensionWrapper {
+public:
+ static OpenXRAndroidExtension *get_singleton();
+
+ OpenXRAndroidExtension(OpenXRAPI *p_openxr_api);
+ virtual ~OpenXRAndroidExtension() override;
+
+private:
+ static OpenXRAndroidExtension *singleton;
+};
+
+#endif // !OPENXR_ANDROID_EXTENSION_H
diff --git a/modules/openxr/extensions/openxr_composition_layer_provider.h b/modules/openxr/extensions/openxr_composition_layer_provider.h
new file mode 100644
index 0000000000..019dffa2a8
--- /dev/null
+++ b/modules/openxr/extensions/openxr_composition_layer_provider.h
@@ -0,0 +1,45 @@
+/*************************************************************************/
+/* openxr_composition_layer_provider.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_COMPOSITION_LAYER_PROVIDER_H
+#define OPENXR_COMPOSITION_LAYER_PROVIDER_H
+
+#include <openxr/openxr.h>
+
+// Interface for OpenXR extensions that provide a composition layer.
+class OpenXRCompositionLayerProvider {
+public:
+ // TODO changed to normal method definition for now
+ // CI complains until we implement this, haven't ported it yet from plugin
+ // virtual XrCompositionLayerBaseHeader *get_composition_layer() = 0;
+ XrCompositionLayerBaseHeader *get_composition_layer() { return nullptr; };
+};
+
+#endif // OPENXR_COMPOSITION_LAYER_PROVIDER_H
diff --git a/modules/openxr/extensions/openxr_extension_wrapper.h b/modules/openxr/extensions/openxr_extension_wrapper.h
new file mode 100644
index 0000000000..5242ee6063
--- /dev/null
+++ b/modules/openxr/extensions/openxr_extension_wrapper.h
@@ -0,0 +1,106 @@
+/*************************************************************************/
+/* openxr_extension_wrapper.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_EXTENSION_WRAPPER_H
+#define OPENXR_EXTENSION_WRAPPER_H
+
+#include "core/error/error_macros.h"
+#include "core/math/camera_matrix.h"
+#include "core/templates/map.h"
+#include "core/templates/rid.h"
+
+#include "thirdparty/openxr/src/common/xr_linear.h"
+#include <openxr/openxr.h>
+
+class OpenXRAPI;
+
+class OpenXRExtensionWrapper {
+protected:
+ OpenXRAPI *openxr_api;
+
+ // Store extension we require.
+ // If bool pointer is a nullptr this means this extension is mandatory and initialisation will fail if it is not available
+ // If bool pointer is set, value will be set to true or false depending on whether extension is available
+ Map<const char *, bool *> request_extensions;
+
+public:
+ virtual Map<const char *, bool *> get_request_extensions() {
+ return request_extensions;
+ }
+
+ // These functions allow an extension to add entries to a struct chain.
+ // `p_next_pointer` points to the last struct that was created for this chain
+ // and should be used as the value for the `pNext` pointer in the first struct you add.
+ // You should return the pointer to the last struct you define as your result.
+ // If you are not adding any structs, just return `p_next_pointer`.
+ // See existing extensions for examples of this implementation.
+ virtual void *set_system_properties_and_get_next_pointer(void *p_next_pointer) { return p_next_pointer; }
+ virtual void *set_session_create_and_get_next_pointer(void *p_next_pointer) { return p_next_pointer; }
+ virtual void *set_swapchain_create_info_and_get_next_pointer(void *p_next_pointer) { return p_next_pointer; }
+
+ virtual void on_instance_created(const XrInstance p_instance) {}
+ virtual void on_instance_destroyed() {}
+ virtual void on_session_created(const XrSession p_instance) {}
+ virtual void on_process() {}
+ virtual void on_pre_render() {}
+ virtual void on_session_destroyed() {}
+
+ virtual void on_state_idle() {}
+ virtual void on_state_ready() {}
+ virtual void on_state_synchronized() {}
+ virtual void on_state_visible() {}
+ virtual void on_state_focused() {}
+ virtual void on_state_stopping() {}
+ virtual void on_state_loss_pending() {}
+ virtual void on_state_exiting() {}
+
+ // Returns true if the event was handled, false otherwise.
+ virtual bool on_event_polled(const XrEventDataBuffer &event) {
+ return false;
+ }
+
+ OpenXRExtensionWrapper(OpenXRAPI *p_openxr_api) { openxr_api = p_openxr_api; };
+ virtual ~OpenXRExtensionWrapper() = default;
+};
+
+class OpenXRGraphicsExtensionWrapper : public OpenXRExtensionWrapper {
+public:
+ virtual void get_usable_swapchain_formats(Vector<int64_t> &p_usable_swap_chains) = 0;
+ virtual String get_swapchain_format_name(int64_t p_swapchain_format) const = 0;
+ virtual bool get_swapchain_image_data(XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) = 0;
+ virtual void cleanup_swapchain_graphics_data(void **p_swapchain_graphics_data) = 0;
+ virtual bool create_projection_fov(const XrFovf p_fov, double p_z_near, double p_z_far, CameraMatrix &r_camera_matrix) = 0;
+ virtual bool copy_render_target_to_image(RID p_from_render_target, void *p_swapchain_graphics_data, int p_image_index) = 0;
+
+ OpenXRGraphicsExtensionWrapper(OpenXRAPI *p_openxr_api) :
+ OpenXRExtensionWrapper(p_openxr_api){};
+};
+
+#endif // ~OPENXR_EXTENSION_WRAPPER_H
diff --git a/modules/openxr/extensions/openxr_vulkan_extension.cpp b/modules/openxr/extensions/openxr_vulkan_extension.cpp
new file mode 100644
index 0000000000..c7c840fdf3
--- /dev/null
+++ b/modules/openxr/extensions/openxr_vulkan_extension.cpp
@@ -0,0 +1,750 @@
+/*************************************************************************/
+/* openxr_vulkan_extension.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "core/string/print_string.h"
+
+#include "modules/openxr/extensions/openxr_vulkan_extension.h"
+#include "modules/openxr/openxr_api.h"
+#include "modules/openxr/openxr_util.h"
+#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
+#include "servers/rendering/rendering_server_globals.h"
+#include "servers/rendering_server.h"
+
+// need to include Vulkan so we know of type definitions
+#define XR_USE_GRAPHICS_API_VULKAN
+
+#ifdef WINDOWS_ENABLED
+// Including windows.h here is absolutely evil, we shouldn't be doing this outside of platform
+// however due to the way the openxr headers are put together, we have no choice.
+#include <windows.h>
+#endif
+
+// include platform dependent structs
+#include <openxr/openxr_platform.h>
+
+PFN_xrGetVulkanGraphicsRequirements2KHR xrGetVulkanGraphicsRequirements2KHR_ptr = nullptr;
+PFN_xrCreateVulkanInstanceKHR xrCreateVulkanInstanceKHR_ptr = nullptr;
+PFN_xrGetVulkanGraphicsDevice2KHR xrGetVulkanGraphicsDevice2KHR_ptr = nullptr;
+PFN_xrCreateVulkanDeviceKHR xrCreateVulkanDeviceKHR_ptr = nullptr;
+
+OpenXRVulkanExtension::OpenXRVulkanExtension(OpenXRAPI *p_openxr_api) :
+ OpenXRGraphicsExtensionWrapper(p_openxr_api) {
+ VulkanContext::set_vulkan_hooks(this);
+
+ request_extensions[XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME] = nullptr; // must be available
+
+ ERR_FAIL_NULL(openxr_api);
+}
+
+OpenXRVulkanExtension::~OpenXRVulkanExtension() {
+ VulkanContext::set_vulkan_hooks(nullptr);
+}
+
+void OpenXRVulkanExtension::on_instance_created(const XrInstance p_instance) {
+ XrResult result;
+
+ ERR_FAIL_NULL(openxr_api);
+
+ // Obtain pointers to functions we're accessing here, they are (not yet) part of core.
+ result = xrGetInstanceProcAddr(p_instance, "xrGetVulkanGraphicsRequirements2KHR", (PFN_xrVoidFunction *)&xrGetVulkanGraphicsRequirements2KHR_ptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to xrGetVulkanGraphicsRequirements2KHR entry point [", openxr_api->get_error_string(result), "]");
+ }
+
+ result = xrGetInstanceProcAddr(p_instance, "xrCreateVulkanInstanceKHR", (PFN_xrVoidFunction *)&xrCreateVulkanInstanceKHR_ptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to xrCreateVulkanInstanceKHR entry point [", openxr_api->get_error_string(result), "]");
+ }
+
+ result = xrGetInstanceProcAddr(p_instance, "xrGetVulkanGraphicsDevice2KHR", (PFN_xrVoidFunction *)&xrGetVulkanGraphicsDevice2KHR_ptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to xrGetVulkanGraphicsDevice2KHR entry point [", openxr_api->get_error_string(result), "]");
+ }
+
+ result = xrGetInstanceProcAddr(p_instance, "xrCreateVulkanDeviceKHR", (PFN_xrVoidFunction *)&xrCreateVulkanDeviceKHR_ptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to xrCreateVulkanDeviceKHR entry point [", openxr_api->get_error_string(result), "]");
+ }
+}
+
+XrResult OpenXRVulkanExtension::xrGetVulkanGraphicsRequirements2KHR(XrInstance p_instance, XrSystemId p_system_id, XrGraphicsRequirementsVulkanKHR *p_graphics_requirements) {
+ ERR_FAIL_NULL_V(xrGetVulkanGraphicsRequirements2KHR_ptr, XR_ERROR_HANDLE_INVALID);
+
+ return (*xrGetVulkanGraphicsRequirements2KHR_ptr)(p_instance, p_system_id, p_graphics_requirements);
+}
+
+bool OpenXRVulkanExtension::check_graphics_api_support(XrVersion p_desired_version) {
+ ERR_FAIL_NULL_V(openxr_api, false);
+
+ XrGraphicsRequirementsVulkan2KHR vulkan_requirements = {
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR, // type
+ nullptr, // next
+ 0, // minApiVersionSupported
+ 0 // maxApiVersionSupported
+ };
+
+ XrResult result = xrGetVulkanGraphicsRequirements2KHR(openxr_api->get_instance(), openxr_api->get_system_id(), &vulkan_requirements);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get vulkan graphics requirements [", openxr_api->get_error_string(result), "]");
+ return false;
+ }
+
+ // #ifdef DEBUG
+ print_line("OpenXR: XrGraphicsRequirementsVulkan2KHR:");
+ print_line(" - minApiVersionSupported: ", OpenXRUtil::make_xr_version_string(vulkan_requirements.minApiVersionSupported));
+ print_line(" - maxApiVersionSupported: ", OpenXRUtil::make_xr_version_string(vulkan_requirements.maxApiVersionSupported));
+ // #endif
+
+ if (p_desired_version < vulkan_requirements.minApiVersionSupported) {
+ print_line("OpenXR: Requested Vulkan version does not meet the minimum version this runtime supports.");
+ print_line("- desired_version ", OpenXRUtil::make_xr_version_string(p_desired_version));
+ print_line("- minApiVersionSupported ", OpenXRUtil::make_xr_version_string(vulkan_requirements.minApiVersionSupported));
+ print_line("- maxApiVersionSupported ", OpenXRUtil::make_xr_version_string(vulkan_requirements.maxApiVersionSupported));
+ return false;
+ }
+
+ if (p_desired_version > vulkan_requirements.maxApiVersionSupported) {
+ print_line("OpenXR: Requested Vulkan version exceeds the maximum version this runtime has been tested on and is known to support.");
+ print_line("- desired_version ", OpenXRUtil::make_xr_version_string(p_desired_version));
+ print_line("- minApiVersionSupported ", OpenXRUtil::make_xr_version_string(vulkan_requirements.minApiVersionSupported));
+ print_line("- maxApiVersionSupported ", OpenXRUtil::make_xr_version_string(vulkan_requirements.maxApiVersionSupported));
+ }
+
+ return true;
+}
+
+XrResult OpenXRVulkanExtension::xrCreateVulkanInstanceKHR(XrInstance p_instance, const XrVulkanInstanceCreateInfoKHR *p_create_info, VkInstance *r_vulkan_instance, VkResult *r_vulkan_result) {
+ ERR_FAIL_NULL_V(xrCreateVulkanInstanceKHR_ptr, XR_ERROR_HANDLE_INVALID);
+
+ return (*xrCreateVulkanInstanceKHR_ptr)(p_instance, p_create_info, r_vulkan_instance, r_vulkan_result);
+}
+
+bool OpenXRVulkanExtension::create_vulkan_instance(const VkInstanceCreateInfo *p_vulkan_create_info, VkInstance *r_instance) {
+ // get the vulkan version we are creating
+ uint32_t vulkan_version = p_vulkan_create_info->pApplicationInfo->apiVersion;
+ uint32_t major_version = VK_VERSION_MAJOR(vulkan_version);
+ uint32_t minor_version = VK_VERSION_MINOR(vulkan_version);
+ uint32_t patch_version = VK_VERSION_PATCH(vulkan_version);
+ XrVersion desired_version = XR_MAKE_VERSION(major_version, minor_version, patch_version);
+
+ // check if this is supported
+ if (!check_graphics_api_support(desired_version)) {
+ return false;
+ }
+
+ XrVulkanInstanceCreateInfoKHR xr_vulkan_instance_info = {
+ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, // type
+ nullptr, // next
+ openxr_api->get_system_id(), // systemId
+ 0, // createFlags
+ vkGetInstanceProcAddr, // pfnGetInstanceProcAddr
+ p_vulkan_create_info, // vulkanCreateInfo
+ nullptr, // vulkanAllocator
+ };
+
+ VkResult vk_result = VK_SUCCESS;
+ XrResult result = xrCreateVulkanInstanceKHR(openxr_api->get_instance(), &xr_vulkan_instance_info, &vulkan_instance, &vk_result);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to create vulkan instance [", openxr_api->get_error_string(result), "]");
+ return false;
+ }
+
+ ERR_FAIL_COND_V_MSG(vk_result == VK_ERROR_INCOMPATIBLE_DRIVER, false,
+ "Cannot find a compatible Vulkan installable client driver (ICD).\n\n"
+ "vkCreateInstance Failure");
+ ERR_FAIL_COND_V_MSG(vk_result == VK_ERROR_EXTENSION_NOT_PRESENT, false,
+ "Cannot find a specified extension library.\n"
+ "Make sure your layers path is set appropriately.\n"
+ "vkCreateInstance Failure");
+ ERR_FAIL_COND_V_MSG(vk_result, false,
+ "vkCreateInstance failed.\n\n"
+ "Do you have a compatible Vulkan installable client driver (ICD) installed?\n"
+ "Please look at the Getting Started guide for additional information.\n"
+ "vkCreateInstance Failure");
+
+ *r_instance = vulkan_instance;
+
+ return true;
+}
+
+XrResult OpenXRVulkanExtension::xrGetVulkanGraphicsDevice2KHR(XrInstance p_instance, const XrVulkanGraphicsDeviceGetInfoKHR *p_get_info, VkPhysicalDevice *r_vulkan_physical_device) {
+ ERR_FAIL_NULL_V(xrGetVulkanGraphicsDevice2KHR_ptr, XR_ERROR_HANDLE_INVALID);
+
+ return (*xrGetVulkanGraphicsDevice2KHR_ptr)(p_instance, p_get_info, r_vulkan_physical_device);
+}
+
+bool OpenXRVulkanExtension::get_physical_device(VkPhysicalDevice *r_device) {
+ ERR_FAIL_NULL_V(openxr_api, false);
+
+ XrVulkanGraphicsDeviceGetInfoKHR get_info = {
+ XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, // type
+ nullptr, // next
+ openxr_api->get_system_id(), // systemId
+ vulkan_instance, // vulkanInstance
+ };
+
+ XrResult result = xrGetVulkanGraphicsDevice2KHR(openxr_api->get_instance(), &get_info, &vulkan_physical_device);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to obtain vulkan physical device [", openxr_api->get_error_string(result), "]");
+ return false;
+ }
+
+ *r_device = vulkan_physical_device;
+
+ return true;
+}
+
+XrResult OpenXRVulkanExtension::xrCreateVulkanDeviceKHR(XrInstance p_instance, const XrVulkanDeviceCreateInfoKHR *p_create_info, VkDevice *r_device, VkResult *r_result) {
+ ERR_FAIL_NULL_V(xrCreateVulkanDeviceKHR_ptr, XR_ERROR_HANDLE_INVALID);
+
+ return (*xrCreateVulkanDeviceKHR_ptr)(p_instance, p_create_info, r_device, r_result);
+}
+
+bool OpenXRVulkanExtension::create_vulkan_device(const VkDeviceCreateInfo *p_device_create_info, VkDevice *r_device) {
+ ERR_FAIL_NULL_V(openxr_api, false);
+
+ // the first entry in our queue list should be the one we need to remember...
+ vulkan_queue_family_index = p_device_create_info->pQueueCreateInfos[0].queueFamilyIndex;
+ vulkan_queue_index = 0; // ??
+
+ XrVulkanDeviceCreateInfoKHR create_info = {
+ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, // type
+ nullptr, // next
+ openxr_api->get_system_id(), // systemId
+ 0, // createFlags
+ vkGetInstanceProcAddr, // pfnGetInstanceProcAddr
+ vulkan_physical_device, // vulkanPhysicalDevice
+ p_device_create_info, // vulkanCreateInfo
+ nullptr // vulkanAllocator
+ };
+
+ VkResult vk_result = VK_SUCCESS;
+ XrResult result = xrCreateVulkanDeviceKHR(openxr_api->get_instance(), &create_info, &vulkan_device, &vk_result);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to create vulkan device [", openxr_api->get_error_string(result), "]");
+ return false;
+ }
+
+ if (vk_result != VK_SUCCESS) {
+ print_line("OpenXR: Failed to create vulkan device [vulkan error", vk_result, "]");
+ }
+
+ *r_device = vulkan_device;
+
+ return true;
+}
+
+XrGraphicsBindingVulkanKHR OpenXRVulkanExtension::graphics_binding_vulkan;
+
+void *OpenXRVulkanExtension::set_session_create_and_get_next_pointer(void *p_next_pointer) {
+ graphics_binding_vulkan.type = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR;
+ graphics_binding_vulkan.next = p_next_pointer;
+ graphics_binding_vulkan.instance = vulkan_instance;
+ graphics_binding_vulkan.physicalDevice = vulkan_physical_device;
+ graphics_binding_vulkan.device = vulkan_device;
+ graphics_binding_vulkan.queueFamilyIndex = vulkan_queue_family_index;
+ graphics_binding_vulkan.queueIndex = vulkan_queue_index;
+
+ return &graphics_binding_vulkan;
+}
+
+void OpenXRVulkanExtension::get_usable_swapchain_formats(Vector<int64_t> &p_usable_swap_chains) {
+ // We might want to do more here especially if we keep things in linear color space
+ // Possibly add in R10G10B10A2 as an option if we're using the mobile renderer.
+ p_usable_swap_chains.push_back(VK_FORMAT_R8G8B8A8_SRGB);
+ p_usable_swap_chains.push_back(VK_FORMAT_B8G8R8A8_SRGB);
+ p_usable_swap_chains.push_back(VK_FORMAT_R8G8B8A8_UINT);
+ p_usable_swap_chains.push_back(VK_FORMAT_B8G8R8A8_UINT);
+}
+
+bool OpenXRVulkanExtension::get_swapchain_image_data(XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) {
+ XrSwapchainImageVulkanKHR *images = nullptr;
+
+ RenderingServer *rendering_server = RenderingServer::get_singleton();
+ ERR_FAIL_NULL_V(rendering_server, false);
+ RenderingDevice *rendering_device = rendering_server->get_rendering_device();
+ ERR_FAIL_NULL_V(rendering_device, false);
+
+ uint32_t swapchain_length;
+ XrResult result = xrEnumerateSwapchainImages(p_swapchain, 0, &swapchain_length, nullptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get swapchaim image count [", openxr_api->get_error_string(result), "]");
+ return false;
+ }
+
+ images = (XrSwapchainImageVulkanKHR *)memalloc(sizeof(XrSwapchainImageVulkanKHR) * swapchain_length);
+ ERR_FAIL_NULL_V_MSG(images, false, "OpenXR Couldn't allocate memory for swap chain image");
+
+ for (uint64_t i = 0; i < swapchain_length; i++) {
+ images[i].type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR;
+ images[i].next = nullptr;
+ images[i].image = VK_NULL_HANDLE;
+ }
+
+ result = xrEnumerateSwapchainImages(p_swapchain, swapchain_length, &swapchain_length, (XrSwapchainImageBaseHeader *)images);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get swapchaim images [", openxr_api->get_error_string(result), "]");
+ memfree(images);
+ return false;
+ }
+
+ // SwapchainGraphicsData *data = (SwapchainGraphicsData *)memalloc(sizeof(SwapchainGraphicsData));
+ SwapchainGraphicsData *data = memnew(SwapchainGraphicsData);
+ if (data == nullptr) {
+ print_line("OpenXR: Failed to allocate memory for swapchain data");
+ memfree(images);
+ return false;
+ }
+ *r_swapchain_graphics_data = data;
+ data->is_multiview = (p_array_size > 1);
+
+ RenderingDevice::DataFormat format = RenderingDevice::DATA_FORMAT_R8G8B8A8_SRGB;
+ RenderingDevice::TextureSamples samples = RenderingDevice::TEXTURE_SAMPLES_1;
+ uint64_t usage_flags = RenderingDevice::TEXTURE_USAGE_SAMPLING_BIT | RenderingDevice::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
+
+ switch (p_swapchain_format) {
+ case VK_FORMAT_R8G8B8A8_SRGB:
+ // Even though this is an sRGB framebuffer format we're using UNORM here.
+ // The reason here is because Godot does a linear to sRGB conversion while
+ // with the sRGB format, this conversion would be doubled by the hardware.
+ // This also means we're reading the values as is for our preview on screen.
+ // The OpenXR runtime however is still treating this as an sRGB format and
+ // will thus do an sRGB -> Linear conversion as expected.
+ // format = RenderingDevice::DATA_FORMAT_R8G8B8A8_SRGB;
+ format = RenderingDevice::DATA_FORMAT_R8G8B8A8_UNORM;
+ break;
+ case VK_FORMAT_B8G8R8A8_SRGB:
+ // format = RenderingDevice::DATA_FORMAT_B8G8R8A8_SRGB;
+ format = RenderingDevice::DATA_FORMAT_B8G8R8A8_UNORM;
+ break;
+ case VK_FORMAT_R8G8B8A8_UINT:
+ format = RenderingDevice::DATA_FORMAT_R8G8B8A8_UINT;
+ break;
+ case VK_FORMAT_B8G8R8A8_UINT:
+ format = RenderingDevice::DATA_FORMAT_B8G8R8A8_UINT;
+ break;
+ default:
+ // continue with our default value
+ print_line("Unsupported swapchain format ", p_swapchain_format);
+ break;
+ }
+
+ switch (p_sample_count) {
+ case 1:
+ samples = RenderingDevice::TEXTURE_SAMPLES_1;
+ break;
+ case 2:
+ samples = RenderingDevice::TEXTURE_SAMPLES_2;
+ break;
+ case 4:
+ samples = RenderingDevice::TEXTURE_SAMPLES_4;
+ break;
+ case 8:
+ samples = RenderingDevice::TEXTURE_SAMPLES_8;
+ break;
+ case 16:
+ samples = RenderingDevice::TEXTURE_SAMPLES_16;
+ break;
+ case 32:
+ samples = RenderingDevice::TEXTURE_SAMPLES_32;
+ break;
+ case 64:
+ samples = RenderingDevice::TEXTURE_SAMPLES_64;
+ break;
+ default:
+ // continue with our default value
+ print_line("Unsupported sample count ", p_sample_count);
+ break;
+ }
+
+ Vector<RID> image_rids;
+ Vector<RID> framebuffers;
+
+ // create Godot texture objects for each entry in our swapchain
+ for (uint64_t i = 0; i < swapchain_length; i++) {
+ RID image_rid = rendering_device->texture_create_from_extension(
+ p_array_size == 1 ? RenderingDevice::TEXTURE_TYPE_2D : RenderingDevice::TEXTURE_TYPE_2D_ARRAY,
+ format,
+ samples,
+ usage_flags,
+ (uint64_t)images[i].image,
+ p_width,
+ p_height,
+ 1,
+ p_array_size);
+
+ image_rids.push_back(image_rid);
+
+ {
+ Vector<RID> fb;
+ fb.push_back(image_rid);
+
+ RID fb_rid = rendering_device->framebuffer_create(fb, RenderingDevice::INVALID_ID, p_array_size);
+ framebuffers.push_back(fb_rid);
+ }
+ }
+
+ data->image_rids = image_rids;
+ data->framebuffers = framebuffers;
+
+ memfree(images);
+
+ return true;
+}
+
+bool OpenXRVulkanExtension::create_projection_fov(const XrFovf p_fov, double p_z_near, double p_z_far, CameraMatrix &r_camera_matrix) {
+ // Even though this is a Vulkan renderer we're using OpenGL coordinate systems
+ XrMatrix4x4f matrix;
+ XrMatrix4x4f_CreateProjectionFov(&matrix, GRAPHICS_OPENGL, p_fov, (float)p_z_near, (float)p_z_far);
+
+ for (int j = 0; j < 4; j++) {
+ for (int i = 0; i < 4; i++) {
+ r_camera_matrix.matrix[j][i] = matrix.m[j * 4 + i];
+ }
+ }
+
+ return true;
+}
+
+bool OpenXRVulkanExtension::copy_render_target_to_image(RID p_from_render_target, void *p_swapchain_graphics_data, int p_image_index) {
+ SwapchainGraphicsData *data = (SwapchainGraphicsData *)p_swapchain_graphics_data;
+ ERR_FAIL_NULL_V(data, false);
+ ERR_FAIL_COND_V(p_from_render_target.is_null(), false);
+ ERR_FAIL_NULL_V(RendererStorageRD::base_singleton, false);
+
+ RID source_image = RendererStorageRD::base_singleton->render_target_get_rd_texture(p_from_render_target);
+ ERR_FAIL_COND_V(source_image.is_null(), false);
+
+ RID depth_image; // TODO implement
+
+ ERR_FAIL_INDEX_V(p_image_index, data->framebuffers.size(), false);
+ RID fb = data->framebuffers[p_image_index];
+ ERR_FAIL_COND_V(fb.is_null(), false);
+
+ // Our vulkan extension can only be used in conjunction with our vulkan renderer.
+ // We need access to the effects object in order to have access to our copy logic.
+ // Breaking all the rules but there is no nice way to do this.
+ EffectsRD *effects = RendererStorageRD::base_singleton->get_effects();
+ ERR_FAIL_NULL_V(effects, false);
+ effects->copy_to_fb_rect(source_image, fb, Rect2i(), false, false, false, false, depth_image, data->is_multiview);
+
+ return true;
+}
+
+void OpenXRVulkanExtension::cleanup_swapchain_graphics_data(void **p_swapchain_graphics_data) {
+ if (*p_swapchain_graphics_data == nullptr) {
+ return;
+ }
+
+ SwapchainGraphicsData *data = (SwapchainGraphicsData *)*p_swapchain_graphics_data;
+
+ RenderingServer *rendering_server = RenderingServer::get_singleton();
+ ERR_FAIL_NULL(rendering_server);
+ RenderingDevice *rendering_device = rendering_server->get_rendering_device();
+ ERR_FAIL_NULL(rendering_device);
+
+ for (int i = 0; i < data->image_rids.size(); i++) {
+ // This should clean up our RIDs and associated texture objects but shouldn't destroy the images, they are owned by our XrSwapchain
+ rendering_device->free(data->image_rids[i]);
+ }
+ data->image_rids.clear();
+
+ for (int i = 0; i < data->framebuffers.size(); i++) {
+ // This should clean up our RIDs and associated texture objects but shouldn't destroy the images, they are owned by our XrSwapchain
+ rendering_device->free(data->framebuffers[i]);
+ }
+ data->framebuffers.clear();
+
+ memdelete(data);
+ *p_swapchain_graphics_data = nullptr;
+}
+
+#define ENUM_TO_STRING_CASE(e) \
+ case e: { \
+ return String(#e); \
+ } break;
+
+String OpenXRVulkanExtension::get_swapchain_format_name(int64_t p_swapchain_format) const {
+ // This really should be in vulkan_context...
+ VkFormat format = VkFormat(p_swapchain_format);
+ switch (format) {
+ ENUM_TO_STRING_CASE(VK_FORMAT_UNDEFINED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R4G4_UNORM_PACK8)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R4G4B4A4_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B4G4R4A4_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R5G6B5_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B5G6R5_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R5G5B5A1_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B5G5R5A1_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A1R5G5B5_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R8G8B8A8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8A8_SRGB)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_UNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_SNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_USCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_SSCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_UINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_SINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A8B8G8R8_SRGB_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_UNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_SNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_USCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_SSCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_UINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2R10G10B10_SINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_UNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_SNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_USCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_SSCALED_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_UINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A2B10G10R10_SINT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_SNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_USCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_SSCALED)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R16G16B16A16_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32A32_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32A32_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R32G32B32A32_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64A64_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64A64_SINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R64G64B64A64_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B10G11R11_UFLOAT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_D16_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_X8_D24_UNORM_PACK32)
+ ENUM_TO_STRING_CASE(VK_FORMAT_D32_SFLOAT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_S8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_D16_UNORM_S8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_D24_UNORM_S8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_D32_SFLOAT_S8_UINT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC1_RGB_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC1_RGB_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC1_RGBA_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC1_RGBA_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC2_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC2_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC3_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC3_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC4_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC4_SNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC5_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC5_SNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC6H_UFLOAT_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC6H_SFLOAT_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC7_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_BC7_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_EAC_R11_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_EAC_R11_SNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_EAC_R11G11_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_EAC_R11G11_SNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_4x4_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_4x4_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x4_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x4_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x5_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x5_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x5_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x5_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x6_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x6_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x5_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x5_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x6_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x6_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x8_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x8_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x5_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x5_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x6_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x6_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x8_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x8_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x10_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x10_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x10_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x10_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x12_UNORM_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x12_SRGB_BLOCK)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8B8G8R8_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B8G8R8G8_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8R8_2PLANE_420_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8R8_2PLANE_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R10X6_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R12X4_UNORM_PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R12X4G12X4_UNORM_2PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16B16G16R16_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_B16G16R16G16_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16R16_2PLANE_420_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16R16_2PLANE_422_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT)
+ ENUM_TO_STRING_CASE(VK_FORMAT_MAX_ENUM)
+ default: {
+ return String("Swapchain format ") + String::num_int64(int64_t(p_swapchain_format));
+ } break;
+ }
+}
diff --git a/modules/openxr/extensions/openxr_vulkan_extension.h b/modules/openxr/extensions/openxr_vulkan_extension.h
new file mode 100644
index 0000000000..cf55ae264f
--- /dev/null
+++ b/modules/openxr/extensions/openxr_vulkan_extension.h
@@ -0,0 +1,93 @@
+/*************************************************************************/
+/* openxr_vulkan_extension.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_VULKAN_EXTENSION_H
+#define OPENXR_VULKAN_EXTENSION_H
+
+#include "core/templates/vector.h"
+#include "openxr_extension_wrapper.h"
+
+#include "drivers/vulkan/vulkan_context.h"
+
+// Forward declare these so we don't need OpenXR headers where-ever this is included
+// Including OpenXR at this point gives loads and loads of compile issues especially
+// on Windows because windows.h is EVIL and really shouldn't be included outside of platform
+// but we really don't have a choice in the matter
+
+struct XrGraphicsRequirementsVulkanKHR;
+struct XrVulkanInstanceCreateInfoKHR;
+struct XrVulkanGraphicsDeviceGetInfoKHR;
+struct XrVulkanDeviceCreateInfoKHR;
+struct XrGraphicsBindingVulkanKHR;
+
+class OpenXRVulkanExtension : public OpenXRGraphicsExtensionWrapper, VulkanHooks {
+public:
+ OpenXRVulkanExtension(OpenXRAPI *p_openxr_api);
+ virtual ~OpenXRVulkanExtension() override;
+
+ virtual void on_instance_created(const XrInstance p_instance) override;
+ virtual void *set_session_create_and_get_next_pointer(void *p_next_pointer) override;
+
+ virtual bool create_vulkan_instance(const VkInstanceCreateInfo *p_vulkan_create_info, VkInstance *r_instance) override;
+ virtual bool get_physical_device(VkPhysicalDevice *r_device) override;
+ virtual bool create_vulkan_device(const VkDeviceCreateInfo *p_device_create_info, VkDevice *r_device) override;
+
+ virtual void get_usable_swapchain_formats(Vector<int64_t> &p_usable_swap_chains) override;
+ virtual String get_swapchain_format_name(int64_t p_swapchain_format) const override;
+ virtual bool get_swapchain_image_data(XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) override;
+ virtual void cleanup_swapchain_graphics_data(void **p_swapchain_graphics_data) override;
+ virtual bool create_projection_fov(const XrFovf p_fov, double p_z_near, double p_z_far, CameraMatrix &r_camera_matrix) override;
+ virtual bool copy_render_target_to_image(RID p_from_render_target, void *p_swapchain_graphics_data, int p_image_index) override;
+
+private:
+ static OpenXRVulkanExtension *singleton;
+ static XrGraphicsBindingVulkanKHR graphics_binding_vulkan; // declaring this as static so we don't need to know its size and we only need it once when creating our session
+
+ struct SwapchainGraphicsData {
+ bool is_multiview;
+ Vector<RID> image_rids;
+ Vector<RID> framebuffers;
+ };
+
+ bool check_graphics_api_support(XrVersion p_desired_version);
+
+ VkInstance vulkan_instance;
+ VkPhysicalDevice vulkan_physical_device;
+ VkDevice vulkan_device;
+ uint32_t vulkan_queue_family_index;
+ uint32_t vulkan_queue_index;
+
+ XrResult xrGetVulkanGraphicsRequirements2KHR(XrInstance p_instance, XrSystemId p_system_id, XrGraphicsRequirementsVulkanKHR *p_graphics_requirements);
+ XrResult xrCreateVulkanInstanceKHR(XrInstance p_instance, const XrVulkanInstanceCreateInfoKHR *p_create_info, VkInstance *r_vulkan_instance, VkResult *r_vulkan_result);
+ XrResult xrGetVulkanGraphicsDevice2KHR(XrInstance p_instance, const XrVulkanGraphicsDeviceGetInfoKHR *p_get_info, VkPhysicalDevice *r_vulkan_physical_device);
+ XrResult xrCreateVulkanDeviceKHR(XrInstance p_instance, const XrVulkanDeviceCreateInfoKHR *p_create_info, VkDevice *r_device, VkResult *r_result);
+};
+
+#endif // !OPENXR_VULKAN_EXTENSION_H
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
new file mode 100644
index 0000000000..e3da214cc8
--- /dev/null
+++ b/modules/openxr/openxr_api.cpp
@@ -0,0 +1,2171 @@
+/*************************************************************************/
+/* openxr_api.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_api.h"
+#include "openxr_util.h"
+
+#include "core/config/engine.h"
+#include "core/config/project_settings.h"
+#include "core/os/memory.h"
+#include "core/version.h"
+
+#ifdef TOOLS_ENABLED
+#include "editor/editor_settings.h"
+#endif
+
+#ifdef ANDROID_ENABLED
+#include "extensions/openxr_android_extension.h"
+#endif
+
+#ifdef VULKAN_ENABLED
+#include "extensions/openxr_vulkan_extension.h"
+#endif
+
+OpenXRAPI *OpenXRAPI::singleton = nullptr;
+
+void OpenXRAPI::setup_global_defs() {
+ // As OpenXRAPI is not constructed if OpenXR is not enabled, we register our project and editor settings here
+
+ // Project settings
+ GLOBAL_DEF_BASIC("xr/openxr/enabled", false);
+ GLOBAL_DEF_BASIC("xr/openxr/default_action_map", "res://default_action_map.tres");
+ ProjectSettings::get_singleton()->set_custom_property_info("xr/openxr/default_action_map", PropertyInfo(Variant::STRING, "xr/openxr/default_action_map", PROPERTY_HINT_FILE, "*.tres"));
+
+ GLOBAL_DEF_BASIC("xr/openxr/form_factor", "0");
+ ProjectSettings::get_singleton()->set_custom_property_info("xr/openxr/form_factor", PropertyInfo(Variant::INT, "xr/openxr/form_factor", PROPERTY_HINT_ENUM, "Head mounted,Handheld"));
+
+ GLOBAL_DEF_BASIC("xr/openxr/view_configuration", "1");
+ ProjectSettings::get_singleton()->set_custom_property_info("xr/openxr/view_configuration", PropertyInfo(Variant::INT, "xr/openxr/view_configuration", PROPERTY_HINT_ENUM, "Mono,Stereo")); // "Mono,Stereo,Quad,Observer"
+
+ GLOBAL_DEF_BASIC("xr/openxr/reference_space", "1");
+ ProjectSettings::get_singleton()->set_custom_property_info("xr/openxr/reference_space", PropertyInfo(Variant::INT, "xr/openxr/reference_space", PROPERTY_HINT_ENUM, "Local,Stage"));
+
+#ifdef TOOLS_ENABLED
+ // Disabled for now, using XR inside of the editor we'll be working on during the coming months.
+
+ // editor settings (it seems we're too early in the process when setting up rendering, to access editor settings...)
+ // EDITOR_DEF_RST("xr/openxr/in_editor", false);
+ // GLOBAL_DEF("xr/openxr/in_editor", false);
+#endif
+}
+
+bool OpenXRAPI::openxr_is_enabled() {
+ // @TODO we need an overrule switch so we can force enable openxr, i.e run "godot --openxr_enabled"
+
+ if (Engine::get_singleton()->is_editor_hint()) {
+#ifdef TOOLS_ENABLED
+ // Disabled for now, using XR inside of the editor we'll be working on during the coming months.
+ return false;
+
+ // bool enabled = GLOBAL_GET("xr/openxr/in_editor"); // EDITOR_GET("xr/openxr/in_editor");
+ // return enabled;
+#else
+ // we should never get here, editor hint won't be true if the editor isn't compiled in.
+ return false;
+#endif
+ } else {
+ bool enabled = GLOBAL_GET("xr/openxr/enabled");
+ return enabled;
+ }
+}
+
+OpenXRAPI *OpenXRAPI::get_singleton() {
+ if (singleton != nullptr) {
+ // already constructed, return our singleton
+ return singleton;
+ } else if (openxr_is_enabled()) {
+ // construct our singleton and return it
+ singleton = memnew(OpenXRAPI);
+ return singleton;
+ } else {
+ // not enabled, don't instantiate, return nullptr
+ return nullptr;
+ }
+}
+
+String OpenXRAPI::get_default_action_map_resource_name() {
+ String name = GLOBAL_GET("xr/openxr/default_action_map");
+
+ return name;
+}
+
+String OpenXRAPI::get_error_string(XrResult result) {
+ if (XR_SUCCEEDED(result)) {
+ return String("Succeeded");
+ }
+
+ if (instance == XR_NULL_HANDLE) {
+ Array args;
+ args.push_back(Variant(result));
+ return String("Error code {0}").format(args);
+ }
+
+ char resultString[XR_MAX_RESULT_STRING_SIZE];
+ xrResultToString(instance, result, resultString);
+
+ return String(resultString);
+}
+
+String OpenXRAPI::get_swapchain_format_name(int64_t p_swapchain_format) const {
+ // This is rendering engine dependend...
+ if (graphics_extension) {
+ return graphics_extension->get_swapchain_format_name(p_swapchain_format);
+ }
+
+ return String("Swapchain format ") + String::num_int64(int64_t(p_swapchain_format));
+}
+
+bool OpenXRAPI::load_layer_properties() {
+ // This queries additional layers that are available and can be initialised when we create our OpenXR instance
+ if (layer_properties != nullptr) {
+ // already retrieved this
+ return true;
+ }
+
+ // Note, instance is not yet setup so we can't use get_error_string to retrieve our error
+ XrResult result = xrEnumerateApiLayerProperties(0, &num_layer_properties, nullptr);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate number of api layer properties");
+
+ layer_properties = (XrApiLayerProperties *)memalloc(sizeof(XrApiLayerProperties) * num_layer_properties);
+ ERR_FAIL_NULL_V(layer_properties, false);
+ for (uint32_t i = 0; i < num_layer_properties; i++) {
+ layer_properties[i].type = XR_TYPE_API_LAYER_PROPERTIES;
+ layer_properties[i].next = nullptr;
+ }
+
+ result = xrEnumerateApiLayerProperties(num_layer_properties, &num_layer_properties, layer_properties);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate api layer properties");
+
+#ifdef DEBUG
+ for (uint32_t i = 0; i < num_layer_properties; i++) {
+ print_line("OpenXR: Found OpenXR layer ", layer_properties[i].layerName);
+ }
+#endif
+
+ return true;
+}
+
+bool OpenXRAPI::load_supported_extensions() {
+ // This queries supported extensions that are available and can be initialised when we create our OpenXR instance
+
+ if (supported_extensions != nullptr) {
+ // already retrieved this
+ return true;
+ }
+
+ // Note, instance is not yet setup so we can't use get_error_string to retrieve our error
+ XrResult result = xrEnumerateInstanceExtensionProperties(nullptr, 0, &num_supported_extensions, nullptr);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate number of extension properties");
+
+ supported_extensions = (XrExtensionProperties *)memalloc(sizeof(XrExtensionProperties) * num_supported_extensions);
+ ERR_FAIL_NULL_V(supported_extensions, false);
+
+ // set our types
+ for (uint32_t i = 0; i < num_supported_extensions; i++) {
+ supported_extensions[i].type = XR_TYPE_EXTENSION_PROPERTIES;
+ supported_extensions[i].next = nullptr;
+ }
+ result = xrEnumerateInstanceExtensionProperties(nullptr, num_supported_extensions, &num_supported_extensions, supported_extensions);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate extension properties");
+
+#ifdef DEBUG
+ for (uint32_t i = 0; i < num_supported_extensions; i++) {
+ print_line("OpenXR: Found OpenXR extension ", supported_extensions[i].extensionName);
+ }
+#endif
+
+ return true;
+}
+
+bool OpenXRAPI::is_extension_supported(const char *p_extension) const {
+ for (uint32_t i = 0; i < num_supported_extensions; i++) {
+ if (strcmp(supported_extensions[i].extensionName, p_extension)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void OpenXRAPI::copy_string_to_char_buffer(const String p_string, char *p_buffer, int p_buffer_len) {
+ CharString char_string = p_string.utf8();
+ int len = char_string.length();
+ if (len < p_buffer_len - 1) {
+ // was having weird CI issues with strcpy so....
+ memcpy(p_buffer, char_string.get_data(), len);
+ p_buffer[len] = '\0';
+ } else {
+ memcpy(p_buffer, char_string.get_data(), p_buffer_len - 1);
+ p_buffer[p_buffer_len - 1] = '\0';
+ }
+}
+
+bool OpenXRAPI::create_instance() {
+ // Create our OpenXR instance, this will query any registered extension wrappers for extensions we need to enable.
+
+ // Append the extensions requested by the registered extension wrappers.
+ Map<const char *, bool *> requested_extensions;
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ Map<const char *, bool *> wrapper_request_extensions = wrapper->get_request_extensions();
+
+ // requested_extensions.insert(wrapper_request_extensions.begin(), wrapper_request_extensions.end());
+ for (auto &requested_extension : wrapper_request_extensions) {
+ requested_extensions[requested_extension.key] = requested_extension.value;
+ }
+ }
+
+ // Check which extensions are supported
+ enabled_extensions.clear();
+ for (auto &requested_extension : requested_extensions) {
+ if (!is_extension_supported(requested_extension.key)) {
+ if (requested_extension.value == nullptr) {
+ // nullptr means this is a manditory extension so we fail
+ ERR_FAIL_V_MSG(false, "OpenXR: OpenXR Runtime does not support OpenGL extension!");
+ } else {
+ // set this extension as not supported
+ *requested_extension.value = false;
+ }
+ } else if (requested_extension.value != nullptr) {
+ // set this extension as supported
+ *requested_extension.value = true;
+
+ // and record that we want to enable it
+ enabled_extensions.push_back(requested_extension.key);
+ } else {
+ // record that we want to enable this
+ enabled_extensions.push_back(requested_extension.key);
+ }
+ }
+
+ // Get our project name
+ String project_name = GLOBAL_GET("application/config/name");
+
+ // Create our OpenXR instance
+ XrApplicationInfo application_info{
+ "", // applicationName, we'll set this down below
+ 1, // applicationVersion, we don't currently have this
+ "Godot Game Engine", // engineName
+ VERSION_MAJOR * 10000 + VERSION_MINOR * 100 + VERSION_PATCH, // engineVersion 4.0 -> 40000, 4.0.1 -> 40001, 4.1 -> 40100, etc.
+ XR_CURRENT_API_VERSION // apiVersion
+ };
+
+ XrInstanceCreateInfo instance_create_info = {
+ XR_TYPE_INSTANCE_CREATE_INFO, // type
+ nullptr, // next
+ 0, // createFlags
+ application_info, // applicationInfo
+ 0, // enabledApiLayerCount, need to find out if we need support for this?
+ nullptr, // enabledApiLayerNames
+ uint32_t(enabled_extensions.size()), // enabledExtensionCount
+ enabled_extensions.ptr() // enabledExtensionNames
+ };
+
+ copy_string_to_char_buffer(project_name, instance_create_info.applicationInfo.applicationName, XR_MAX_APPLICATION_NAME_SIZE);
+
+ XrResult result = xrCreateInstance(&instance_create_info, &instance);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "Failed to create XR instance.");
+
+ // from this point on we can use get_error_string to get more info about our errors...
+
+ XrInstanceProperties instanceProps = {
+ XR_TYPE_INSTANCE_PROPERTIES, // type;
+ nullptr, // next
+ 0, // runtimeVersion, from here will be set by our get call
+ "" // runtimeName
+ };
+ result = xrGetInstanceProperties(instance, &instanceProps);
+ if (XR_FAILED(result)) {
+ // not fatal probably
+ print_line("OpenXR: Failed to get XR instance properties [", get_error_string(result), "]");
+ } else {
+ print_line("OpenXR: Running on OpenXR runtime: ", instanceProps.runtimeName, " ", OpenXRUtil::make_xr_version_string(instanceProps.runtimeVersion));
+ }
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_instance_created(instance);
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::get_system_info() {
+ // Retrieve basic OpenXR system info based on the form factor we desire
+
+ // Retrieve the system for our form factor, fails if form factor is not available
+ XrSystemGetInfo system_get_info = {
+ XR_TYPE_SYSTEM_GET_INFO, // type;
+ nullptr, // next
+ form_factor // formFactor
+ };
+
+ XrResult result = xrGetSystem(instance, &system_get_info, &system_id);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get system for our form factor [", get_error_string(result), "]");
+ return false;
+ }
+
+ // obtain info about our system, writing this out completely to make CI on Linux happy..
+ void *next_pointer = nullptr;
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ void *np = wrapper->set_system_properties_and_get_next_pointer(next_pointer);
+ if (np != nullptr) {
+ next_pointer = np;
+ }
+ }
+
+ XrSystemProperties system_properties = {
+ XR_TYPE_SYSTEM_PROPERTIES, // type
+ next_pointer, // next
+ 0, // systemId, from here will be set by our get call
+ 0, // vendorId
+ "", // systemName
+ {
+ 0, // maxSwapchainImageHeight
+ 0, // maxSwapchainImageWidth
+ 0, // maxLayerCount
+ }, // graphicsProperties
+ {
+ false, // orientationTracking
+ false // positionTracking
+ } // trackingProperties
+ };
+
+ result = xrGetSystemProperties(instance, system_id, &system_properties);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get System properties [", get_error_string(result), "]");
+ return false;
+ }
+
+ // remember this state, we'll use it later
+ system_name = String(system_properties.systemName);
+ vendor_id = system_properties.vendorId;
+ graphics_properties = system_properties.graphicsProperties;
+ tracking_properties = system_properties.trackingProperties;
+
+ return true;
+}
+
+bool OpenXRAPI::load_supported_view_configuration_types() {
+ // This queries the supported configuration types, likely there will only be one chosing between Mono (phone AR) and Stereo (HMDs)
+
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false);
+
+ if (supported_view_configuration_types != nullptr) {
+ // free previous results
+ memfree(supported_view_configuration_types);
+ supported_view_configuration_types = nullptr;
+ }
+
+ XrResult result = xrEnumerateViewConfigurations(instance, system_id, 0, &num_view_configuration_types, nullptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get view configuration count [", get_error_string(result), "]");
+ return false;
+ }
+
+ supported_view_configuration_types = (XrViewConfigurationType *)memalloc(sizeof(XrViewConfigurationType) * num_view_configuration_types);
+ ERR_FAIL_NULL_V(supported_view_configuration_types, false);
+
+ result = xrEnumerateViewConfigurations(instance, system_id, num_view_configuration_types, &num_view_configuration_types, supported_view_configuration_types);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerateview configurations");
+
+#ifdef DEBUG
+ for (uint32_t i = 0; i < num_view_configuration_types; i++) {
+ print_line("OpenXR: Found supported view configuration ", OpenXRUtil::get_view_configuration_name(supported_view_configuration_types[i]));
+ }
+#endif
+
+ return true;
+}
+
+bool OpenXRAPI::is_view_configuration_supported(XrViewConfigurationType p_configuration_type) const {
+ ERR_FAIL_NULL_V(supported_view_configuration_types, false);
+
+ for (uint32_t i = 0; i < num_view_configuration_types; i++) {
+ if (supported_view_configuration_types[i] == p_configuration_type) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool OpenXRAPI::load_supported_view_configuration_views(XrViewConfigurationType p_configuration_type) {
+ // This loads our view configuration for each view so for a stereo HMD, we'll get two entries (that are likely identical)
+ // The returned data supplies us with the recommended render target size
+
+ if (!is_view_configuration_supported(p_configuration_type)) {
+ print_line("OpenXR: View configuration ", OpenXRUtil::get_view_configuration_name(view_configuration), " is not supported.");
+ return false;
+ }
+
+ if (view_configuration_views != nullptr) {
+ // free previous results
+ memfree(view_configuration_views);
+ view_configuration_views = nullptr;
+ }
+
+ XrResult result = xrEnumerateViewConfigurationViews(instance, system_id, p_configuration_type, 0, &view_count, nullptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get view configuration count [", get_error_string(result), "]");
+ return false;
+ }
+
+ view_configuration_views = (XrViewConfigurationView *)memalloc(sizeof(XrViewConfigurationView) * view_count);
+ ERR_FAIL_NULL_V(view_configuration_views, false);
+
+ for (uint32_t i = 0; i < view_count; i++) {
+ view_configuration_views[i].type = XR_TYPE_VIEW_CONFIGURATION_VIEW;
+ view_configuration_views[i].next = NULL;
+ }
+
+ result = xrEnumerateViewConfigurationViews(instance, system_id, p_configuration_type, view_count, &view_count, view_configuration_views);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate view configurations");
+
+#ifdef DEBUG
+ for (uint32_t i = 0; i < view_count; i++) {
+ print_line("OpenXR: Found supported view configuration view");
+ print_line(" - width: ", view_configuration_views[i].maxImageRectWidth);
+ print_line(" - height: ", view_configuration_views[i].maxImageRectHeight);
+ print_line(" - sample count: ", view_configuration_views[i].maxSwapchainSampleCount);
+ print_line(" - recommended render width: ", view_configuration_views[i].recommendedImageRectWidth);
+ print_line(" - recommended render height: ", view_configuration_views[i].recommendedImageRectHeight);
+ print_line(" - recommended render sample count: ", view_configuration_views[i].recommendedSwapchainSampleCount);
+ }
+#endif
+
+ return true;
+}
+
+void OpenXRAPI::destroy_instance() {
+ if (view_configuration_views != nullptr) {
+ memfree(view_configuration_views);
+ view_configuration_views = nullptr;
+ }
+
+ if (supported_view_configuration_types != nullptr) {
+ memfree(supported_view_configuration_types);
+ supported_view_configuration_types = nullptr;
+ }
+
+ if (instance != XR_NULL_HANDLE) {
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_instance_destroyed();
+ }
+
+ xrDestroyInstance(instance);
+ instance = XR_NULL_HANDLE;
+ }
+ enabled_extensions.clear();
+}
+
+bool OpenXRAPI::create_session() {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false);
+ ERR_FAIL_COND_V(session != XR_NULL_HANDLE, false);
+
+ void *next_pointer = nullptr;
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ void *np = wrapper->set_session_create_and_get_next_pointer(next_pointer);
+ if (np != nullptr) {
+ next_pointer = np;
+ }
+ }
+
+ XrSessionCreateInfo session_create_info = {
+ XR_TYPE_SESSION_CREATE_INFO, // type
+ next_pointer, // next
+ 0, // createFlags
+ system_id // systemId
+ };
+
+ XrResult result = xrCreateSession(instance, &session_create_info, &session);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to create session [", get_error_string(result), "]");
+ return false;
+ }
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_session_created(session);
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::load_supported_reference_spaces() {
+ // loads the supported reference spaces for our OpenXR session
+
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ if (supported_reference_spaces != nullptr) {
+ // free previous results
+ memfree(supported_reference_spaces);
+ supported_reference_spaces = nullptr;
+ }
+
+ XrResult result = xrEnumerateReferenceSpaces(session, 0, &num_reference_spaces, nullptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get reference space count [", get_error_string(result), "]");
+ return false;
+ }
+
+ supported_reference_spaces = (XrReferenceSpaceType *)memalloc(sizeof(XrReferenceSpaceType) * num_reference_spaces);
+ ERR_FAIL_NULL_V(supported_reference_spaces, false);
+
+ result = xrEnumerateReferenceSpaces(session, num_reference_spaces, &num_reference_spaces, supported_reference_spaces);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate reference spaces");
+
+ // #ifdef DEBUG
+ for (uint32_t i = 0; i < num_reference_spaces; i++) {
+ print_line("OpenXR: Found supported reference space ", OpenXRUtil::get_reference_space_name(supported_reference_spaces[i]));
+ }
+ // #endif
+
+ return true;
+}
+
+bool OpenXRAPI::is_reference_space_supported(XrReferenceSpaceType p_reference_space) {
+ ERR_FAIL_NULL_V(supported_reference_spaces, false);
+
+ for (uint32_t i = 0; i < num_reference_spaces; i++) {
+ if (supported_reference_spaces[i] == p_reference_space) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool OpenXRAPI::setup_spaces() {
+ XrResult result;
+
+ XrPosef identityPose = {
+ { 0.0, 0.0, 0.0, 1.0 },
+ { 0.0, 0.0, 0.0 }
+ };
+
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ // create play space
+ {
+ if (!is_reference_space_supported(reference_space)) {
+ print_line("OpenXR: reference space ", OpenXRUtil::get_reference_space_name(reference_space), " is not supported.");
+ return false;
+ }
+
+ XrReferenceSpaceCreateInfo play_space_create_info = {
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type
+ nullptr, // next
+ reference_space, // referenceSpaceType
+ identityPose // poseInReferenceSpace
+ };
+
+ result = xrCreateReferenceSpace(session, &play_space_create_info, &play_space);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to create play space [", get_error_string(result), "]");
+ return false;
+ }
+ }
+
+ // create view space
+ {
+ if (!is_reference_space_supported(XR_REFERENCE_SPACE_TYPE_VIEW)) {
+ print_line("OpenXR: reference space XR_REFERENCE_SPACE_TYPE_VIEW is not supported.");
+ return false;
+ }
+
+ XrReferenceSpaceCreateInfo view_space_create_info = {
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO, // type
+ nullptr, // next
+ XR_REFERENCE_SPACE_TYPE_VIEW, // referenceSpaceType
+ identityPose // poseInReferenceSpace
+ };
+
+ result = xrCreateReferenceSpace(session, &view_space_create_info, &view_space);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to create view space [", get_error_string(result), "]");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::load_supported_swapchain_formats() {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ if (supported_swapchain_formats != nullptr) {
+ // free previous results
+ memfree(supported_swapchain_formats);
+ supported_swapchain_formats = nullptr;
+ }
+
+ XrResult result = xrEnumerateSwapchainFormats(session, 0, &num_swapchain_formats, nullptr);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get swapchain format count [", get_error_string(result), "]");
+ return false;
+ }
+
+ supported_swapchain_formats = (int64_t *)memalloc(sizeof(int64_t) * num_swapchain_formats);
+ ERR_FAIL_NULL_V(supported_swapchain_formats, false);
+
+ result = xrEnumerateSwapchainFormats(session, num_swapchain_formats, &num_swapchain_formats, supported_swapchain_formats);
+ ERR_FAIL_COND_V_MSG(XR_FAILED(result), false, "OpenXR: Failed to enumerate swapchain formats");
+
+ // #ifdef DEBUG
+ for (uint32_t i = 0; i < num_swapchain_formats; i++) {
+ print_line("OpenXR: Found supported swapchain format ", get_swapchain_format_name(supported_swapchain_formats[i]));
+ }
+ // #endif
+
+ return true;
+}
+
+bool OpenXRAPI::is_swapchain_format_supported(int64_t p_swapchain_format) {
+ ERR_FAIL_NULL_V(supported_swapchain_formats, false);
+
+ for (uint32_t i = 0; i < num_swapchain_formats; i++) {
+ if (supported_swapchain_formats[i] == p_swapchain_format) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+bool OpenXRAPI::create_main_swapchain() {
+ ERR_FAIL_NULL_V(graphics_extension, false);
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ /*
+ TODO: We need to improve on this, for now we're taking our old approach of creating our main swapchains and substituting
+ those for the ones Godot normally creates.
+ This however means we can only use swapchains for our main XR view.
+
+ It would have been nicer if we could override the swapchain creation in Godot with ours but we have a timing issue here.
+ We can't create XR swapchains until after our XR session is fully instantiated, yet Godot creates its swapchain much earlier.
+
+ Also Godot only creates a swapchain for the main output.
+ OpenXR will require us to create swapchains as the render target for additional viewports if we want to use the layer system
+ to optimise text rendering and background rendering as OpenXR may choose to re-use the results for reprojection while we're
+ already rendering the next frame.
+
+ Finally an area we need to expand upon is that Foveated rendering is only enabled for the swap chain we create,
+ as we render 3D content into internal buffers that are copied into the swapchain, we don't get any of the performance gains
+ until such time as we implement VRS.
+ */
+
+ // Build a vector with swapchain formats we want to use, from best fit to worst
+ Vector<int64_t> usable_swapchain_formats;
+ int64_t swapchain_format_to_use = 0;
+
+ graphics_extension->get_usable_swapchain_formats(usable_swapchain_formats);
+
+ // now find out which one is supported
+ for (int i = 0; i < usable_swapchain_formats.size() && swapchain_format_to_use == 0; i++) {
+ if (is_swapchain_format_supported(usable_swapchain_formats[i])) {
+ swapchain_format_to_use = usable_swapchain_formats[i];
+ }
+ }
+
+ if (swapchain_format_to_use == 0) {
+ swapchain_format_to_use = usable_swapchain_formats[0]; // just use the first one and hope for the best...
+ print_line("Couldn't find usable swap chain format, using", get_swapchain_format_name(swapchain_format_to_use), "instead.");
+ } else {
+ print_line("Using swap chain format:", get_swapchain_format_name(swapchain_format_to_use));
+ }
+
+ Size2 recommended_size = get_recommended_target_size();
+
+ if (!create_swapchain(swapchain_format_to_use, recommended_size.width, recommended_size.height, view_configuration_views[0].recommendedSwapchainSampleCount, view_count, swapchain, &swapchain_graphics_data)) {
+ return false;
+ }
+
+ views = (XrView *)memalloc(sizeof(XrView) * view_count);
+ ERR_FAIL_NULL_V_MSG(views, false, "OpenXR Couldn't allocate memory for views");
+
+ projection_views = (XrCompositionLayerProjectionView *)memalloc(sizeof(XrCompositionLayerProjectionView) * view_count);
+ ERR_FAIL_NULL_V_MSG(projection_views, false, "OpenXR Couldn't allocate memory for projection views");
+
+ for (uint32_t i = 0; i < view_count; i++) {
+ views[i].type = XR_TYPE_VIEW;
+ views[i].next = NULL;
+
+ projection_views[i].type = XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW;
+ projection_views[i].next = NULL;
+ projection_views[i].subImage.swapchain = swapchain;
+ projection_views[i].subImage.imageArrayIndex = i;
+ projection_views[i].subImage.imageRect.offset.x = 0;
+ projection_views[i].subImage.imageRect.offset.y = 0;
+ projection_views[i].subImage.imageRect.extent.width = recommended_size.width;
+ projection_views[i].subImage.imageRect.extent.height = recommended_size.height;
+ };
+
+ return true;
+};
+
+void OpenXRAPI::destroy_session() {
+ if (running && session != XR_NULL_HANDLE) {
+ xrEndSession(session);
+ }
+
+ if (graphics_extension) {
+ graphics_extension->cleanup_swapchain_graphics_data(&swapchain_graphics_data);
+ }
+
+ if (views != nullptr) {
+ memfree(views);
+ views = nullptr;
+ }
+
+ if (projection_views != nullptr) {
+ memfree(projection_views);
+ projection_views = nullptr;
+ }
+
+ if (swapchain != XR_NULL_HANDLE) {
+ xrDestroySwapchain(swapchain);
+ swapchain = XR_NULL_HANDLE;
+ }
+
+ if (supported_swapchain_formats != nullptr) {
+ memfree(supported_swapchain_formats);
+ supported_swapchain_formats = nullptr;
+ }
+
+ // destroy our spaces
+ if (play_space != XR_NULL_HANDLE) {
+ xrDestroySpace(play_space);
+ play_space = XR_NULL_HANDLE;
+ }
+ if (view_space != XR_NULL_HANDLE) {
+ xrDestroySpace(view_space);
+ view_space = XR_NULL_HANDLE;
+ }
+
+ if (supported_reference_spaces != nullptr) {
+ // free previous results
+ memfree(supported_reference_spaces);
+ supported_reference_spaces = nullptr;
+ }
+
+ if (session != XR_NULL_HANDLE) {
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_session_destroyed();
+ }
+
+ xrDestroySession(session);
+ session = XR_NULL_HANDLE;
+ }
+}
+
+bool OpenXRAPI::create_swapchain(int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, XrSwapchain &r_swapchain, void **r_swapchain_graphics_data) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+ ERR_FAIL_NULL_V(graphics_extension, false);
+
+ XrResult result;
+
+ void *next_pointer = nullptr;
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ void *np = wrapper->set_swapchain_create_info_and_get_next_pointer(next_pointer);
+ if (np != nullptr) {
+ next_pointer = np;
+ }
+ }
+
+ XrSwapchainCreateInfo swapchain_create_info = {
+ XR_TYPE_SWAPCHAIN_CREATE_INFO, // type
+ next_pointer, // next
+ 0, // createFlags
+ XR_SWAPCHAIN_USAGE_SAMPLED_BIT | XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, // usageFlags
+ p_swapchain_format, // format
+ p_sample_count, // sampleCount
+ p_width, // width
+ p_height, // height
+ 1, // faceCount
+ p_array_size, // arraySize
+ 1 // mipCount
+ };
+
+ XrSwapchain new_swapchain;
+ result = xrCreateSwapchain(session, &swapchain_create_info, &new_swapchain);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to get swapchain [", get_error_string(result), "]");
+ return false;
+ }
+
+ if (!graphics_extension->get_swapchain_image_data(new_swapchain, p_swapchain_format, p_width, p_height, p_sample_count, p_array_size, r_swapchain_graphics_data)) {
+ xrDestroySwapchain(new_swapchain);
+ return false;
+ }
+
+ r_swapchain = new_swapchain;
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_idle() {
+#ifdef DEBUG
+ print_line("On state idle");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_idle();
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_ready() {
+#ifdef DEBUG
+ print_line("On state ready");
+#endif
+
+ // begin session
+ XrSessionBeginInfo session_begin_info = {
+ XR_TYPE_SESSION_BEGIN_INFO, // type
+ nullptr, // next
+ view_configuration // primaryViewConfigurationType
+ };
+
+ XrResult result = xrBeginSession(session, &session_begin_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to begin session [", get_error_string(result), "]");
+ return false;
+ }
+
+ // This is when we create our swapchain, this can be a "long" time after Godot finishes, we can deal with this for now
+ // but once we want to provide Viewports for additional layers where OpenXR requires us to create further swapchains,
+ // we'll be creating those viewport WAY before we reach this point.
+ // We may need to implement a wait in our init in main.cpp polling our events until the session is ready.
+ // That will be very very ugly
+ // The other possibility is to create a separate OpenXRViewport type specifically for this goal as part of our OpenXR module
+
+ if (!create_main_swapchain()) {
+ return false;
+ }
+
+ // we're running
+ running = true;
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_ready();
+ }
+
+ // TODO emit signal
+
+ // TODO Tell android
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_synchronized() {
+#ifdef DEBUG
+ print_line("On state synchronized");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_synchronized();
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_visible() {
+#ifdef DEBUG
+ print_line("On state visible");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_visible();
+ }
+
+ // TODO emit signal
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_focused() {
+#ifdef DEBUG
+ print_line("On state focused");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_focused();
+ }
+
+ // TODO emit signal
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_stopping() {
+#ifdef DEBUG
+ print_line("On state stopping");
+#endif
+
+ // TODO emit signal
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_stopping();
+ }
+
+ if (running) {
+ XrResult result = xrEndSession(session);
+ if (XR_FAILED(result)) {
+ // we only report this..
+ print_line("OpenXR: Failed to end session [", get_error_string(result), "]");
+ }
+
+ running = false;
+ }
+
+ // TODO further cleanup
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_loss_pending() {
+#ifdef DEBUG
+ print_line("On state loss pending");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_loss_pending();
+ }
+
+ // TODO need to look into the correct action here, read up on the spec but we may need to signal Godot to exit (if it's not already exiting)
+
+ return true;
+}
+
+bool OpenXRAPI::on_state_exiting() {
+#ifdef DEBUG
+ print_line("On state existing");
+#endif
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_state_exiting();
+ }
+
+ // TODO need to look into the correct action here, read up on the spec but we may need to signal Godot to exit (if it's not already exiting)
+
+ return true;
+}
+
+bool OpenXRAPI::is_initialized() {
+ return (instance != XR_NULL_HANDLE);
+}
+
+bool OpenXRAPI::is_running() {
+ if (instance == XR_NULL_HANDLE) {
+ return false;
+ }
+ if (session == XR_NULL_HANDLE) {
+ return false;
+ }
+
+ return running;
+}
+
+bool OpenXRAPI::initialise(const String &p_rendering_driver) {
+ ERR_FAIL_COND_V_MSG(instance != XR_NULL_HANDLE, false, "OpenXR instance was already created");
+
+ if (p_rendering_driver == "vulkan") {
+#ifdef VULKAN_ENABLED
+ graphics_extension = memnew(OpenXRVulkanExtension(this));
+ register_extension_wrapper(graphics_extension);
+#else
+ // shouldn't be possible...
+ ERR_FAIL_V(false);
+#endif
+ } else if (p_rendering_driver == "opengl3") {
+#ifdef OPENGL3_ENABLED
+ // graphics_extension = memnew(OpenXROpenGLExtension(this));
+ // register_extension_wrapper(graphics_extension);
+ ERR_FAIL_V_MSG(false, "OpenXR: OpenGL is not supported at this time.");
+#else
+ // shouldn't be possible...
+ ERR_FAIL_V(false);
+#endif
+ } else {
+ ERR_FAIL_V_MSG(false, "OpenXR: Unsupported rendering device.");
+ }
+
+ // initialise
+ if (!load_layer_properties()) {
+ destroy_instance();
+ return false;
+ }
+
+ if (!load_supported_extensions()) {
+ destroy_instance();
+ return false;
+ }
+
+ if (!create_instance()) {
+ destroy_instance();
+ return false;
+ }
+
+ if (!get_system_info()) {
+ destroy_instance();
+ return false;
+ }
+
+ if (!load_supported_view_configuration_types()) {
+ destroy_instance();
+ return false;
+ }
+
+ if (!load_supported_view_configuration_views(view_configuration)) {
+ destroy_instance();
+ return false;
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::initialise_session() {
+ if (!create_session()) {
+ destroy_session();
+ return false;
+ }
+
+ if (!load_supported_reference_spaces()) {
+ destroy_session();
+ return false;
+ }
+
+ if (!setup_spaces()) {
+ destroy_session();
+ return false;
+ }
+
+ if (!load_supported_swapchain_formats()) {
+ destroy_session();
+ return false;
+ }
+
+ return true;
+}
+
+void OpenXRAPI::finish() {
+ destroy_session();
+
+ destroy_instance();
+}
+
+void OpenXRAPI::register_extension_wrapper(OpenXRExtensionWrapper *p_extension_wrapper) {
+ registered_extension_wrappers.push_back(p_extension_wrapper);
+}
+
+Size2 OpenXRAPI::get_recommended_target_size() {
+ ERR_FAIL_NULL_V(view_configuration_views, Size2());
+
+ Size2 target_size;
+
+ target_size.width = view_configuration_views[0].recommendedImageRectWidth;
+ target_size.height = view_configuration_views[0].recommendedImageRectHeight;
+
+ return target_size;
+}
+
+XRPose::TrackingConfidence OpenXRAPI::get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity) {
+ XrResult result;
+
+ ERR_FAIL_COND_V(!running, XRPose::XR_TRACKING_CONFIDENCE_NONE);
+
+ // xrWaitFrame not run yet
+ if (frame_state.predictedDisplayTime == 0) {
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ // Get timing for the next frame, as that is the current frame we're processing
+ XrTime display_time = get_next_frame_time();
+
+ XrSpaceVelocity velocity = {
+ XR_TYPE_SPACE_VELOCITY, // type
+ nullptr, // next
+ 0, // velocityFlags
+ { 0.0, 0.0, 0.0 }, // linearVelocity
+ { 0.0, 0.0, 0.0 } // angularVelocity
+ };
+
+ XrSpaceLocation location = {
+ XR_TYPE_SPACE_LOCATION, // type
+ &velocity, // next
+ 0, // locationFlags
+ {
+ { 0.0, 0.0, 0.0, 0.0 }, // orientation
+ { 0.0, 0.0, 0.0 } // position
+ } // pose
+ };
+
+ result = xrLocateSpace(view_space, play_space, display_time, &location);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Failed to locate view space in play space [", get_error_string(result), "]");
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ XRPose::TrackingConfidence confidence = transform_from_location(location, r_transform);
+ parse_velocities(velocity, r_linear_velocity, r_angular_velocity);
+
+ if (head_pose_confidence != confidence) {
+ // prevent error spam
+ head_pose_confidence = confidence;
+ if (head_pose_confidence == XRPose::XR_TRACKING_CONFIDENCE_NONE) {
+ print_line("OpenXR head space location not valid (check tracking?)");
+#ifdef DEBUG
+ } else if (head_pose_confidence == XRPose::XR_TRACKING_CONFIDENCE_LOW) {
+ print_line("OpenVR Head pose now tracking with low confidence");
+ } else {
+ print_line("OpenVR Head pose now tracking with high confidence");
+#endif
+ }
+ }
+
+ return confidence;
+}
+
+bool OpenXRAPI::get_view_transform(uint32_t p_view, Transform3D &r_transform) {
+ ERR_FAIL_COND_V(!running, false);
+
+ // xrWaitFrame not run yet
+ if (frame_state.predictedDisplayTime == 0) {
+ return false;
+ }
+
+ // we don't have valid view info
+ if (views == NULL || !view_pose_valid) {
+ return false;
+ }
+
+ // Note, the timing of this is set right before rendering, which is what we need here.
+ r_transform = transform_from_pose(views[p_view].pose);
+
+ return true;
+}
+
+bool OpenXRAPI::get_view_projection(uint32_t p_view, double p_z_near, double p_z_far, CameraMatrix &p_camera_matrix) {
+ ERR_FAIL_COND_V(!running, false);
+ ERR_FAIL_NULL_V(graphics_extension, false);
+
+ // xrWaitFrame not run yet
+ if (frame_state.predictedDisplayTime == 0) {
+ return false;
+ }
+
+ // we don't have valid view info
+ if (views == NULL || !view_pose_valid) {
+ return false;
+ }
+
+ return graphics_extension->create_projection_fov(views[p_view].fov, p_z_near, p_z_far, p_camera_matrix);
+}
+
+bool OpenXRAPI::poll_events() {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false);
+
+ XrEventDataBuffer runtimeEvent;
+ runtimeEvent.type = XR_TYPE_EVENT_DATA_BUFFER;
+ runtimeEvent.next = nullptr;
+ // runtimeEvent.varying = ...
+
+ XrResult pollResult = xrPollEvent(instance, &runtimeEvent);
+ while (pollResult == XR_SUCCESS) {
+ bool handled = false;
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ handled |= wrapper->on_event_polled(runtimeEvent);
+ }
+ switch (runtimeEvent.type) {
+ // case XR_TYPE_EVENT_DATA_EVENTS_LOST: {
+ // } break;
+ // case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR: {
+ // } break;
+ // case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING: {
+ // } break;
+ case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: {
+ XrEventDataSessionStateChanged *event = (XrEventDataSessionStateChanged *)&runtimeEvent;
+
+ session_state = event->state;
+ if (session_state >= XR_SESSION_STATE_MAX_ENUM) {
+ print_line("OpenXR EVENT: session state changed to UNKNOWN -", session_state);
+ } else {
+ print_line("OpenXR EVENT: session state changed to", OpenXRUtil::get_session_state_name(session_state));
+
+ switch (session_state) {
+ case XR_SESSION_STATE_IDLE:
+ on_state_idle();
+ break;
+ case XR_SESSION_STATE_READY:
+ on_state_ready();
+ break;
+ case XR_SESSION_STATE_SYNCHRONIZED:
+ on_state_synchronized();
+ break;
+ case XR_SESSION_STATE_VISIBLE:
+ on_state_visible();
+ break;
+ case XR_SESSION_STATE_FOCUSED:
+ on_state_focused();
+ break;
+ case XR_SESSION_STATE_STOPPING:
+ on_state_stopping();
+ break;
+ case XR_SESSION_STATE_LOSS_PENDING:
+ on_state_loss_pending();
+ break;
+ case XR_SESSION_STATE_EXITING:
+ on_state_exiting();
+ break;
+ default:
+ break;
+ }
+ }
+ } break;
+ // case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING: {
+ // } break;
+ // case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: {
+ // } break;
+ default:
+ if (!handled) {
+ print_line("OpenXR Unhandled event type", OpenXRUtil::get_structure_type_name(runtimeEvent.type));
+ }
+ break;
+ }
+
+ runtimeEvent.type = XR_TYPE_EVENT_DATA_BUFFER;
+ pollResult = xrPollEvent(instance, &runtimeEvent);
+ }
+
+ if (pollResult == XR_EVENT_UNAVAILABLE) {
+ // processed all events in the queue
+ return true;
+ } else {
+ ERR_FAIL_V_MSG(false, "OpenXR: Failed to poll events!");
+ }
+}
+
+bool OpenXRAPI::process() {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false);
+
+ if (!poll_events()) {
+ return false;
+ }
+
+ if (!running) {
+ return false;
+ }
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_process();
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::acquire_image(XrSwapchain p_swapchain, uint32_t &r_image_index) {
+ ERR_FAIL_COND_V(image_acquired, true); // this was not released when it should be, error out and re-use...
+
+ XrResult result;
+ XrSwapchainImageAcquireInfo swapchain_image_acquire_info = {
+ XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, // type
+ nullptr // next
+ };
+ result = xrAcquireSwapchainImage(p_swapchain, &swapchain_image_acquire_info, &r_image_index);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to acquire swapchain image [", get_error_string(result), "]");
+ return false;
+ }
+
+ XrSwapchainImageWaitInfo swapchain_image_wait_info = {
+ XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, // type
+ nullptr, // next
+ 17000000 // timeout in nanoseconds
+ };
+
+ result = xrWaitSwapchainImage(p_swapchain, &swapchain_image_wait_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to wait for swapchain image [", get_error_string(result), "]");
+ return false;
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::release_image(XrSwapchain p_swapchain) {
+ XrSwapchainImageReleaseInfo swapchain_image_release_info = {
+ XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, // type
+ nullptr // next
+ };
+ XrResult result = xrReleaseSwapchainImage(swapchain, &swapchain_image_release_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to release swapchain image! [", get_error_string(result), "]");
+ return false;
+ }
+
+ return true;
+}
+
+void OpenXRAPI::pre_render() {
+ ERR_FAIL_COND(instance == XR_NULL_HANDLE);
+
+ if (!running) {
+ return;
+ }
+
+ // Waitframe does 2 important things in our process:
+ // 1) It provides us with predictive timing, telling us when OpenXR expects to display the frame we're about to commit
+ // 2) It will use the previous timing to pause our thread so that rendering starts as close to displaying as possible
+ // This must thus be called as close to when we start rendering as possible
+ XrFrameWaitInfo frame_wait_info = { XR_TYPE_FRAME_WAIT_INFO, nullptr };
+ XrResult result = xrWaitFrame(session, &frame_wait_info, &frame_state);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: xrWaitFrame() was not successful [", get_error_string(result), "]");
+ return;
+ }
+
+ for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+ wrapper->on_pre_render();
+ }
+
+ // Get our view info for the frame we're about to render, note from the OpenXR manual:
+ // "Repeatedly calling xrLocateViews with the same time may not necessarily return the same result. Instead the prediction gets increasingly accurate as the function is called closer to the given time for which a prediction is made"
+
+ // We're calling this "relatively" early, the positioning we're obtaining here will be used to do our frustum culling,
+ // occlusion culling, etc. There is however a technique that we can investigate in the future where after our entire
+ // Vulkan command buffer is build, but right before vkSubmitQueue is called, we call xrLocateViews one more time and
+ // update the view and projection matrix once more with a slightly more accurate predication and then submit the
+ // command queues.
+
+ // That is not possible yet but worth investigating in the future.
+
+ XrViewLocateInfo view_locate_info = {
+ XR_TYPE_VIEW_LOCATE_INFO, // type
+ nullptr, // next
+ view_configuration, // viewConfigurationType
+ frame_state.predictedDisplayTime, // displayTime
+ play_space // space
+ };
+ XrViewState view_state = {
+ XR_TYPE_VIEW_STATE, // type
+ nullptr, // next
+ 0 // viewStateFlags
+ };
+ uint32_t view_count_output;
+ result = xrLocateViews(session, &view_locate_info, &view_state, view_count, &view_count_output, views);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: Couldn't locate views [", get_error_string(result), "]");
+ return;
+ }
+
+ bool pose_valid = true;
+ for (uint64_t i = 0; i < view_count_output; i++) {
+ if ((view_state.viewStateFlags & XR_VIEW_STATE_ORIENTATION_VALID_BIT) == 0 ||
+ (view_state.viewStateFlags & XR_VIEW_STATE_POSITION_VALID_BIT) == 0) {
+ pose_valid = false;
+ }
+ }
+ if (view_pose_valid != pose_valid) {
+ view_pose_valid = pose_valid;
+#ifdef DEBUG
+ if (!view_pose_valid) {
+ print_line("OpenXR View pose became invalid");
+ } else {
+ print_line("OpenXR View pose became valid");
+ }
+#endif
+ }
+
+ // let's start our frame..
+ XrFrameBeginInfo frame_begin_info = {
+ XR_TYPE_FRAME_BEGIN_INFO, // type
+ nullptr // next
+ };
+ result = xrBeginFrame(session, &frame_begin_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to being frame [", get_error_string(result), "]");
+ return;
+ }
+}
+
+bool OpenXRAPI::pre_draw_viewport(RID p_render_target) {
+ if (!can_render()) {
+ return false;
+ }
+
+ // TODO: at some point in time we may support multiple viewports in which case we need to handle that...
+
+ return true;
+}
+
+void OpenXRAPI::post_draw_viewport(RID p_render_target) {
+ if (!can_render()) {
+ return;
+ }
+
+ // TODO: at some point in time we may support multiple viewports in which case we need to handle that...
+
+ // TODO: if we can get PR 51179 to work properly we can change away from this approach and move this into get_external_texture or something
+ if (!image_acquired) {
+ if (!acquire_image(swapchain, image_index)) {
+ return;
+ }
+ image_acquired = true;
+
+ // print_line("OpenXR: acquired image " + itos(image_index) + ", copying...");
+
+ // Copy our buffer into our swap chain (remove once PR 51179 is done)
+ graphics_extension->copy_render_target_to_image(p_render_target, swapchain_graphics_data, image_index);
+ }
+};
+
+void OpenXRAPI::end_frame() {
+ XrResult result;
+
+ ERR_FAIL_COND(instance == XR_NULL_HANDLE);
+
+ if (!running) {
+ return;
+ }
+
+ if (frame_state.shouldRender && view_pose_valid && !image_acquired) {
+ print_line("OpenXR: No viewport was marked with use_xr, there is no rendered output!");
+ }
+
+ // must have:
+ // - shouldRender set to true
+ // - a valid view pose for projection_views[eye].pose to submit layer
+ // - an image to render
+ if (!frame_state.shouldRender || !view_pose_valid || !image_acquired) {
+ // submit 0 layers when we shouldn't render
+ XrFrameEndInfo frame_end_info = {
+ XR_TYPE_FRAME_END_INFO, // type
+ nullptr, // next
+ frame_state.predictedDisplayTime, // displayTime
+ XR_ENVIRONMENT_BLEND_MODE_OPAQUE, // environmentBlendMode
+ 0, // layerCount
+ nullptr // layers
+ };
+ result = xrEndFrame(session, &frame_end_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to end frame! [", get_error_string(result), "]");
+ return;
+ }
+
+ // neither eye is rendered
+ return;
+ }
+
+ // release our swapchain image if we acquired it
+ if (image_acquired) {
+ image_acquired = false; // whether we succeed or not, consider this released.
+
+ release_image(swapchain);
+ }
+
+ for (uint32_t eye = 0; eye < view_count; eye++) {
+ projection_views[eye].fov = views[eye].fov;
+ projection_views[eye].pose = views[eye].pose;
+ }
+
+ Vector<const XrCompositionLayerBaseHeader *> layers_list;
+
+ // Add composition layers from providers
+ for (OpenXRCompositionLayerProvider *provider : composition_layer_providers) {
+ XrCompositionLayerBaseHeader *layer = provider->get_composition_layer();
+ if (layer) {
+ layers_list.push_back(layer);
+ }
+ }
+
+ XrCompositionLayerProjection projection_layer = {
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION, // type
+ nullptr, // next
+ layers_list.size() > 1 ? XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT | XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT : XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT, // layerFlags
+ play_space, // space
+ view_count, // viewCount
+ projection_views, // views
+ };
+ layers_list.push_back((const XrCompositionLayerBaseHeader *)&projection_layer);
+
+ XrFrameEndInfo frame_end_info = {
+ XR_TYPE_FRAME_END_INFO, // type
+ nullptr, // next
+ frame_state.predictedDisplayTime, // displayTime
+ XR_ENVIRONMENT_BLEND_MODE_OPAQUE, // environmentBlendMode
+ static_cast<uint32_t>(layers_list.size()), // layerCount
+ layers_list.ptr() // layers
+ };
+ result = xrEndFrame(session, &frame_end_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to end frame! [", get_error_string(result), "]");
+ return;
+ }
+}
+
+OpenXRAPI::OpenXRAPI() {
+ // OpenXRAPI is only constructed if OpenXR is enabled.
+ // It will be constructed when the rendering device first accesses OpenXR (be it the Vulkan or OpenGL rendering system)
+
+ if (Engine::get_singleton()->is_editor_hint()) {
+ // Enabled OpenXR in the editor? Adjust our settings for the editor
+
+ } else {
+ // Load settings from project settings
+ int ff = GLOBAL_GET("xr/openxr/form_factor");
+ switch (ff) {
+ case 0: {
+ form_factor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
+ } break;
+ case 1: {
+ form_factor = XR_FORM_FACTOR_HANDHELD_DISPLAY;
+ } break;
+ default:
+ break;
+ }
+
+ int vc = GLOBAL_GET("xr/openxr/view_configuration");
+ switch (vc) {
+ case 0: {
+ view_configuration = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO;
+ } break;
+ case 1: {
+ view_configuration = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
+ } break;
+ /* we don't support quad and observer configurations (yet)
+ case 2: {
+ view_configuration = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO;
+ } break;
+ case 3: {
+ view_configuration = XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT;
+ } break;
+ */
+ default:
+ break;
+ }
+
+ int rs = GLOBAL_GET("xr/openxr/reference_space");
+ switch (rs) {
+ case 0: {
+ reference_space = XR_REFERENCE_SPACE_TYPE_LOCAL;
+ } break;
+ case 1: {
+ reference_space = XR_REFERENCE_SPACE_TYPE_STAGE;
+ } break;
+ default:
+ break;
+ }
+ }
+
+ // reset a few things that can't be done in our class definition
+ frame_state.predictedDisplayTime = 0;
+ frame_state.predictedDisplayPeriod = 0;
+
+#ifdef ANDROID_ENABLED
+ // our android wrapper will initialise our android loader at this point
+ register_extension_wrapper(memnew(OpenXRAndroidExtension(this)));
+#endif
+}
+
+OpenXRAPI::~OpenXRAPI() {
+ // cleanup our composition layer providers
+ for (OpenXRCompositionLayerProvider *provider : composition_layer_providers) {
+ memdelete(provider);
+ }
+ composition_layer_providers.clear();
+
+ // cleanup our extension wrappers
+ for (OpenXRExtensionWrapper *extension_wrapper : registered_extension_wrappers) {
+ memdelete(extension_wrapper);
+ }
+ registered_extension_wrappers.clear();
+
+ if (supported_extensions != nullptr) {
+ memfree(supported_extensions);
+ supported_extensions = nullptr;
+ }
+
+ if (layer_properties != nullptr) {
+ memfree(layer_properties);
+ layer_properties = nullptr;
+ }
+}
+
+Transform3D OpenXRAPI::transform_from_pose(const XrPosef &p_pose) {
+ Quaternion q(p_pose.orientation.x, p_pose.orientation.y, p_pose.orientation.z, p_pose.orientation.w);
+ Basis basis(q);
+ Vector3 origin(p_pose.position.x, p_pose.position.y, p_pose.position.z);
+
+ return Transform3D(basis, origin);
+}
+
+template <typename T>
+XRPose::TrackingConfidence _transform_from_location(const T &p_location, Transform3D &r_transform) {
+ Basis basis;
+ Vector3 origin;
+ XRPose::TrackingConfidence confidence = XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ const auto &pose = p_location.pose;
+
+ // Check orientation
+ if (p_location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) {
+ Quaternion q(pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w);
+ r_transform.basis = Basis(q);
+
+ if (p_location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT) {
+ // Fully valid orientation, so either 3DOF or 6DOF tracking with high confidence so default to HIGH_TRACKING
+ confidence = XRPose::XR_TRACKING_CONFIDENCE_HIGH;
+ } else {
+ // Orientation is being tracked but we're using old/predicted data, so low tracking confidence
+ confidence = XRPose::XR_TRACKING_CONFIDENCE_LOW;
+ }
+ } else {
+ r_transform.basis = Basis();
+ }
+
+ // Check location
+ if (p_location.locationFlags & XR_SPACE_LOCATION_POSITION_VALID_BIT) {
+ r_transform.origin = Vector3(pose.position.x, pose.position.y, pose.position.z);
+
+ if (!(p_location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT)) {
+ // Location is being tracked but we're using old/predicted data, so low tracking confidence
+ confidence = XRPose::XR_TRACKING_CONFIDENCE_LOW;
+ } else if (confidence == XRPose::XR_TRACKING_CONFIDENCE_NONE) {
+ // Position tracking without orientation tracking?
+ confidence = XRPose::XR_TRACKING_CONFIDENCE_HIGH;
+ }
+ } else {
+ // No tracking or 3DOF I guess..
+ r_transform.origin = Vector3();
+ }
+
+ return confidence;
+}
+
+XRPose::TrackingConfidence OpenXRAPI::transform_from_location(const XrSpaceLocation &p_location, Transform3D &r_transform) {
+ return _transform_from_location(p_location, r_transform);
+}
+
+XRPose::TrackingConfidence OpenXRAPI::transform_from_location(const XrHandJointLocationEXT &p_location, Transform3D &r_transform) {
+ return _transform_from_location(p_location, r_transform);
+}
+
+void OpenXRAPI::parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 r_angular_velocity) {
+ if (p_velocity.velocityFlags & XR_SPACE_VELOCITY_LINEAR_VALID_BIT) {
+ XrVector3f linear_velocity = p_velocity.linearVelocity;
+ r_linear_velocity = Vector3(linear_velocity.x, linear_velocity.y, linear_velocity.z);
+ } else {
+ r_linear_velocity = Vector3();
+ }
+ if (p_velocity.velocityFlags & XR_SPACE_VELOCITY_ANGULAR_VALID_BIT) {
+ XrVector3f angular_velocity = p_velocity.angularVelocity;
+ r_angular_velocity = Vector3(angular_velocity.x, angular_velocity.y, angular_velocity.z);
+ } else {
+ r_angular_velocity = Vector3();
+ }
+}
+
+RID OpenXRAPI::path_create(const String p_name) {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, RID());
+
+ // Encoding our path as a RID is probably overkill but it does future proof this
+ // Note that we only do this for XrPaths that we access from outside of this class!
+
+ Path new_path;
+
+ print_line("Parsing path ", p_name);
+
+ XrResult result = xrStringToPath(instance, p_name.utf8().get_data(), &new_path.path);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to get path for ", p_name, "! [", get_error_string(result), "]");
+ return RID();
+ }
+
+ return xr_path_owner.make_rid(new_path);
+}
+
+void OpenXRAPI::path_free(RID p_path) {
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL(path);
+
+ // there is nothing to free here
+
+ xr_path_owner.free(p_path);
+}
+
+RID OpenXRAPI::action_set_create(const String p_name, const String p_localized_name, const int p_priority) {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, RID());
+ ActionSet action_set;
+
+ action_set.is_attached = false;
+
+ // create our action set...
+ XrActionSetCreateInfo action_set_info = {
+ XR_TYPE_ACTION_SET_CREATE_INFO, // type
+ nullptr, // next
+ "", // actionSetName
+ "", // localizedActionSetName
+ uint32_t(p_priority) // priority
+ };
+
+ copy_string_to_char_buffer(p_name, action_set_info.actionSetName, XR_MAX_ACTION_SET_NAME_SIZE);
+ copy_string_to_char_buffer(p_localized_name, action_set_info.localizedActionSetName, XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE);
+
+ print_line("Creating action set ", action_set_info.actionSetName, " - ", action_set_info.localizedActionSetName, " (", itos(action_set_info.priority), ")");
+
+ XrResult result = xrCreateActionSet(instance, &action_set_info, &action_set.handle);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to create action set ", p_name, "! [", get_error_string(result), "]");
+ return RID();
+ }
+
+ return action_set_owner.make_rid(action_set);
+}
+
+bool OpenXRAPI::action_set_attach(RID p_action_set) {
+ ActionSet *action_set = action_set_owner.get_or_null(p_action_set);
+ ERR_FAIL_NULL_V(action_set, false);
+
+ if (action_set->is_attached) {
+ // already attached
+ return true;
+ }
+
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ // So according to the docs, once we attach our action set to our session it becomes read only..
+ // https://www.khronos.org/registry/OpenXR/specs/1.0/man/html/xrAttachSessionActionSets.html
+ XrSessionActionSetsAttachInfo attach_info = {
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, // type
+ nullptr, // next
+ 1, // countActionSets,
+ &action_set->handle // actionSets
+ };
+
+ XrResult result = xrAttachSessionActionSets(session, &attach_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to attach action set! [", get_error_string(result), "]");
+ return false;
+ }
+
+ action_set->is_attached = true;
+
+ return true;
+}
+
+void OpenXRAPI::action_set_free(RID p_action_set) {
+ ActionSet *action_set = action_set_owner.get_or_null(p_action_set);
+ ERR_FAIL_NULL(action_set);
+
+ if (action_set->handle != XR_NULL_HANDLE) {
+ xrDestroyActionSet(action_set->handle);
+ }
+
+ action_set_owner.free(p_action_set);
+}
+
+RID OpenXRAPI::action_create(RID p_action_set, const String p_name, const String p_localized_name, OpenXRAction::ActionType p_action_type, const Vector<RID> &p_toplevel_paths) {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, RID());
+
+ Action action;
+
+ ActionSet *action_set = action_set_owner.get_or_null(p_action_set);
+ ERR_FAIL_NULL_V(action_set, RID());
+ ERR_FAIL_COND_V(action_set->handle == XR_NULL_HANDLE, RID());
+
+ switch (p_action_type) {
+ case OpenXRAction::OPENXR_ACTION_BOOL:
+ action.action_type = XR_ACTION_TYPE_BOOLEAN_INPUT;
+ break;
+ case OpenXRAction::OPENXR_ACTION_FLOAT:
+ action.action_type = XR_ACTION_TYPE_FLOAT_INPUT;
+ break;
+ case OpenXRAction::OPENXR_ACTION_VECTOR2:
+ action.action_type = XR_ACTION_TYPE_VECTOR2F_INPUT;
+ break;
+ case OpenXRAction::OPENXR_ACTION_POSE:
+ action.action_type = XR_ACTION_TYPE_POSE_INPUT;
+ break;
+ case OpenXRAction::OPENXR_ACTION_HAPTIC:
+ action.action_type = XR_ACTION_TYPE_VIBRATION_OUTPUT;
+ break;
+ default:
+ ERR_FAIL_V(RID());
+ break;
+ }
+
+ Vector<XrPath> toplevel_paths;
+ for (int i = 0; i < p_toplevel_paths.size(); i++) {
+ Path *xr_path = xr_path_owner.get_or_null(p_toplevel_paths[i]);
+ if (xr_path != nullptr && xr_path->path != XR_NULL_PATH) {
+ PathWithSpace path_with_space = {
+ xr_path->path, // toplevel_path
+ XR_NULL_HANDLE, // space
+ false // was_location_valid
+ };
+ action.toplevel_paths.push_back(path_with_space);
+
+ toplevel_paths.push_back(xr_path->path);
+ }
+ }
+
+ XrActionCreateInfo action_info = {
+ XR_TYPE_ACTION_CREATE_INFO, // type
+ nullptr, // next
+ "", // actionName
+ action.action_type, // actionType
+ uint32_t(toplevel_paths.size()), // countSubactionPaths
+ toplevel_paths.ptr(), // subactionPaths
+ "" // localizedActionName
+ };
+
+ copy_string_to_char_buffer(p_name, action_info.actionName, XR_MAX_ACTION_NAME_SIZE);
+ copy_string_to_char_buffer(p_localized_name, action_info.localizedActionName, XR_MAX_LOCALIZED_ACTION_NAME_SIZE);
+
+ print_line("Creating action ", action_info.actionName, action_info.localizedActionName, action_info.countSubactionPaths);
+
+ XrResult result = xrCreateAction(action_set->handle, &action_info, &action.handle);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to create action ", p_name, "! [", get_error_string(result), "]");
+ return RID();
+ }
+
+ return action_owner.make_rid(action);
+}
+
+void OpenXRAPI::action_free(RID p_action) {
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL(action);
+
+ if (action->handle != XR_NULL_HANDLE) {
+ xrDestroyAction(action->handle);
+ }
+
+ action_owner.free(p_action);
+}
+
+bool OpenXRAPI::suggest_bindings(const String p_interaction_profile, const Vector<Binding> p_bindings) {
+ ERR_FAIL_COND_V(instance == XR_NULL_HANDLE, false);
+
+ XrPath interaction_profile;
+ Vector<XrActionSuggestedBinding> bindings;
+
+ XrResult result = xrStringToPath(instance, p_interaction_profile.utf8().get_data(), &interaction_profile);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to get path for ", p_interaction_profile, "! [", get_error_string(result), "]");
+ return false;
+ }
+
+ for (int i = 0; i < p_bindings.size(); i++) {
+ XrActionSuggestedBinding binding;
+
+ Action *action = action_owner.get_or_null(p_bindings[i].action);
+ if (action == nullptr || action->handle == XR_NULL_HANDLE) {
+ // just skip it
+ continue;
+ }
+
+ binding.action = action->handle;
+
+ result = xrStringToPath(instance, p_bindings[i].path.utf8().get_data(), &binding.binding);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to get path for ", p_bindings[i].path, "! [", get_error_string(result), "]");
+ continue;
+ }
+
+ bindings.push_back(binding);
+ }
+
+ const XrInteractionProfileSuggestedBinding suggested_bindings = {
+ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, // type
+ nullptr, // next
+ interaction_profile, // interactionProfile
+ uint32_t(bindings.size()), // countSuggestedBindings
+ bindings.ptr() // suggestedBindings
+ };
+
+ result = xrSuggestInteractionProfileBindings(instance, &suggested_bindings);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to suggest bindings for ", p_interaction_profile, "! [", get_error_string(result), "]");
+ // reporting is enough...
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::sync_action_sets(const Vector<RID> p_active_sets) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+
+ if (!running) {
+ return false;
+ }
+
+ Vector<XrActiveActionSet> active_sets;
+ for (int i = 0; i < p_active_sets.size(); i++) {
+ ActionSet *action_set = action_set_owner.get_or_null(p_active_sets[i]);
+ if (action_set && action_set->handle != XR_NULL_HANDLE) {
+ XrActiveActionSet aset;
+ aset.actionSet = action_set->handle;
+ aset.subactionPath = XR_NULL_PATH;
+ active_sets.push_back(aset);
+ }
+ }
+
+ ERR_FAIL_COND_V(active_sets.size() == 0, false);
+
+ XrActionsSyncInfo sync_info = {
+ XR_TYPE_ACTIONS_SYNC_INFO, // type
+ nullptr, // next
+ uint32_t(active_sets.size()), // countActiveActionSets
+ active_sets.ptr() // activeActionSets
+ };
+
+ XrResult result = xrSyncActions(session, &sync_info);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to sync active action sets! [", get_error_string(result), "]");
+ return false;
+ }
+
+ return true;
+}
+
+bool OpenXRAPI::get_action_bool(RID p_action, RID p_path) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL_V(action, false);
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL_V(path, false);
+
+ if (!running) {
+ return false;
+ }
+
+ ERR_FAIL_COND_V(action->action_type != XR_ACTION_TYPE_BOOLEAN_INPUT, false);
+
+ XrActionStateGetInfo get_info = {
+ XR_TYPE_ACTION_STATE_GET_INFO, // type
+ nullptr, // next
+ action->handle, // action
+ path->path // subactionPath
+ };
+
+ XrActionStateBoolean result_state;
+ result_state.type = XR_TYPE_ACTION_STATE_BOOLEAN,
+ result_state.next = nullptr;
+ XrResult result = xrGetActionStateBoolean(session, &get_info, &result_state);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: couldn't get action boolean! [", get_error_string(result), "]");
+ return false;
+ }
+
+ return result_state.isActive && result_state.currentState;
+}
+
+float OpenXRAPI::get_action_float(RID p_action, RID p_path) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, 0.0);
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL_V(action, 0.0);
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL_V(path, 0.0);
+
+ if (!running) {
+ return 0.0;
+ }
+
+ ERR_FAIL_COND_V(action->action_type != XR_ACTION_TYPE_FLOAT_INPUT, 0.0);
+
+ XrActionStateGetInfo get_info = {
+ XR_TYPE_ACTION_STATE_GET_INFO, // type
+ nullptr, // next
+ action->handle, // action
+ path->path // subactionPath
+ };
+
+ XrActionStateFloat result_state;
+ result_state.type = XR_TYPE_ACTION_STATE_FLOAT,
+ result_state.next = nullptr;
+ XrResult result = xrGetActionStateFloat(session, &get_info, &result_state);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: couldn't get action float! [", get_error_string(result), "]");
+ return 0.0;
+ }
+
+ return result_state.isActive ? result_state.currentState : 0.0;
+}
+
+Vector2 OpenXRAPI::get_action_vector2(RID p_action, RID p_path) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, Vector2());
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL_V(action, Vector2());
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL_V(path, Vector2());
+
+ if (!running) {
+ return Vector2();
+ }
+
+ ERR_FAIL_COND_V(action->action_type != XR_ACTION_TYPE_VECTOR2F_INPUT, Vector2());
+
+ XrActionStateGetInfo get_info = {
+ XR_TYPE_ACTION_STATE_GET_INFO, // type
+ nullptr, // next
+ action->handle, // action
+ path->path // subactionPath
+ };
+
+ XrActionStateVector2f result_state;
+ result_state.type = XR_TYPE_ACTION_STATE_VECTOR2F,
+ result_state.next = nullptr;
+ XrResult result = xrGetActionStateVector2f(session, &get_info, &result_state);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: couldn't get action vector2! [", get_error_string(result), "]");
+ return Vector2();
+ }
+
+ return result_state.isActive ? Vector2(result_state.currentState.x, result_state.currentState.y) : Vector2();
+}
+
+XRPose::TrackingConfidence OpenXRAPI::get_action_pose(RID p_action, RID p_path, Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, XRPose::XR_TRACKING_CONFIDENCE_NONE);
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL_V(action, XRPose::XR_TRACKING_CONFIDENCE_NONE);
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL_V(path, XRPose::XR_TRACKING_CONFIDENCE_NONE);
+
+ if (!running) {
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ ERR_FAIL_COND_V(action->action_type != XR_ACTION_TYPE_POSE_INPUT, XRPose::XR_TRACKING_CONFIDENCE_NONE);
+
+ uint64_t index = 0xFFFFFFFF;
+ uint64_t size = uint64_t(action->toplevel_paths.size());
+ for (uint64_t i = 0; i < size && index == 0xFFFFFFFF; i++) {
+ if (action->toplevel_paths[i].toplevel_path == path->path) {
+ index = i;
+ }
+ }
+
+ if (index == 0xFFFFFFFF) {
+ // couldn't find it?
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ if (action->toplevel_paths[index].space == XR_NULL_HANDLE) {
+ // if this is a pose we need to define spaces
+
+ XrActionSpaceCreateInfo action_space_info = {
+ XR_TYPE_ACTION_SPACE_CREATE_INFO, // type
+ nullptr, // next
+ action->handle, // action
+ action->toplevel_paths[index].toplevel_path, // subactionPath
+ {
+ { 0.0, 0.0, 0.0, 1.0 }, // orientation
+ { 0.0, 0.0, 0.0 } // position
+ } // poseInActionSpace
+ };
+
+ XrSpace space;
+ XrResult result = xrCreateActionSpace(session, &action_space_info, &space);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: couldn't create action space! [", get_error_string(result), "]");
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ action->toplevel_paths.ptrw()[index].space = space;
+ }
+
+ XrTime display_time = get_next_frame_time();
+
+ XrSpaceVelocity velocity = {
+ XR_TYPE_SPACE_VELOCITY, // type
+ nullptr, // next
+ 0, // velocityFlags
+ { 0.0, 0.0, 0.0 }, // linearVelocity
+ { 0.0, 0.0, 0.0 } // angularVelocity
+ };
+
+ XrSpaceLocation location = {
+ XR_TYPE_SPACE_LOCATION, // type
+ &velocity, // next
+ 0, // locationFlags
+ {
+ { 0.0, 0.0, 0.0, 0.0 }, // orientation
+ { 0.0, 0.0, 0.0 } // position
+ } // pose
+ };
+
+ XrResult result = xrLocateSpace(action->toplevel_paths[index].space, play_space, display_time, &location);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to locate space! [", get_error_string(result), "]");
+ return XRPose::XR_TRACKING_CONFIDENCE_NONE;
+ }
+
+ XRPose::TrackingConfidence confidence = transform_from_location(location, r_transform);
+ parse_velocities(velocity, r_linear_velocity, r_angular_velocity);
+
+ return confidence;
+}
+
+bool OpenXRAPI::trigger_haptic_pulse(RID p_action, RID p_path, float p_frequency, float p_amplitude, XrDuration p_duration_ns) {
+ ERR_FAIL_COND_V(session == XR_NULL_HANDLE, false);
+ Action *action = action_owner.get_or_null(p_action);
+ ERR_FAIL_NULL_V(action, false);
+ Path *path = xr_path_owner.get_or_null(p_path);
+ ERR_FAIL_NULL_V(path, false);
+
+ if (!running) {
+ return false;
+ }
+
+ ERR_FAIL_COND_V(action->action_type != XR_ACTION_TYPE_VIBRATION_OUTPUT, false);
+
+ XrHapticActionInfo action_info = {
+ XR_TYPE_HAPTIC_ACTION_INFO, // type
+ nullptr, // next
+ action->handle, // action
+ path->path // subactionPath
+ };
+
+ XrHapticVibration vibration = {
+ XR_TYPE_HAPTIC_VIBRATION, // type
+ nullptr, // next
+ p_duration_ns, // duration
+ p_frequency, // frequency
+ p_amplitude, // amplitude
+ };
+
+ XrResult result = xrApplyHapticFeedback(session, &action_info, (const XrHapticBaseHeader *)&vibration);
+ if (XR_FAILED(result)) {
+ print_line("OpenXR: failed to apply haptic feedback! [", get_error_string(result), "]");
+ return false;
+ }
+
+ return true;
+}
diff --git a/modules/openxr/openxr_api.h b/modules/openxr/openxr_api.h
new file mode 100644
index 0000000000..33b503543a
--- /dev/null
+++ b/modules/openxr/openxr_api.h
@@ -0,0 +1,261 @@
+/*************************************************************************/
+/* openxr_api.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_DRIVER_H
+#define OPENXR_DRIVER_H
+
+#include "core/error/error_macros.h"
+#include "core/math/camera_matrix.h"
+#include "core/math/transform_3d.h"
+#include "core/math/vector2.h"
+#include "core/os/memory.h"
+#include "core/string/ustring.h"
+#include "core/templates/map.h"
+#include "core/templates/rid_owner.h"
+#include "core/templates/vector.h"
+#include "servers/xr/xr_pose.h"
+
+#include "thirdparty/openxr/src/common/xr_linear.h"
+#include <openxr/openxr.h>
+
+#include "action_map/openxr_action.h"
+
+#include "extensions/openxr_composition_layer_provider.h"
+#include "extensions/openxr_extension_wrapper.h"
+
+// Note, OpenXR code that we wrote for our plugin makes use of C++20 notation for initialising structs which ensures zeroing out unspecified members.
+// Godot is currently restricted to C++17 which doesn't allow this notation. Make sure critical fields are set.
+
+// forward declarations, we don't want to include these fully
+class OpenXRVulkanExtension;
+
+class OpenXRAPI {
+private:
+ // our singleton
+ static OpenXRAPI *singleton;
+
+ // layers
+ uint32_t num_layer_properties = 0;
+ XrApiLayerProperties *layer_properties = nullptr;
+
+ // extensions
+ uint32_t num_supported_extensions = 0;
+ XrExtensionProperties *supported_extensions = nullptr;
+ Vector<OpenXRExtensionWrapper *> registered_extension_wrappers;
+ Vector<const char *> enabled_extensions;
+
+ // composition layer providers
+ Vector<OpenXRCompositionLayerProvider *> composition_layer_providers;
+
+ // view configuration
+ uint32_t num_view_configuration_types = 0;
+ XrViewConfigurationType *supported_view_configuration_types = nullptr;
+
+ // reference spaces
+ uint32_t num_reference_spaces = 0;
+ XrReferenceSpaceType *supported_reference_spaces = nullptr;
+
+ // swapchains (note these are platform dependent)
+ uint32_t num_swapchain_formats = 0;
+ int64_t *supported_swapchain_formats = nullptr;
+
+ // configuration
+ XrFormFactor form_factor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
+ XrViewConfigurationType view_configuration = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
+ XrReferenceSpaceType reference_space = XR_REFERENCE_SPACE_TYPE_STAGE;
+ XrEnvironmentBlendMode environment_blend_mode = XR_ENVIRONMENT_BLEND_MODE_OPAQUE;
+
+ // state
+ XrInstance instance = XR_NULL_HANDLE;
+ XrSystemId system_id;
+ String system_name;
+ uint32_t vendor_id;
+ XrSystemTrackingProperties tracking_properties;
+ XrSession session = XR_NULL_HANDLE;
+ XrSessionState session_state = XR_SESSION_STATE_UNKNOWN;
+ bool running = false;
+ XrFrameState frame_state = { XR_TYPE_FRAME_STATE, NULL, 0, 0, false };
+
+ OpenXRGraphicsExtensionWrapper *graphics_extension = nullptr;
+ XrSystemGraphicsProperties graphics_properties;
+ void *swapchain_graphics_data = nullptr;
+ uint32_t image_index = 0;
+ bool image_acquired = false;
+
+ uint32_t view_count = 0;
+ XrViewConfigurationView *view_configuration_views = nullptr;
+ XrView *views = nullptr;
+ XrCompositionLayerProjectionView *projection_views = nullptr;
+ XrSwapchain swapchain = XR_NULL_HANDLE;
+
+ XrSpace play_space = XR_NULL_HANDLE;
+ XrSpace view_space = XR_NULL_HANDLE;
+ bool view_pose_valid = false;
+ XRPose::TrackingConfidence head_pose_confidence = XRPose::XR_TRACKING_CONFIDENCE_NONE;
+
+ bool load_layer_properties();
+ bool load_supported_extensions();
+ bool is_extension_supported(const char *p_extension) const;
+
+ // instance
+ bool create_instance();
+ bool get_system_info();
+ bool load_supported_view_configuration_types();
+ bool is_view_configuration_supported(XrViewConfigurationType p_configuration_type) const;
+ bool load_supported_view_configuration_views(XrViewConfigurationType p_configuration_type);
+ void destroy_instance();
+
+ // session
+ bool create_session();
+ bool load_supported_reference_spaces();
+ bool is_reference_space_supported(XrReferenceSpaceType p_reference_space);
+ bool setup_spaces();
+ bool load_supported_swapchain_formats();
+ bool is_swapchain_format_supported(int64_t p_swapchain_format);
+ bool create_main_swapchain();
+ void destroy_session();
+
+ // swapchains
+ bool create_swapchain(int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, XrSwapchain &r_swapchain, void **r_swapchain_graphics_data);
+ bool acquire_image(XrSwapchain p_swapchain, uint32_t &r_image_index);
+ bool release_image(XrSwapchain p_swapchain);
+
+ // action map
+ struct Path {
+ XrPath path;
+ };
+ RID_Owner<Path, true> xr_path_owner;
+
+ struct ActionSet {
+ bool is_attached;
+ XrActionSet handle;
+ };
+ RID_Owner<ActionSet, true> action_set_owner;
+
+ struct PathWithSpace {
+ XrPath toplevel_path;
+ XrSpace space;
+ bool was_location_valid;
+ };
+
+ struct Action {
+ XrActionType action_type;
+ Vector<PathWithSpace> toplevel_paths;
+ XrAction handle;
+ };
+ RID_Owner<Action, true> action_owner;
+
+ // state changes
+ bool poll_events();
+ bool on_state_idle();
+ bool on_state_ready();
+ bool on_state_synchronized();
+ bool on_state_visible();
+ bool on_state_focused();
+ bool on_state_stopping();
+ bool on_state_loss_pending();
+ bool on_state_exiting();
+
+ // convencience
+ void copy_string_to_char_buffer(const String p_string, char *p_buffer, int p_buffer_len);
+
+protected:
+ friend class OpenXRVulkanExtension;
+
+ XrInstance get_instance() const { return instance; };
+ XrSystemId get_system_id() const { return system_id; };
+ XrSession get_session() const { return session; };
+
+ // helper method to convert an XrPosef to a Transform3D
+ Transform3D transform_from_pose(const XrPosef &p_pose);
+
+ // helper method to get a valid Transform3D from an openxr space location
+ XRPose::TrackingConfidence transform_from_location(const XrSpaceLocation &p_location, Transform3D &r_transform);
+ XRPose::TrackingConfidence transform_from_location(const XrHandJointLocationEXT &p_location, Transform3D &r_transform);
+ void parse_velocities(const XrSpaceVelocity &p_velocity, Vector3 &r_linear_velocity, Vector3 r_angular_velocity);
+
+public:
+ static void setup_global_defs();
+ static bool openxr_is_enabled();
+ static OpenXRAPI *get_singleton();
+
+ String get_error_string(XrResult result);
+ String get_swapchain_format_name(int64_t p_swapchain_format) const;
+
+ void register_extension_wrapper(OpenXRExtensionWrapper *p_extension_wrapper);
+
+ bool is_initialized();
+ bool is_running();
+ bool initialise(const String &p_rendering_driver);
+ bool initialise_session();
+ void finish();
+
+ XrTime get_next_frame_time() { return frame_state.predictedDisplayTime + frame_state.predictedDisplayPeriod; };
+ bool can_render() { return instance != XR_NULL_HANDLE && session != XR_NULL_HANDLE && running && view_pose_valid && frame_state.shouldRender; };
+
+ Size2 get_recommended_target_size();
+ XRPose::TrackingConfidence get_head_center(Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity);
+ bool get_view_transform(uint32_t p_view, Transform3D &r_transform);
+ bool get_view_projection(uint32_t p_view, double p_z_near, double p_z_far, CameraMatrix &p_camera_matrix);
+ bool process();
+
+ void pre_render();
+ bool pre_draw_viewport(RID p_render_target);
+ void post_draw_viewport(RID p_render_target);
+ void end_frame();
+
+ // action map
+ String get_default_action_map_resource_name();
+ RID path_create(const String p_name);
+ void path_free(RID p_path);
+ RID action_set_create(const String p_name, const String p_localized_name, const int p_priority);
+ bool action_set_attach(RID p_action_set);
+ void action_set_free(RID p_action_set);
+ RID action_create(RID p_action_set, const String p_name, const String p_localized_name, OpenXRAction::ActionType p_action_type, const Vector<RID> &p_toplevel_paths);
+ void action_free(RID p_action);
+
+ struct Binding {
+ RID action;
+ String path;
+ };
+ bool suggest_bindings(const String p_interaction_profile, const Vector<Binding> p_bindings);
+
+ bool sync_action_sets(const Vector<RID> p_active_sets);
+ bool get_action_bool(RID p_action, RID p_path);
+ float get_action_float(RID p_action, RID p_path);
+ Vector2 get_action_vector2(RID p_action, RID p_path);
+ XRPose::TrackingConfidence get_action_pose(RID p_action, RID p_path, Transform3D &r_transform, Vector3 &r_linear_velocity, Vector3 &r_angular_velocity);
+ bool trigger_haptic_pulse(RID p_action, RID p_path, float p_frequency, float p_amplitude, XrDuration p_duration_ns);
+
+ OpenXRAPI();
+ ~OpenXRAPI();
+};
+
+#endif // !OPENXR_DRIVER_H
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
new file mode 100644
index 0000000000..394f634687
--- /dev/null
+++ b/modules/openxr/openxr_interface.cpp
@@ -0,0 +1,663 @@
+/*************************************************************************/
+/* openxr_interface.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_interface.h"
+
+#include "core/io/resource_loader.h"
+#include "core/io/resource_saver.h"
+#include "servers/rendering/rendering_server_globals.h"
+
+void OpenXRInterface::_bind_methods() {
+ // todo
+}
+
+StringName OpenXRInterface::get_name() const {
+ return StringName("OpenXR");
+};
+
+uint32_t OpenXRInterface::get_capabilities() const {
+ return XRInterface::XR_VR + XRInterface::XR_STEREO;
+};
+
+XRInterface::TrackingStatus OpenXRInterface::get_tracking_status() const {
+ return tracking_state;
+}
+
+void OpenXRInterface::_load_action_map() {
+ ERR_FAIL_NULL(openxr_api);
+
+ // This may seem a bit duplicitous to a little bit of background info here.
+ // OpenXRActionMap (with all its sub resource classes) is a class that allows us to configure and store an action map in.
+ // This gives the user the ability to edit the action map in a UI and customise the actions.
+ // OpenXR however requires us to submit an action map and it takes over from that point and we can no longer change it.
+ // This system does that push and we store the info needed to then work with this action map going forward.
+
+ // Within our openxr device we maintain a number of classes that wrap the relevant OpenXR objects for this.
+ // Within OpenXRInterface we have a few internal classes that keep track of what we've created.
+ // This allow us to process the relevant actions each frame.
+
+ // just in case clean up
+ free_action_sets();
+ free_trackers();
+
+ Ref<OpenXRActionMap> action_map;
+ if (Engine::get_singleton()->is_editor_hint()) {
+#ifdef TOOLS_ENABLED
+ action_map.instantiate();
+ action_map->create_editor_action_sets();
+#endif
+ } else {
+ String default_tres_name = openxr_api->get_default_action_map_resource_name();
+
+ // Check if we can load our default
+ if (ResourceLoader::exists(default_tres_name)) {
+ action_map = ResourceLoader::load(default_tres_name);
+ }
+
+ // Check if we need to create default action set
+ if (action_map.is_null()) {
+ action_map.instantiate();
+ action_map->create_default_action_sets();
+#ifdef TOOLS_ENABLED
+ // Save our action sets so our user can
+ action_map->set_path(default_tres_name, true);
+ ResourceSaver::save(default_tres_name, action_map);
+#endif
+ }
+ }
+
+ // process our action map
+ if (action_map.is_valid()) {
+ Map<Ref<OpenXRAction>, RID> action_rids;
+
+ Array action_sets = action_map->get_action_sets();
+ for (int i = 0; i < action_sets.size(); i++) {
+ // Create our action set
+ Ref<OpenXRActionSet> xr_action_set = action_sets[i];
+ ActionSet *action_set = create_action_set(xr_action_set->get_name(), xr_action_set->get_localized_name(), xr_action_set->get_priority());
+ if (!action_set) {
+ continue;
+ }
+
+ // Now create our actions for these
+ Array actions = xr_action_set->get_actions();
+ for (int j = 0; j < actions.size(); j++) {
+ Ref<OpenXRAction> xr_action = actions[j];
+
+ PackedStringArray toplevel_paths = xr_action->get_toplevel_paths();
+ Vector<RID> toplevel_rids;
+ Vector<Tracker *> trackers;
+
+ for (int k = 0; k < toplevel_paths.size(); k++) {
+ Tracker *tracker = get_tracker(toplevel_paths[k]);
+ if (tracker) {
+ toplevel_rids.push_back(tracker->path_rid);
+ trackers.push_back(tracker);
+ }
+ }
+
+ Action *action = create_action(action_set, xr_action->get_name(), xr_action->get_localized_name(), xr_action->get_action_type(), toplevel_rids);
+ if (action) {
+ // we link our actions back to our trackers so we know which actions to check when we're processing our trackers
+ for (int t = 0; t < trackers.size(); t++) {
+ link_action_to_tracker(trackers[t], action);
+ }
+
+ // add this to our map for creating our interaction profiles
+ action_rids[xr_action] = action->action_rid;
+ }
+ }
+ }
+
+ // now do our suggestions
+ Array interaction_profiles = action_map->get_interaction_profiles();
+ for (int i = 0; i < interaction_profiles.size(); i++) {
+ Vector<OpenXRAPI::Binding> bindings;
+ Ref<OpenXRInteractionProfile> xr_interaction_profile = interaction_profiles[i];
+
+ Array xr_bindings = xr_interaction_profile->get_bindings();
+ for (int j = 0; j < xr_bindings.size(); j++) {
+ Ref<OpenXRIPBinding> xr_binding = xr_bindings[j];
+ Ref<OpenXRAction> xr_action = xr_binding->get_action();
+ OpenXRAPI::Binding binding;
+
+ if (action_rids.has(xr_action)) {
+ binding.action = action_rids[xr_action];
+ } else {
+ print_line("Action ", xr_action->get_name(), " isn't part of an action set!");
+ continue;
+ }
+
+ PackedStringArray xr_paths = xr_binding->get_paths();
+ for (int k = 0; k < xr_paths.size(); k++) {
+ binding.path = xr_paths[k];
+ bindings.push_back(binding);
+ }
+ }
+
+ openxr_api->suggest_bindings(xr_interaction_profile->get_interaction_profile_path(), bindings);
+ }
+ }
+}
+
+OpenXRInterface::ActionSet *OpenXRInterface::create_action_set(const String &p_action_set_name, const String &p_localized_name, const int p_priority) {
+ ERR_FAIL_NULL_V(openxr_api, nullptr);
+
+ // find if it already exists
+ for (int i = 0; i < action_sets.size(); i++) {
+ if (action_sets[i]->action_set_name == p_action_set_name) {
+ // already exists in this set
+ return nullptr;
+ }
+ }
+
+ ActionSet *action_set = memnew(ActionSet);
+ action_set->action_set_name = p_action_set_name;
+ action_set->is_active = true;
+ action_set->action_set_rid = openxr_api->action_set_create(p_action_set_name, p_localized_name, p_priority);
+ action_sets.push_back(action_set);
+
+ return action_set;
+}
+
+void OpenXRInterface::free_action_sets() {
+ ERR_FAIL_NULL(openxr_api);
+
+ for (int i = 0; i < action_sets.size(); i++) {
+ ActionSet *action_set = action_sets[i];
+
+ openxr_api->path_free(action_set->action_set_rid);
+ free_actions(action_set);
+
+ memfree(action_set);
+ }
+ action_sets.clear();
+}
+
+OpenXRInterface::Action *OpenXRInterface::create_action(ActionSet *p_action_set, const String &p_action_name, const String &p_localized_name, OpenXRAction::ActionType p_action_type, const Vector<RID> p_toplevel_paths) {
+ ERR_FAIL_NULL_V(openxr_api, nullptr);
+
+ for (int i = 0; i < p_action_set->actions.size(); i++) {
+ if (p_action_set->actions[i]->action_name == p_action_name) {
+ // already exists in this set
+ return nullptr;
+ }
+ }
+
+ Action *action = memnew(Action);
+ action->action_name = p_action_name;
+ action->action_type = p_action_type;
+ action->action_rid = openxr_api->action_create(p_action_set->action_set_rid, p_action_name, p_localized_name, p_action_type, p_toplevel_paths);
+ p_action_set->actions.push_back(action);
+
+ return action;
+}
+
+OpenXRInterface::Action *OpenXRInterface::find_action(const String &p_action_name) {
+ // We just find the first action by this name
+
+ for (int i = 0; i < action_sets.size(); i++) {
+ for (int j = 0; j < action_sets[i]->actions.size(); j++) {
+ if (action_sets[i]->actions[j]->action_name == p_action_name) {
+ return action_sets[i]->actions[j];
+ }
+ }
+ }
+
+ // not found
+ return nullptr;
+}
+
+void OpenXRInterface::free_actions(ActionSet *p_action_set) {
+ ERR_FAIL_NULL(openxr_api);
+
+ for (int i = 0; i < p_action_set->actions.size(); i++) {
+ Action *action = p_action_set->actions[i];
+
+ openxr_api->action_free(action->action_rid);
+
+ memdelete(action);
+ }
+ p_action_set->actions.clear();
+}
+
+OpenXRInterface::Tracker *OpenXRInterface::get_tracker(const String &p_path_name) {
+ XRServer *xr_server = XRServer::get_singleton();
+ ERR_FAIL_NULL_V(xr_server, nullptr);
+ ERR_FAIL_NULL_V(openxr_api, nullptr);
+
+ Tracker *tracker = nullptr;
+ for (int i = 0; i < trackers.size(); i++) {
+ tracker = trackers[i];
+ if (tracker->path_name == p_path_name) {
+ return tracker;
+ }
+ }
+
+ // create our positional tracker
+ Ref<XRPositionalTracker> positional_tracker;
+ positional_tracker.instantiate();
+
+ // We have standardised some names to make things nicer to the user so lets recognise the toplevel paths related to these.
+ if (p_path_name == "/user/hand/left") {
+ positional_tracker->set_tracker_type(XRServer::TRACKER_CONTROLLER);
+ positional_tracker->set_tracker_name("left_hand");
+ positional_tracker->set_tracker_desc("Left hand controller");
+ positional_tracker->set_tracker_hand(XRPositionalTracker::TRACKER_HAND_LEFT);
+ } else if (p_path_name == "/user/hand/right") {
+ positional_tracker->set_tracker_type(XRServer::TRACKER_CONTROLLER);
+ positional_tracker->set_tracker_name("right_hand");
+ positional_tracker->set_tracker_desc("Right hand controller");
+ positional_tracker->set_tracker_hand(XRPositionalTracker::TRACKER_HAND_RIGHT);
+ } else {
+ positional_tracker->set_tracker_type(XRServer::TRACKER_CONTROLLER);
+ positional_tracker->set_tracker_name(p_path_name);
+ positional_tracker->set_tracker_desc(p_path_name);
+ }
+ xr_server->add_tracker(positional_tracker);
+
+ // create a new entry
+ tracker = memnew(Tracker);
+ tracker->path_name = p_path_name;
+ tracker->path_rid = openxr_api->path_create(p_path_name);
+ tracker->positional_tracker = positional_tracker;
+ trackers.push_back(tracker);
+
+ return tracker;
+}
+
+OpenXRInterface::Tracker *OpenXRInterface::find_tracker(const String &p_positional_tracker_name) {
+ for (int i = 0; i < trackers.size(); i++) {
+ Tracker *tracker = trackers[i];
+ if (tracker->positional_tracker.is_valid() && tracker->positional_tracker->get_tracker_name() == p_positional_tracker_name) {
+ return tracker;
+ }
+ }
+
+ return nullptr;
+}
+
+void OpenXRInterface::link_action_to_tracker(Tracker *p_tracker, Action *p_action) {
+ if (p_tracker->actions.find(p_action) == -1) {
+ p_tracker->actions.push_back(p_action);
+ }
+}
+
+void OpenXRInterface::handle_tracker(Tracker *p_tracker) {
+ ERR_FAIL_NULL(openxr_api);
+ ERR_FAIL_COND(p_tracker->positional_tracker.is_null());
+
+ // handle all the actions
+ for (int i = 0; i < p_tracker->actions.size(); i++) {
+ Action *action = p_tracker->actions[i];
+ switch (action->action_type) {
+ case OpenXRAction::OPENXR_ACTION_BOOL: {
+ bool pressed = openxr_api->get_action_bool(action->action_rid, p_tracker->path_rid);
+ p_tracker->positional_tracker->set_input(action->action_name, Variant(pressed));
+ } break;
+ case OpenXRAction::OPENXR_ACTION_FLOAT: {
+ real_t value = openxr_api->get_action_float(action->action_rid, p_tracker->path_rid);
+ p_tracker->positional_tracker->set_input(action->action_name, Variant(value));
+ } break;
+ case OpenXRAction::OPENXR_ACTION_VECTOR2: {
+ Vector2 value = openxr_api->get_action_vector2(action->action_rid, p_tracker->path_rid);
+ p_tracker->positional_tracker->set_input(action->action_name, Variant(value));
+ } break;
+ case OpenXRAction::OPENXR_ACTION_POSE: {
+ Transform3D transform;
+ Vector3 linear, angular;
+ XRPose::TrackingConfidence confidence = openxr_api->get_action_pose(action->action_rid, p_tracker->path_rid, transform, linear, angular);
+ if (confidence != XRPose::XR_TRACKING_CONFIDENCE_NONE) {
+ String name;
+ // We can't have dual action names in OpenXR hence we added _pose, but default, aim and grip and default pose action names in Godot so rename them on the tracker.
+ // NOTE need to decide on whether we should keep the naming convention or rename it on Godots side
+ if (action->action_name == "default_pose") {
+ name = "default";
+ } else if (action->action_name == "aim_pose") {
+ name = "aim";
+ } else if (action->action_name == "grip_pose") {
+ name = "grip";
+ } else {
+ name = action->action_name;
+ }
+ p_tracker->positional_tracker->set_pose(name, transform, linear, angular, confidence);
+ }
+ } break;
+ default: {
+ // not yet supported
+ } break;
+ }
+ }
+}
+
+void OpenXRInterface::trigger_haptic_pulse(const String &p_action_name, const StringName &p_tracker_name, double p_frequency, double p_amplitude, double p_duration_sec, double p_delay_sec) {
+ ERR_FAIL_NULL(openxr_api);
+ Action *action = find_action(p_action_name);
+ ERR_FAIL_NULL(action);
+ Tracker *tracker = find_tracker(p_tracker_name);
+ ERR_FAIL_NULL(tracker);
+
+ // TODO OpenXR does not support delay, so we may need to add support for that somehow...
+
+ XrDuration duration = XrDuration(p_duration_sec * 1000000000.0); // seconds -> nanoseconds
+
+ openxr_api->trigger_haptic_pulse(action->action_rid, tracker->path_rid, p_frequency, p_amplitude, duration);
+}
+
+void OpenXRInterface::free_trackers() {
+ XRServer *xr_server = XRServer::get_singleton();
+ ERR_FAIL_NULL(xr_server);
+ ERR_FAIL_NULL(openxr_api);
+
+ for (int i = 0; i < trackers.size(); i++) {
+ Tracker *tracker = trackers[i];
+
+ openxr_api->path_free(tracker->path_rid);
+ xr_server->remove_tracker(tracker->positional_tracker);
+ tracker->positional_tracker.unref();
+
+ memdelete(tracker);
+ }
+ trackers.clear();
+}
+
+bool OpenXRInterface::initialise_on_startup() const {
+ if (openxr_api == nullptr) {
+ return false;
+ } else if (!openxr_api->is_initialized()) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+bool OpenXRInterface::is_initialized() const {
+ return initialized;
+};
+
+bool OpenXRInterface::initialize() {
+ XRServer *xr_server = XRServer::get_singleton();
+ ERR_FAIL_NULL_V(xr_server, false);
+
+ if (openxr_api == nullptr) {
+ return false;
+ } else if (!openxr_api->is_initialized()) {
+ return false;
+ } else if (initialized) {
+ return true;
+ }
+
+ // load up our action sets before setting up our session, note that our profiles are suggestions, OpenXR takes ownership of (re)binding
+ _load_action_map();
+
+ if (!openxr_api->initialise_session()) {
+ return false;
+ }
+
+ // we must create a tracker for our head
+ head.instantiate();
+ head->set_tracker_type(XRServer::TRACKER_HEAD);
+ head->set_tracker_name("head");
+ head->set_tracker_desc("Players head");
+ xr_server->add_tracker(head);
+
+ // attach action sets
+ for (int i = 0; i < action_sets.size(); i++) {
+ openxr_api->action_set_attach(action_sets[i]->action_set_rid);
+ }
+
+ // make this our primary interface
+ xr_server->set_primary_interface(this);
+
+ initialized = true;
+
+ return initialized;
+}
+
+void OpenXRInterface::uninitialize() {
+ // Our OpenXR driver will clean itself up properly when Godot exits, so we just do some basic stuff here
+
+ // end the session if we need to?
+
+ // cleanup stuff
+ free_action_sets();
+ free_trackers();
+
+ XRServer *xr_server = XRServer::get_singleton();
+ if (xr_server) {
+ if (head.is_valid()) {
+ xr_server->remove_tracker(head);
+
+ head.unref();
+ }
+ }
+
+ initialized = false;
+}
+
+bool OpenXRInterface::supports_play_area_mode(XRInterface::PlayAreaMode p_mode) {
+ return false;
+}
+
+XRInterface::PlayAreaMode OpenXRInterface::get_play_area_mode() const {
+ return XRInterface::XR_PLAY_AREA_UNKNOWN;
+}
+
+bool OpenXRInterface::set_play_area_mode(XRInterface::PlayAreaMode p_mode) {
+ return false;
+}
+
+Size2 OpenXRInterface::get_render_target_size() {
+ if (openxr_api == nullptr) {
+ return Size2();
+ } else {
+ return openxr_api->get_recommended_target_size();
+ }
+}
+
+uint32_t OpenXRInterface::get_view_count() {
+ // TODO set this based on our configuration
+ return 2;
+}
+
+void OpenXRInterface::_set_default_pos(Transform3D &p_transform, double p_world_scale, uint64_t p_eye) {
+ p_transform = Transform3D();
+
+ // if we're not tracking, don't put our head on the floor...
+ p_transform.origin.y = 1.5 * p_world_scale;
+
+ // overkill but..
+ if (p_eye == 1) {
+ p_transform.origin.x = 0.03 * p_world_scale;
+ } else if (p_eye == 2) {
+ p_transform.origin.x = -0.03 * p_world_scale;
+ }
+}
+
+Transform3D OpenXRInterface::get_camera_transform() {
+ XRServer *xr_server = XRServer::get_singleton();
+ ERR_FAIL_NULL_V(xr_server, Transform3D());
+
+ Transform3D hmd_transform;
+ double world_scale = xr_server->get_world_scale();
+
+ // head_transform should be updated in process
+
+ hmd_transform.basis = head_transform.basis;
+ hmd_transform.origin = head_transform.origin * world_scale;
+
+ return hmd_transform;
+}
+
+Transform3D OpenXRInterface::get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) {
+ XRServer *xr_server = XRServer::get_singleton();
+ ERR_FAIL_NULL_V(xr_server, Transform3D());
+
+ Transform3D t;
+ if (openxr_api && openxr_api->get_view_transform(p_view, t)) {
+ // update our cached value if we have a valid transform
+ transform_for_view[p_view] = t;
+ } else {
+ // reuse cached value
+ t = transform_for_view[p_view];
+ }
+
+ // Apply our world scale
+ double world_scale = xr_server->get_world_scale();
+ t.origin *= world_scale;
+
+ return p_cam_transform * xr_server->get_reference_frame() * t;
+}
+
+CameraMatrix OpenXRInterface::get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) {
+ CameraMatrix cm;
+
+ if (openxr_api) {
+ if (openxr_api->get_view_projection(p_view, p_z_near, p_z_far, cm)) {
+ return cm;
+ }
+ }
+
+ // Failed to get from our OpenXR device? Default to some sort of sensible camera matrix..
+ cm.set_for_hmd(p_view + 1, 1.0, 6.0, 14.5, 4.0, 1.5, p_z_near, p_z_far);
+
+ return cm;
+}
+
+void OpenXRInterface::process() {
+ if (openxr_api) {
+ // do our normal process
+ if (openxr_api->process()) {
+ Transform3D t;
+ Vector3 linear_velocity;
+ Vector3 angular_velocity;
+ XRPose::TrackingConfidence confidence = openxr_api->get_head_center(t, linear_velocity, angular_velocity);
+ if (confidence != XRPose::XR_TRACKING_CONFIDENCE_NONE) {
+ // Only update our transform if we have one to update it with
+ // note that poses are stored without world scale and reference frame applied!
+ head_transform = t;
+ head_linear_velocity = linear_velocity;
+ head_angular_velocity = angular_velocity;
+ }
+ }
+
+ // handle our action sets....
+ Vector<RID> active_sets;
+ for (int i = 0; i < action_sets.size(); i++) {
+ if (action_sets[i]->is_active) {
+ active_sets.push_back(action_sets[i]->action_set_rid);
+ }
+ }
+
+ if (openxr_api->sync_action_sets(active_sets)) {
+ for (int i = 0; i < trackers.size(); i++) {
+ handle_tracker(trackers[i]);
+ }
+ }
+ }
+
+ if (head.is_valid()) {
+ // TODO figure out how to get our velocities
+
+ head->set_pose("default", head_transform, head_linear_velocity, head_angular_velocity);
+
+ // TODO set confidence on pose once we support tracking this..
+ }
+}
+
+void OpenXRInterface::pre_render() {
+ if (openxr_api) {
+ openxr_api->pre_render();
+ }
+}
+
+bool OpenXRInterface::pre_draw_viewport(RID p_render_target) {
+ if (openxr_api) {
+ return openxr_api->pre_draw_viewport(p_render_target);
+ } else {
+ // don't render
+ return false;
+ }
+}
+
+Vector<BlitToScreen> OpenXRInterface::post_draw_viewport(RID p_render_target, const Rect2 &p_screen_rect) {
+ Vector<BlitToScreen> blit_to_screen;
+
+ // If separate HMD we should output one eye to screen
+ if (p_screen_rect != Rect2()) {
+ BlitToScreen blit;
+
+ blit.render_target = p_render_target;
+ blit.multi_view.use_layer = true;
+ blit.multi_view.layer = 0;
+ blit.lens_distortion.apply = false;
+
+ Size2 render_size = get_render_target_size();
+ Rect2 dst_rect = p_screen_rect;
+ float new_height = dst_rect.size.x * (render_size.y / render_size.x);
+ if (new_height > dst_rect.size.y) {
+ dst_rect.position.y = (0.5 * dst_rect.size.y) - (0.5 * new_height);
+ dst_rect.size.y = new_height;
+ } else {
+ float new_width = dst_rect.size.y * (render_size.x / render_size.y);
+
+ dst_rect.position.x = (0.5 * dst_rect.size.x) - (0.5 * new_width);
+ dst_rect.size.x = new_width;
+ }
+
+ blit.dst_rect = dst_rect;
+ blit_to_screen.push_back(blit);
+ }
+
+ if (openxr_api) {
+ openxr_api->post_draw_viewport(p_render_target);
+ }
+
+ return blit_to_screen;
+}
+
+void OpenXRInterface::end_frame() {
+ if (openxr_api) {
+ openxr_api->end_frame();
+ }
+}
+
+OpenXRInterface::OpenXRInterface() {
+ openxr_api = OpenXRAPI::get_singleton();
+
+ // while we don't have head tracking, don't put the headset on the floor...
+ _set_default_pos(head_transform, 1.0, 0);
+ _set_default_pos(transform_for_view[0], 1.0, 1);
+ _set_default_pos(transform_for_view[1], 1.0, 2);
+}
+
+OpenXRInterface::~OpenXRInterface() {
+ openxr_api = nullptr;
+}
diff --git a/modules/openxr/openxr_interface.h b/modules/openxr/openxr_interface.h
new file mode 100644
index 0000000000..ede7d481d2
--- /dev/null
+++ b/modules/openxr/openxr_interface.h
@@ -0,0 +1,129 @@
+/*************************************************************************/
+/* openxr_interface.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_INTERFACE_H
+#define OPENXR_INTERFACE_H
+
+#include "servers/xr/xr_interface.h"
+#include "servers/xr/xr_positional_tracker.h"
+
+#include "action_map/openxr_action_map.h"
+#include "openxr_api.h"
+
+class OpenXRInterface : public XRInterface {
+ GDCLASS(OpenXRInterface, XRInterface);
+
+private:
+ OpenXRAPI *openxr_api = nullptr;
+ bool initialized = false;
+ XRInterface::TrackingStatus tracking_state;
+
+ // At a minimum we need a tracker for our head
+ Ref<XRPositionalTracker> head;
+ Transform3D head_transform;
+ Vector3 head_linear_velocity;
+ Vector3 head_angular_velocity;
+ Transform3D transform_for_view[2]; // We currently assume 2, but could be 4 for VARJO which we do not support yet
+
+ void _load_action_map();
+
+ struct Action {
+ String action_name;
+ OpenXRAction::ActionType action_type;
+ RID action_rid;
+ };
+ struct ActionSet {
+ String action_set_name;
+ bool is_active;
+ RID action_set_rid;
+ Vector<Action *> actions;
+ };
+ struct Tracker {
+ String path_name;
+ RID path_rid;
+ Ref<XRPositionalTracker> positional_tracker;
+ Vector<Action *> actions;
+ };
+
+ Vector<ActionSet *> action_sets;
+ Vector<Tracker *> trackers;
+
+ ActionSet *create_action_set(const String &p_action_set_name, const String &p_localized_name, const int p_priority);
+ void free_action_sets();
+
+ Action *create_action(ActionSet *p_action_set, const String &p_action_name, const String &p_localized_name, OpenXRAction::ActionType p_action_type, const Vector<RID> p_toplevel_paths);
+ Action *find_action(const String &p_action_name);
+ void free_actions(ActionSet *p_action_set);
+
+ Tracker *get_tracker(const String &p_path_name);
+ Tracker *find_tracker(const String &p_positional_tracker_name);
+ void link_action_to_tracker(Tracker *p_tracker, Action *p_action);
+ void handle_tracker(Tracker *p_tracker);
+ void free_trackers();
+
+ void _set_default_pos(Transform3D &p_transform, double p_world_scale, uint64_t p_eye);
+
+protected:
+ static void _bind_methods();
+
+public:
+ virtual StringName get_name() const override;
+ virtual uint32_t get_capabilities() const override;
+
+ virtual TrackingStatus get_tracking_status() const override;
+
+ bool initialise_on_startup() const;
+ virtual bool is_initialized() const override;
+ virtual bool initialize() override;
+ virtual void uninitialize() override;
+
+ virtual void trigger_haptic_pulse(const String &p_action_name, const StringName &p_tracker_name, double p_frequency, double p_amplitude, double p_duration_sec, double p_delay_sec = 0) override;
+
+ virtual bool supports_play_area_mode(XRInterface::PlayAreaMode p_mode) override;
+ virtual XRInterface::PlayAreaMode get_play_area_mode() const override;
+ virtual bool set_play_area_mode(XRInterface::PlayAreaMode p_mode) override;
+
+ virtual Size2 get_render_target_size() override;
+ virtual uint32_t get_view_count() override;
+ virtual Transform3D get_camera_transform() override;
+ virtual Transform3D get_transform_for_view(uint32_t p_view, const Transform3D &p_cam_transform) override;
+ virtual CameraMatrix get_projection_for_view(uint32_t p_view, double p_aspect, double p_z_near, double p_z_far) override;
+
+ virtual void process() override;
+ virtual void pre_render() override;
+ bool pre_draw_viewport(RID p_render_target) override;
+ virtual Vector<BlitToScreen> post_draw_viewport(RID p_render_target, const Rect2 &p_screen_rect) override;
+ virtual void end_frame() override;
+
+ OpenXRInterface();
+ ~OpenXRInterface();
+};
+
+#endif // !OPENXR_INTERFACE_H
diff --git a/modules/openxr/openxr_util.cpp b/modules/openxr/openxr_util.cpp
new file mode 100644
index 0000000000..e515336daa
--- /dev/null
+++ b/modules/openxr/openxr_util.cpp
@@ -0,0 +1,291 @@
+/*************************************************************************/
+/* openxr_util.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "openxr_util.h"
+
+#define ENUM_TO_STRING_CASE(e) \
+ case e: { \
+ return String(#e); \
+ } break;
+
+// TODO see if we can generate this code further using the xml file with meta data supplied by OpenXR
+
+String OpenXRUtil::get_view_configuration_name(XrViewConfigurationType p_view_configuration) {
+ switch (p_view_configuration) {
+ ENUM_TO_STRING_CASE(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO)
+ ENUM_TO_STRING_CASE(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO)
+ ENUM_TO_STRING_CASE(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO)
+ ENUM_TO_STRING_CASE(XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT)
+ ENUM_TO_STRING_CASE(XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM)
+ default: {
+ return String("View Configuration ") + String::num_int64(int64_t(p_view_configuration));
+ } break;
+ }
+}
+
+String OpenXRUtil::get_reference_space_name(XrReferenceSpaceType p_reference_space) {
+ switch (p_reference_space) {
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_VIEW)
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_LOCAL)
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_STAGE)
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT)
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO)
+ ENUM_TO_STRING_CASE(XR_REFERENCE_SPACE_TYPE_MAX_ENUM)
+ default: {
+ return String("Reference space ") + String::num_int64(int64_t(p_reference_space));
+ } break;
+ }
+}
+
+String OpenXRUtil::get_structure_type_name(XrStructureType p_structure_type) {
+ switch (p_structure_type) {
+ ENUM_TO_STRING_CASE(XR_TYPE_UNKNOWN)
+ ENUM_TO_STRING_CASE(XR_TYPE_API_LAYER_PROPERTIES)
+ ENUM_TO_STRING_CASE(XR_TYPE_EXTENSION_PROPERTIES)
+ ENUM_TO_STRING_CASE(XR_TYPE_INSTANCE_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_GET_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_PROPERTIES)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_LOCATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW)
+ ENUM_TO_STRING_CASE(XR_TYPE_SESSION_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SESSION_BEGIN_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_STATE)
+ ENUM_TO_STRING_CASE(XR_TYPE_FRAME_END_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAPTIC_VIBRATION)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_BUFFER)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_STATE_BOOLEAN)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_STATE_FLOAT)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_STATE_VECTOR2F)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_STATE_POSE)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_SET_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_INSTANCE_PROPERTIES)
+ ENUM_TO_STRING_CASE(XR_TYPE_FRAME_WAIT_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_PROJECTION)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_QUAD)
+ ENUM_TO_STRING_CASE(XR_TYPE_REFERENCE_SPACE_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_SPACE_CREATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_CONFIGURATION_VIEW)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPACE_LOCATION)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPACE_VELOCITY)
+ ENUM_TO_STRING_CASE(XR_TYPE_FRAME_STATE)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_CONFIGURATION_PROPERTIES)
+ ENUM_TO_STRING_CASE(XR_TYPE_FRAME_BEGIN_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_EVENTS_LOST)
+ ENUM_TO_STRING_CASE(XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED)
+ ENUM_TO_STRING_CASE(XR_TYPE_INTERACTION_PROFILE_STATE)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTION_STATE_GET_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAPTIC_ACTION_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_ACTIONS_SYNC_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_CUBE_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_DEBUG_UTILS_LABEL_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_D3D11_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_D3D12_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_VISIBILITY_MASK_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_JOINT_LOCATIONS_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_JOINT_VELOCITIES_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_MESH_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_POSE_TYPE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_CONTROLLER_MODEL_STATE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC)
+ ENUM_TO_STRING_CASE(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT)
+ ENUM_TO_STRING_CASE(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_COMPONENTS_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_OBJECTS_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_PLANES_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESHES_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESH_BUFFERS_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIVE_TRACKER_PATHS_HTCX)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_TRACKING_MESH_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_TRACKING_SCALE_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_TRACKING_AIM_STATE_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_PASSTHROUGH_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_PASSTHROUGH_STYLE_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_BINDING_MODIFICATIONS_KHR)
+ ENUM_TO_STRING_CASE(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB)
+ ENUM_TO_STRING_CASE(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB)
+ ENUM_TO_STRING_CASE(XR_STRUCTURE_TYPE_MAX_ENUM)
+ default: {
+ return String("Structure type ") + String::num_int64(int64_t(p_structure_type));
+ } break;
+ }
+}
+
+String OpenXRUtil::get_session_state_name(XrSessionState p_session_state) {
+ switch (p_session_state) {
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_UNKNOWN)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_IDLE)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_READY)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_SYNCHRONIZED)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_VISIBLE)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_FOCUSED)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_STOPPING)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_LOSS_PENDING)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_EXITING)
+ ENUM_TO_STRING_CASE(XR_SESSION_STATE_MAX_ENUM)
+ default: {
+ return String("Session state ") + String::num_int64(int64_t(p_session_state));
+ } break;
+ }
+}
+
+String OpenXRUtil::make_xr_version_string(XrVersion p_version) {
+ String version;
+
+ version += String::num_int64(XR_VERSION_MAJOR(p_version));
+ version += String(".");
+ version += String::num_int64(XR_VERSION_MINOR(p_version));
+ version += String(".");
+ version += String::num_int64(XR_VERSION_PATCH(p_version));
+
+ return version;
+}
diff --git a/modules/openxr/openxr_util.h b/modules/openxr/openxr_util.h
new file mode 100644
index 0000000000..1261268376
--- /dev/null
+++ b/modules/openxr/openxr_util.h
@@ -0,0 +1,46 @@
+/*************************************************************************/
+/* openxr_util.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_UTIL_H
+#define OPENXR_UTIL_H
+
+#include "core/string/ustring.h"
+#include <openxr/openxr.h>
+
+class OpenXRUtil {
+public:
+ static String get_view_configuration_name(XrViewConfigurationType p_view_configuration);
+ static String get_reference_space_name(XrReferenceSpaceType p_reference_space);
+ static String get_structure_type_name(XrStructureType p_structure_type);
+ static String get_session_state_name(XrSessionState p_session_state);
+ static String make_xr_version_string(XrVersion p_version);
+};
+
+#endif // !OPENXR_UTIL_H
diff --git a/modules/openxr/register_types.cpp b/modules/openxr/register_types.cpp
new file mode 100644
index 0000000000..86ff368619
--- /dev/null
+++ b/modules/openxr/register_types.cpp
@@ -0,0 +1,91 @@
+/*************************************************************************/
+/* register_types.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "register_types.h"
+#include "main/main.h"
+
+#include "openxr_interface.h"
+
+#include "action_map/openxr_action.h"
+#include "action_map/openxr_action_map.h"
+#include "action_map/openxr_action_set.h"
+#include "action_map/openxr_interaction_profile.h"
+
+OpenXRAPI *openxr_api = nullptr;
+Ref<OpenXRInterface> openxr_interface;
+
+void preregister_openxr_types() {
+ // For now we create our openxr device here. If we merge it with openxr_interface we'll create that here soon.
+
+ OpenXRAPI::setup_global_defs();
+ openxr_api = OpenXRAPI::get_singleton();
+ if (openxr_api) {
+ if (!openxr_api->initialise(Main::get_rendering_driver_name())) {
+ return;
+ }
+ }
+}
+
+void register_openxr_types() {
+ GDREGISTER_CLASS(OpenXRInterface);
+
+ GDREGISTER_CLASS(OpenXRAction);
+ GDREGISTER_CLASS(OpenXRActionSet);
+ GDREGISTER_CLASS(OpenXRActionMap);
+ GDREGISTER_CLASS(OpenXRIPBinding);
+ GDREGISTER_CLASS(OpenXRInteractionProfile);
+
+ XRServer *xr_server = XRServer::get_singleton();
+ if (xr_server) {
+ openxr_interface.instantiate();
+ xr_server->add_interface(openxr_interface);
+
+ if (openxr_interface->initialise_on_startup()) {
+ openxr_interface->initialize();
+ }
+ }
+}
+
+void unregister_openxr_types() {
+ if (openxr_interface.is_valid()) {
+ // unregister our interface from the XR server
+ if (XRServer::get_singleton()) {
+ XRServer::get_singleton()->remove_interface(openxr_interface);
+ }
+
+ // and release
+ openxr_interface.unref();
+ }
+
+ if (openxr_api) {
+ openxr_api->finish();
+ memdelete(openxr_api);
+ }
+}
diff --git a/modules/openxr/register_types.h b/modules/openxr/register_types.h
new file mode 100644
index 0000000000..fb42770750
--- /dev/null
+++ b/modules/openxr/register_types.h
@@ -0,0 +1,40 @@
+/*************************************************************************/
+/* register_types.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef OPENXR_REGISTER_TYPES_H
+#define OPENXR_REGISTER_TYPES_H
+
+#define MODULE_OPENXR_HAS_PREREGISTER
+
+void preregister_openxr_types();
+void register_openxr_types();
+void unregister_openxr_types();
+
+#endif // OPENXR_REGISTER_TYPES_H
diff --git a/modules/text_server_adv/SCsub b/modules/text_server_adv/SCsub
index 6a06619840..5e5c284b57 100644
--- a/modules/text_server_adv/SCsub
+++ b/modules/text_server_adv/SCsub
@@ -49,6 +49,7 @@ if env["builtin_harfbuzz"]:
"src/hb-aat-map.cc",
"src/hb-blob.cc",
"src/hb-buffer-serialize.cc",
+ "src/hb-buffer-verify.cc",
"src/hb-buffer.cc",
"src/hb-common.cc",
#'src/hb-coretext.cc',
diff --git a/modules/visual_script/editor/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp
index 9433f3dba2..813902b54e 100644
--- a/modules/visual_script/editor/visual_script_editor.cpp
+++ b/modules/visual_script/editor/visual_script_editor.cpp
@@ -1081,6 +1081,7 @@ void VisualScriptEditor::_update_members() {
Control::get_theme_icon(SNAME("Basis"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("Transform3D"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("Color"), SNAME("EditorIcons")),
+ Control::get_theme_icon(SNAME("StringName"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("NodePath"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("RID"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("MiniObject"), SNAME("EditorIcons")),
@@ -1090,7 +1091,9 @@ void VisualScriptEditor::_update_members() {
Control::get_theme_icon(SNAME("Array"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedByteArray"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedInt32Array"), SNAME("EditorIcons")),
+ Control::get_theme_icon(SNAME("PackedInt64Array"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedFloat32Array"), SNAME("EditorIcons")),
+ Control::get_theme_icon(SNAME("PackedFloat64Array"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedStringArray"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedVector2Array"), SNAME("EditorIcons")),
Control::get_theme_icon(SNAME("PackedVector3Array"), SNAME("EditorIcons")),
@@ -1099,6 +1102,7 @@ void VisualScriptEditor::_update_members() {
List<StringName> var_names;
script->get_variable_list(&var_names);
+ var_names.sort_custom<StringName::AlphCompare>();
for (const StringName &E : var_names) {
TreeItem *ti = members->create_item(variables);
@@ -3532,7 +3536,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri
print_error("Category not handled: " + p_category.quote());
}
- if (Object::cast_to<VisualScriptFunctionCall>(vnode.ptr()) && p_category != "Class") {
+ if (Object::cast_to<VisualScriptFunctionCall>(vnode.ptr()) && p_category != "Class" && p_category != "VisualScriptNode") {
Vector<String> property_path = p_text.split(":");
String class_of_method = property_path[0];
String method_name = property_path[1];
@@ -3978,6 +3982,7 @@ void VisualScriptEditor::_notification(int p_what) {
_update_graph();
}
} break;
+
case NOTIFICATION_VISIBILITY_CHANGED: {
update_toggle_scripts_button();
members_section->set_visible(is_visible_in_tree());
diff --git a/modules/visual_script/editor/visual_script_property_selector.cpp b/modules/visual_script/editor/visual_script_property_selector.cpp
index 563c12eec4..31406a2a6f 100644
--- a/modules/visual_script/editor/visual_script_property_selector.cpp
+++ b/modules/visual_script/editor/visual_script_property_selector.cpp
@@ -118,9 +118,11 @@ void VisualScriptPropertySelector::_notification(int p_what) {
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
_update_icons();
} break;
+
case NOTIFICATION_ENTER_TREE: {
connect("confirmed", callable_mp(this, &VisualScriptPropertySelector::_confirmed));
} break;
+
case NOTIFICATION_PROCESS: {
// Update background search.
if (search_runner.is_valid()) {
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 88445f2f98..9549137aef 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -930,8 +930,6 @@ void VisualScript::get_script_property_list(List<PropertyInfo> *p_list) const {
get_variable_list(&vars);
for (const StringName &E : vars) {
- //if (!variables[E]._export)
- // continue;
PropertyInfo pi = variables[E].info;
pi.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE;
p_list->push_back(pi);
diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp
index e7f4e542c1..e672267b00 100644
--- a/modules/visual_script/visual_script_nodes.cpp
+++ b/modules/visual_script/visual_script_nodes.cpp
@@ -1784,10 +1784,7 @@ public:
virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Callable::CallError &r_error, String &r_error_str) {
bool valid;
- // *p_output[0] points to the same place as *p_inputs[2] so we need a temp to store the value before the change in the next line
- Variant temp = *p_inputs[2];
- *p_outputs[0] = *p_inputs[0];
- p_outputs[0]->set(*p_inputs[1], temp, &valid);
+ ((Variant *)p_inputs[0])->set(*p_inputs[1], *p_inputs[2], &valid);
if (!valid) {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
diff --git a/modules/webrtc/webrtc_data_channel_js.cpp b/modules/webrtc/webrtc_data_channel_js.cpp
index 4c41a4c7ee..0fb074b0c2 100644
--- a/modules/webrtc/webrtc_data_channel_js.cpp
+++ b/modules/webrtc/webrtc_data_channel_js.cpp
@@ -31,6 +31,7 @@
#ifdef JAVASCRIPT_ENABLED
#include "webrtc_data_channel_js.h"
+
#include "emscripten.h"
extern "C" {
@@ -104,8 +105,9 @@ int WebRTCDataChannelJS::get_available_packet_count() const {
Error WebRTCDataChannelJS::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
ERR_FAIL_COND_V(get_ready_state() != STATE_OPEN, ERR_UNCONFIGURED);
- if (queue_count == 0)
+ if (queue_count == 0) {
return ERR_UNAVAILABLE;
+ }
uint32_t to_read = 0;
uint32_t left = 0;
diff --git a/modules/websocket/emws_client.cpp b/modules/websocket/emws_client.cpp
index 2d029dfbbc..e051a3b564 100644
--- a/modules/websocket/emws_client.cpp
+++ b/modules/websocket/emws_client.cpp
@@ -31,6 +31,7 @@
#ifdef JAVASCRIPT_ENABLED
#include "emws_client.h"
+
#include "core/config/project_settings.h"
#include "core/io/ip.h"
#include "emscripten.h"
@@ -45,8 +46,9 @@ void EMWSClient::_esws_on_message(void *obj, const uint8_t *p_data, int p_data_s
EMWSClient *client = static_cast<EMWSClient *>(obj);
Error err = static_cast<EMWSPeer *>(*client->get_peer(1))->read_msg(p_data, p_data_size, p_is_string == 1);
- if (err == OK)
+ if (err == OK) {
client->_on_peer_packet();
+ }
}
void EMWSClient::_esws_on_error(void *obj) {
@@ -71,8 +73,9 @@ Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port,
String proto_string;
for (int i = 0; i < p_protocols.size(); i++) {
- if (i != 0)
+ if (i != 0) {
proto_string += ",";
+ }
proto_string += p_protocols[i];
}
@@ -109,8 +112,9 @@ Ref<WebSocketPeer> EMWSClient::get_peer(int p_peer_id) const {
MultiplayerPeer::ConnectionStatus EMWSClient::get_connection_status() const {
if (_peer->is_connected_to_host()) {
- if (_is_connecting)
+ if (_is_connecting) {
return CONNECTION_CONNECTING;
+ }
return CONNECTION_CONNECTED;
}
diff --git a/modules/websocket/emws_peer.cpp b/modules/websocket/emws_peer.cpp
index 77a96c8e4f..86169f88e9 100644
--- a/modules/websocket/emws_peer.cpp
+++ b/modules/websocket/emws_peer.cpp
@@ -31,6 +31,7 @@
#ifdef JAVASCRIPT_ENABLED
#include "emws_peer.h"
+
#include "core/io/ip.h"
void EMWSPeer::set_sock(int p_sock, unsigned int p_in_buf_size, unsigned int p_in_pkt_size, unsigned int p_out_buf_size) {
@@ -66,8 +67,9 @@ Error EMWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) {
}
Error EMWSPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
- if (_in_buffer.packets_left() == 0)
+ if (_in_buffer.packets_left() == 0) {
return ERR_UNAVAILABLE;
+ }
int read = 0;
Error err = _in_buffer.read_packet(_packet_buffer.ptrw(), _packet_buffer.size(), &_is_string, read);
@@ -109,7 +111,7 @@ void EMWSPeer::close(int p_code, String p_reason) {
IPAddress EMWSPeer::get_connected_host() const {
ERR_FAIL_V_MSG(IPAddress(), "Not supported in HTML5 export.");
-};
+}
uint16_t EMWSPeer::get_connected_port() const {
ERR_FAIL_V_MSG(0, "Not supported in HTML5 export.");
diff --git a/modules/webxr/webxr_interface_js.cpp b/modules/webxr/webxr_interface_js.cpp
index 86b857f72c..06b0e31801 100644
--- a/modules/webxr/webxr_interface_js.cpp
+++ b/modules/webxr/webxr_interface_js.cpp
@@ -31,11 +31,13 @@
#ifdef JAVASCRIPT_ENABLED
#include "webxr_interface_js.h"
+
#include "core/input/input.h"
#include "core/os/os.h"
#include "emscripten.h"
#include "godot_webxr.h"
#include "servers/rendering/renderer_compositor.h"
+
#include <stdlib.h>
void _emwebxr_on_session_supported(char *p_session_mode, int p_supported) {
@@ -481,7 +483,6 @@ void WebXRInterfaceJS::_update_tracker(int p_controller_id) {
sprintf(name, "axis_%i", i);
float value = *((float *)axes + (i + 1));
- ;
tracker->set_input(name, value);
}
free(axes);
diff --git a/modules/xatlas_unwrap/register_types.cpp b/modules/xatlas_unwrap/register_types.cpp
index 6f397fe285..139df9c735 100644
--- a/modules/xatlas_unwrap/register_types.cpp
+++ b/modules/xatlas_unwrap/register_types.cpp
@@ -120,6 +120,8 @@ bool xatlas_mesh_lightmap_unwrap_callback(float p_texel_size, const float *p_ver
xatlas::ChartOptions chart_options;
chart_options.fixWinding = true;
+ ERR_FAIL_COND_V_MSG(p_texel_size <= 0.0f, false, "Texel size must be greater than 0.");
+
xatlas::PackOptions pack_options;
pack_options.padding = 1;
pack_options.maxChartSize = 4094; // Lightmap atlassing needs 2 for padding between meshes, so 4096-2
diff --git a/platform/android/android_input_handler.cpp b/platform/android/android_input_handler.cpp
index 246ec6b198..10f23b320b 100644
--- a/platform/android/android_input_handler.cpp
+++ b/platform/android/android_input_handler.cpp
@@ -165,8 +165,9 @@ void AndroidInputHandler::process_touch(int p_event, int p_pointer, const Vector
ERR_CONTINUE(idx == -1);
- if (touch[i].pos == p_points[idx].pos)
- continue; //no move unncesearily
+ if (touch[i].pos == p_points[idx].pos) {
+ continue; // Don't move unnecessarily.
+ }
Ref<InputEventScreenDrag> ev;
ev.instantiate();
diff --git a/platform/android/api/jni_singleton.h b/platform/android/api/jni_singleton.h
index d8503b6caf..57d08ac83e 100644
--- a/platform/android/api/jni_singleton.h
+++ b/platform/android/api/jni_singleton.h
@@ -31,10 +31,10 @@
#ifndef JNI_SINGLETON_H
#define JNI_SINGLETON_H
-#include <core/config/engine.h>
-#include <core/variant/variant.h>
+#include "core/config/engine.h"
+#include "core/variant/variant.h"
#ifdef ANDROID_ENABLED
-#include <platform/android/jni_utils.h>
+#include "platform/android/jni_utils.h"
#endif
class JNISingleton : public Object {
@@ -93,8 +93,9 @@ public:
for (int i = 0; i < p_argcount; i++) {
jvalret vr = _variant_to_jvalue(env, E->get().argtypes[i], p_args[i]);
v[i] = vr.val;
- if (vr.obj)
+ if (vr.obj) {
to_erase.push_back(vr.obj);
+ }
}
Variant ret;
@@ -197,18 +198,19 @@ public:
}
void add_signal(const StringName &p_name, const Vector<Variant::Type> &p_args) {
- if (p_args.size() == 0)
+ if (p_args.size() == 0) {
ADD_SIGNAL(MethodInfo(p_name));
- else if (p_args.size() == 1)
+ } else if (p_args.size() == 1) {
ADD_SIGNAL(MethodInfo(p_name, PropertyInfo(p_args[0], "arg1")));
- else if (p_args.size() == 2)
+ } else if (p_args.size() == 2) {
ADD_SIGNAL(MethodInfo(p_name, PropertyInfo(p_args[0], "arg1"), PropertyInfo(p_args[1], "arg2")));
- else if (p_args.size() == 3)
+ } else if (p_args.size() == 3) {
ADD_SIGNAL(MethodInfo(p_name, PropertyInfo(p_args[0], "arg1"), PropertyInfo(p_args[1], "arg2"), PropertyInfo(p_args[2], "arg3")));
- else if (p_args.size() == 4)
+ } else if (p_args.size() == 4) {
ADD_SIGNAL(MethodInfo(p_name, PropertyInfo(p_args[0], "arg1"), PropertyInfo(p_args[1], "arg2"), PropertyInfo(p_args[2], "arg3"), PropertyInfo(p_args[3], "arg4")));
- else if (p_args.size() == 5)
+ } else if (p_args.size() == 5) {
ADD_SIGNAL(MethodInfo(p_name, PropertyInfo(p_args[0], "arg1"), PropertyInfo(p_args[1], "arg2"), PropertyInfo(p_args[2], "arg3"), PropertyInfo(p_args[3], "arg4"), PropertyInfo(p_args[4], "arg5")));
+ }
}
#endif
diff --git a/platform/android/audio_driver_opensl.cpp b/platform/android/audio_driver_opensl.cpp
index cd478bb90f..8495d2cc18 100644
--- a/platform/android/audio_driver_opensl.cpp
+++ b/platform/android/audio_driver_opensl.cpp
@@ -56,8 +56,9 @@ void AudioDriverOpenSL::_buffer_callback(
}
}
- if (mix)
+ if (mix) {
mutex.unlock();
+ }
const int32_t *src_buff = mixdown_buffer;
@@ -312,13 +313,15 @@ AudioDriver::SpeakerMode AudioDriverOpenSL::get_speaker_mode() const {
}
void AudioDriverOpenSL::lock() {
- if (active)
+ if (active) {
mutex.lock();
+ }
}
void AudioDriverOpenSL::unlock() {
- if (active)
+ if (active) {
mutex.unlock();
+ }
}
void AudioDriverOpenSL::finish() {
diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp
index 5461a3aefa..7fb4f54fca 100644
--- a/platform/android/dir_access_jandroid.cpp
+++ b/platform/android/dir_access_jandroid.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "dir_access_jandroid.h"
+
#include "core/string/print_string.h"
#include "file_access_android.h"
#include "string_android.h"
@@ -51,8 +52,9 @@ Error DirAccessJAndroid::list_dir_begin() {
jstring js = env->NewStringUTF(current_dir.utf8().get_data());
int res = env->CallIntMethod(io, _dir_open, js);
- if (res <= 0)
+ if (res <= 0) {
return ERR_CANT_OPEN;
+ }
id = res;
@@ -64,8 +66,9 @@ String DirAccessJAndroid::get_next() {
JNIEnv *env = get_jni_env();
jstring str = (jstring)env->CallObjectMethod(io, _dir_next, id);
- if (!str)
+ if (!str) {
return "";
+ }
String ret = jstring_to_string((jstring)str, env);
env->DeleteLocalRef((jobject)str);
@@ -83,8 +86,9 @@ bool DirAccessJAndroid::current_is_hidden() const {
}
void DirAccessJAndroid::list_dir_end() {
- if (id == 0)
+ if (id == 0) {
return;
+ }
JNIEnv *env = get_jni_env();
env->CallVoidMethod(io, _dir_close, id);
@@ -102,22 +106,25 @@ String DirAccessJAndroid::get_drive(int p_drive) {
Error DirAccessJAndroid::change_dir(String p_dir) {
JNIEnv *env = get_jni_env();
- if (p_dir.is_empty() || p_dir == "." || (p_dir == ".." && current_dir.is_empty()))
+ if (p_dir.is_empty() || p_dir == "." || (p_dir == ".." && current_dir.is_empty())) {
return OK;
+ }
String new_dir;
- if (p_dir != "res://" && p_dir.length() > 1 && p_dir.ends_with("/"))
+ if (p_dir != "res://" && p_dir.length() > 1 && p_dir.ends_with("/")) {
p_dir = p_dir.substr(0, p_dir.length() - 1);
+ }
- if (p_dir.begins_with("/"))
+ if (p_dir.begins_with("/")) {
new_dir = p_dir.substr(1, p_dir.length());
- else if (p_dir.begins_with("res://"))
+ } else if (p_dir.begins_with("res://")) {
new_dir = p_dir.substr(6, p_dir.length());
- else if (current_dir.is_empty())
+ } else if (current_dir.is_empty()) {
new_dir = p_dir;
- else
+ } else {
new_dir = current_dir.plus_file(p_dir);
+ }
//test if newdir exists
new_dir = new_dir.simplify_path();
@@ -125,8 +132,9 @@ Error DirAccessJAndroid::change_dir(String p_dir) {
jstring js = env->NewStringUTF(new_dir.utf8().get_data());
int res = env->CallIntMethod(io, _dir_open, js);
env->DeleteLocalRef(js);
- if (res <= 0)
+ if (res <= 0) {
return ERR_INVALID_PARAMETER;
+ }
env->CallVoidMethod(io, _dir_close, res);
@@ -141,10 +149,11 @@ String DirAccessJAndroid::get_current_dir(bool p_include_drive) {
bool DirAccessJAndroid::file_exists(String p_file) {
String sd;
- if (current_dir.is_empty())
+ if (current_dir.is_empty()) {
sd = p_file;
- else
+ } else {
sd = current_dir.plus_file(p_file);
+ }
FileAccessAndroid *f = memnew(FileAccessAndroid);
bool exists = f->file_exists(sd);
@@ -158,27 +167,30 @@ bool DirAccessJAndroid::dir_exists(String p_dir) {
String sd;
- if (current_dir.is_empty())
+ if (current_dir.is_empty()) {
sd = p_dir;
- else {
- if (p_dir.is_relative_path())
+ } else {
+ if (p_dir.is_relative_path()) {
sd = current_dir.plus_file(p_dir);
- else
+ } else {
sd = fix_path(p_dir);
+ }
}
String path = sd.simplify_path();
- if (path.begins_with("/"))
+ if (path.begins_with("/")) {
path = path.substr(1, path.length());
- else if (path.begins_with("res://"))
+ } else if (path.begins_with("res://")) {
path = path.substr(6, path.length());
+ }
jstring js = env->NewStringUTF(path.utf8().get_data());
int res = env->CallIntMethod(io, _dir_open, js);
env->DeleteLocalRef(js);
- if (res <= 0)
+ if (res <= 0) {
return false;
+ }
env->CallVoidMethod(io, _dir_close, res);
diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp
index 26bdcb9520..c84a919b6b 100644
--- a/platform/android/file_access_android.cpp
+++ b/platform/android/file_access_android.cpp
@@ -29,30 +29,28 @@
/*************************************************************************/
#include "file_access_android.h"
+
#include "core/string/print_string.h"
AAssetManager *FileAccessAndroid::asset_manager = nullptr;
-/*void FileAccessAndroid::make_default() {
- create_func=create_android;
-}*/
-
FileAccess *FileAccessAndroid::create_android() {
return memnew(FileAccessAndroid);
}
Error FileAccessAndroid::_open(const String &p_path, int p_mode_flags) {
String path = fix_path(p_path).simplify_path();
- if (path.begins_with("/"))
+ if (path.begins_with("/")) {
path = path.substr(1, path.length());
- else if (path.begins_with("res://"))
+ } else if (path.begins_with("res://")) {
path = path.substr(6, path.length());
+ }
ERR_FAIL_COND_V(p_mode_flags & FileAccess::WRITE, ERR_UNAVAILABLE); //can't write on android..
a = AAssetManager_open(asset_manager, path.utf8().get_data(), AASSET_MODE_STREAMING);
- if (!a)
+ if (!a) {
return ERR_CANT_OPEN;
- //ERR_FAIL_COND_V(!a,ERR_FILE_NOT_FOUND);
+ }
len = AAsset_getLength(a);
pos = 0;
eof = false;
@@ -61,8 +59,9 @@ Error FileAccessAndroid::_open(const String &p_path, int p_mode_flags) {
}
void FileAccessAndroid::close() {
- if (!a)
+ if (!a) {
return;
+ }
AAsset_close(a);
a = nullptr;
}
@@ -146,15 +145,17 @@ void FileAccessAndroid::store_8(uint8_t p_dest) {
bool FileAccessAndroid::file_exists(const String &p_path) {
String path = fix_path(p_path).simplify_path();
- if (path.begins_with("/"))
+ if (path.begins_with("/")) {
path = path.substr(1, path.length());
- else if (path.begins_with("res://"))
+ } else if (path.begins_with("res://")) {
path = path.substr(6, path.length());
+ }
AAsset *at = AAssetManager_open(asset_manager, path.utf8().get_data(), AASSET_MODE_STREAMING);
- if (!at)
+ if (!at) {
return false;
+ }
AAsset_close(at);
return true;
diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
index 8fc16ab7ba..4525c5c212 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
@@ -147,8 +147,9 @@ public class GLUtils {
Log.i(TAG, String.format(" %s: %d\n", name, value[0]));
} else {
// Log.w(TAG, String.format(" %s: failed\n", name));
- while (egl.eglGetError() != EGL10.EGL_SUCCESS)
- ;
+ while (egl.eglGetError() != EGL10.EGL_SUCCESS) {
+ // Continue.
+ }
}
}
}
diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp
index f823e2c27f..7c788b4dc4 100644
--- a/platform/android/java_class_wrapper.cpp
+++ b/platform/android/java_class_wrapper.cpp
@@ -29,13 +29,15 @@
/*************************************************************************/
#include "api/java_class_wrapper.h"
+
#include "string_android.h"
#include "thread_jandroid.h"
bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error, Variant &ret) {
Map<StringName, List<MethodInfo>>::Element *M = methods.find(p_method);
- if (!M)
+ if (!M) {
return false;
+ }
JNIEnv *env = get_jni_env();
ERR_FAIL_COND_V(env == nullptr, false);
@@ -68,8 +70,9 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
//bug?
} break;
case ARG_TYPE_BOOLEAN: {
- if (p_args[i]->get_type() != Variant::BOOL)
+ if (p_args[i]->get_type() != Variant::BOOL) {
arg_expected = Variant::BOOL;
+ }
} break;
case ARG_NUMBER_CLASS_BIT | ARG_TYPE_BYTE:
case ARG_NUMBER_CLASS_BIT | ARG_TYPE_CHAR:
@@ -81,27 +84,27 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
case ARG_TYPE_SHORT:
case ARG_TYPE_INT:
case ARG_TYPE_LONG: {
- if (!p_args[i]->is_num())
+ if (!p_args[i]->is_num()) {
arg_expected = Variant::INT;
-
+ }
} break;
case ARG_NUMBER_CLASS_BIT | ARG_TYPE_FLOAT:
case ARG_NUMBER_CLASS_BIT | ARG_TYPE_DOUBLE:
case ARG_TYPE_FLOAT:
case ARG_TYPE_DOUBLE: {
- if (!p_args[i]->is_num())
+ if (!p_args[i]->is_num()) {
arg_expected = Variant::FLOAT;
-
+ }
} break;
case ARG_TYPE_STRING: {
- if (p_args[i]->get_type() != Variant::STRING)
+ if (p_args[i]->get_type() != Variant::STRING) {
arg_expected = Variant::STRING;
-
+ }
} break;
case ARG_TYPE_CLASS: {
- if (p_args[i]->get_type() != Variant::OBJECT)
+ if (p_args[i]->get_type() != Variant::OBJECT) {
arg_expected = Variant::OBJECT;
- else {
+ } else {
Ref<RefCounted> ref = *p_args[i];
if (!ref.is_null()) {
if (Object::cast_to<JavaObject>(ref.ptr())) {
@@ -118,12 +121,11 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
}
}
}
-
} break;
default: {
- if (p_args[i]->get_type() != Variant::ARRAY)
+ if (p_args[i]->get_type() != Variant::ARRAY) {
arg_expected = Variant::ARRAY;
-
+ }
} break;
}
@@ -135,15 +137,17 @@ bool JavaClass::_call_method(JavaObject *p_instance, const StringName &p_method,
break;
}
}
- if (!valid)
+ if (!valid) {
continue;
+ }
method = &E;
break;
}
- if (!method)
+ if (!method) {
return true; //no version convinces
+ }
r_error.error = Callable::CallError::CALL_OK;
@@ -780,9 +784,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
bool val = env->CallBooleanMethod(o, JavaClassWrapper::singleton->Boolean_booleanValue);
ret.push_back(val);
}
@@ -801,9 +805,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
int val = env->CallByteMethod(o, JavaClassWrapper::singleton->Byte_byteValue);
ret.push_back(val);
}
@@ -821,9 +825,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
int val = env->CallCharMethod(o, JavaClassWrapper::singleton->Character_characterValue);
ret.push_back(val);
}
@@ -841,9 +845,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
int val = env->CallShortMethod(o, JavaClassWrapper::singleton->Short_shortValue);
ret.push_back(val);
}
@@ -861,9 +865,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
int val = env->CallIntMethod(o, JavaClassWrapper::singleton->Integer_integerValue);
ret.push_back(val);
}
@@ -881,9 +885,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
int64_t val = env->CallLongMethod(o, JavaClassWrapper::singleton->Long_longValue);
ret.push_back(val);
}
@@ -901,9 +905,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
float val = env->CallFloatMethod(o, JavaClassWrapper::singleton->Float_floatValue);
ret.push_back(val);
}
@@ -921,9 +925,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
double val = env->CallDoubleMethod(o, JavaClassWrapper::singleton->Double_doubleValue);
ret.push_back(val);
}
@@ -942,9 +946,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
for (int i = 0; i < count; i++) {
jobject o = env->GetObjectArrayElement(arr, i);
- if (!o)
+ if (!o) {
ret.push_back(Variant());
- else {
+ } else {
String val = jstring_to_string((jstring)o, env);
ret.push_back(val);
}
@@ -962,8 +966,9 @@ bool JavaClass::_convert_object_to_variant(JNIEnv *env, jobject obj, Variant &va
}
Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
- if (class_cache.has(p_class))
+ if (class_cache.has(p_class)) {
return class_cache[p_class];
+ }
JNIEnv *env = get_jni_env();
ERR_FAIL_COND_V(env == nullptr, Ref<JavaClass>());
@@ -971,10 +976,6 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
jclass bclass = env->FindClass(p_class.utf8().get_data());
ERR_FAIL_COND_V(!bclass, Ref<JavaClass>());
- //jmethodID getDeclaredMethods = env->GetMethodID(bclass,"getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
-
- //ERR_FAIL_COND_V(!getDeclaredMethods,Ref<JavaClass>());
-
jobjectArray methods = (jobjectArray)env->CallObjectMethod(bclass, getDeclaredMethods);
ERR_FAIL_COND_V(!methods, Ref<JavaClass>());
@@ -1057,8 +1058,9 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
float new_likeliness = 0;
float existing_likeliness = 0;
- if (E->get().param_types.size() != mi.param_types.size())
+ if (E->get().param_types.size() != mi.param_types.size()) {
continue;
+ }
bool valid = true;
for (int j = 0; j < E->get().param_types.size(); j++) {
Variant::Type _new;
@@ -1075,8 +1077,9 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
existing_likeliness = existing_l;
}
- if (!valid)
+ if (!valid) {
continue;
+ }
if (new_likeliness > existing_likeliness) {
java_class->methods[str_method].erase(E);
@@ -1087,10 +1090,11 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
}
if (!discard) {
- if (mi._static)
+ if (mi._static) {
mi.method = env->GetStaticMethodID(bclass, str_method.utf8().get_data(), signature.utf8().get_data());
- else
+ } else {
mi.method = env->GetMethodID(bclass, str_method.utf8().get_data(), signature.utf8().get_data());
+ }
ERR_CONTINUE(!mi.method);
@@ -1100,7 +1104,7 @@ Ref<JavaClass> JavaClassWrapper::wrap(const String &p_class) {
env->DeleteLocalRef(obj);
env->DeleteLocalRef(param_types);
env->DeleteLocalRef(return_type);
- };
+ }
env->DeleteLocalRef(methods);
diff --git a/platform/android/java_godot_io_wrapper.cpp b/platform/android/java_godot_io_wrapper.cpp
index ff0bcf0716..d6e3ad90b1 100644
--- a/platform/android/java_godot_io_wrapper.cpp
+++ b/platform/android/java_godot_io_wrapper.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "java_godot_io_wrapper.h"
+
#include "core/error/error_list.h"
// JNIEnv is only valid within the thread it belongs to, in a multi threading environment
diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp
index e7ab0ef7ed..dd4fa9de7b 100644
--- a/platform/android/java_godot_lib_jni.cpp
+++ b/platform/android/java_godot_lib_jni.cpp
@@ -200,8 +200,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *en
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jclass clazz) {
- if (step.get() == 0)
+ if (step.get() == 0) {
return;
+ }
if (DisplayServerAndroid *dsa = Object::cast_to<DisplayServerAndroid>(DisplayServer::get_singleton())) {
dsa->send_window_event(DisplayServer::WINDOW_EVENT_GO_BACK_REQUEST);
@@ -209,8 +210,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jcl
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jclass clazz) {
- if (step.get() == -1)
+ if (step.get() == -1) {
return;
+ }
if (step.get() == 0) {
// Since Godot is initialized on the UI thread, main_thread_id was set to that thread's id,
@@ -243,8 +245,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jcl
}
void touch_preprocessing(JNIEnv *env, jclass clazz, jint input_device, jint ev, jint pointer, jint pointer_count, jfloatArray positions, jint buttons_mask, jfloat vertical_factor, jfloat horizontal_factor) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
Vector<AndroidInputHandler::TouchPos> points;
for (int i = 0; i < pointer_count; i++) {
@@ -279,32 +282,36 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch__IIII_3FIFF(JNI
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jclass clazz, jint p_type, jfloat p_x, jfloat p_y) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
input_handler->process_hover(p_type, Point2(p_x, p_y));
}
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_doubleTap(JNIEnv *env, jclass clazz, jint p_button_mask, jint p_x, jint p_y) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
input_handler->process_double_tap(p_button_mask, Point2(p_x, p_y));
}
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_scroll(JNIEnv *env, jclass clazz, jint p_x, jint p_y) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
input_handler->process_scroll(Point2(p_x, p_y));
}
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jclass clazz, jint p_device, jint p_button, jboolean p_pressed) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
AndroidInputHandler::JoypadEvent jevent;
jevent.device = p_device;
@@ -369,8 +376,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyconnectionchanged(
// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jclass clazz, jint p_keycode, jint p_scancode, jint p_unicode_char, jboolean p_pressed) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
input_handler->process_key_event(p_keycode, p_scancode, p_unicode_char, p_pressed);
}
@@ -392,15 +400,17 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv *env
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, jclass clazz) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
os_android->main_loop_focusin();
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, jclass clazz) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
os_android->main_loop_focusout();
}
@@ -426,13 +436,14 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *en
for (int i = 0; i < count; i++) {
jobject obj = env->GetObjectArrayElement(params, i);
Variant v;
- if (obj)
+ if (obj) {
v = _jobject_to_variant(env, obj);
+ }
memnew_placement(&vlist[i], Variant);
vlist[i] = v;
vptr[i] = &vlist[i];
env->DeleteLocalRef(obj);
- };
+ }
Callable::CallError err;
obj->call(str_method, (const Variant **)vptr, count, err);
@@ -455,10 +466,11 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *
for (int i = 0; i < MIN(count, VARIANT_ARG_MAX); i++) {
jobject obj = env->GetObjectArrayElement(params, i);
- if (obj)
+ if (obj) {
args[i] = _jobject_to_variant(env, obj);
+ }
env->DeleteLocalRef(obj);
- };
+ }
static_assert(VARIANT_ARG_MAX == 8, "This code needs to be updated if VARIANT_ARG_MAX != 8");
obj->call_deferred(str_method, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
@@ -478,8 +490,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_requestPermissionResu
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNIEnv *env, jclass clazz) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
if (os_android->get_main_loop()) {
os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_RESUMED);
@@ -487,8 +500,9 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNI
}
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIEnv *env, jclass clazz) {
- if (step.get() <= 0)
+ if (step.get() <= 0) {
return;
+ }
if (os_android->get_main_loop()) {
os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_PAUSED);
diff --git a/platform/android/java_godot_wrapper.cpp b/platform/android/java_godot_wrapper.cpp
index 5beec6b611..754267c834 100644
--- a/platform/android/java_godot_wrapper.cpp
+++ b/platform/android/java_godot_wrapper.cpp
@@ -92,8 +92,9 @@ jobject GodotJavaWrapper::get_activity() {
jobject GodotJavaWrapper::get_member_object(const char *p_name, const char *p_class, JNIEnv *p_env) {
if (godot_class) {
- if (p_env == nullptr)
+ if (p_env == nullptr) {
p_env = get_jni_env();
+ }
ERR_FAIL_COND_V(p_env == nullptr, nullptr);
@@ -129,8 +130,9 @@ GodotJavaViewWrapper *GodotJavaWrapper::get_godot_view() {
void GodotJavaWrapper::on_video_init(JNIEnv *p_env) {
if (_on_video_init) {
- if (p_env == nullptr)
+ if (p_env == nullptr) {
p_env = get_jni_env();
+ }
ERR_FAIL_COND(p_env == nullptr);
p_env->CallVoidMethod(godot_instance, _on_video_init);
@@ -158,8 +160,9 @@ void GodotJavaWrapper::on_godot_main_loop_started(JNIEnv *p_env) {
void GodotJavaWrapper::restart(JNIEnv *p_env) {
if (_restart) {
- if (p_env == nullptr)
+ if (p_env == nullptr) {
p_env = get_jni_env();
+ }
ERR_FAIL_COND(p_env == nullptr);
p_env->CallVoidMethod(godot_instance, _restart);
@@ -168,8 +171,9 @@ void GodotJavaWrapper::restart(JNIEnv *p_env) {
void GodotJavaWrapper::force_quit(JNIEnv *p_env) {
if (_finish) {
- if (p_env == nullptr)
+ if (p_env == nullptr) {
p_env = get_jni_env();
+ }
ERR_FAIL_COND(p_env == nullptr);
p_env->CallVoidMethod(godot_instance, _finish);
diff --git a/platform/android/jni_utils.cpp b/platform/android/jni_utils.cpp
index 7e81565d9d..e2573d10f8 100644
--- a/platform/android/jni_utils.cpp
+++ b/platform/android/jni_utils.cpp
@@ -46,7 +46,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
env->DeleteLocalRef(bclass);
} else {
v.val.z = *p_arg;
- };
+ }
} break;
case Variant::INT: {
if (force_jobject) {
@@ -61,7 +61,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
} else {
v.val.i = *p_arg;
- };
+ }
} break;
case Variant::FLOAT: {
if (force_jobject) {
@@ -76,7 +76,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
} else {
v.val.f = *p_arg;
- };
+ }
} break;
case Variant::STRING: {
String s = *p_arg;
@@ -111,7 +111,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
jstring str = env->NewStringUTF(String(keys[j]).utf8().get_data());
env->SetObjectArrayElement(jkeys, j, str);
env->DeleteLocalRef(str);
- };
+ }
jmethodID set_keys = env->GetMethodID(dclass, "set_keys", "([Ljava/lang/String;)V");
jvalue val;
@@ -128,7 +128,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant *p_a
if (v.obj) {
env->DeleteLocalRef(v.obj);
}
- };
+ }
jmethodID set_values = env->GetMethodID(dclass, "set_values", "([Ljava/lang/Object;)V");
val.l = jvalues;
@@ -205,7 +205,7 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
if (name == "java.lang.String") {
return jstring_to_string((jstring)obj, env);
- };
+ }
if (name == "[Ljava.lang.String;") {
jobjectArray arr = (jobjectArray)obj;
@@ -219,20 +219,20 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
}
return sarr;
- };
+ }
if (name == "java.lang.Boolean") {
jmethodID boolValue = env->GetMethodID(c, "booleanValue", "()Z");
bool ret = env->CallBooleanMethod(obj, boolValue);
return ret;
- };
+ }
if (name == "java.lang.Integer" || name == "java.lang.Long") {
jclass nclass = env->FindClass("java/lang/Number");
jmethodID longValue = env->GetMethodID(nclass, "longValue", "()J");
jlong ret = env->CallLongMethod(obj, longValue);
return ret;
- };
+ }
if (name == "[I") {
jintArray arr = (jintArray)obj;
@@ -243,7 +243,7 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
int *w = sarr.ptrw();
env->GetIntArrayRegion(arr, 0, fCount, w);
return sarr;
- };
+ }
if (name == "[B") {
jbyteArray arr = (jbyteArray)obj;
@@ -254,14 +254,14 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
uint8_t *w = sarr.ptrw();
env->GetByteArrayRegion(arr, 0, fCount, reinterpret_cast<signed char *>(w));
return sarr;
- };
+ }
if (name == "java.lang.Float" || name == "java.lang.Double") {
jclass nclass = env->FindClass("java/lang/Number");
jmethodID doubleValue = env->GetMethodID(nclass, "doubleValue", "()D");
double ret = env->CallDoubleMethod(obj, doubleValue);
return ret;
- };
+ }
if (name == "[D") {
jdoubleArray arr = (jdoubleArray)obj;
@@ -275,9 +275,9 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
double n;
env->GetDoubleArrayRegion(arr, i, 1, &n);
w[i] = n;
- };
+ }
return sarr;
- };
+ }
if (name == "[F") {
jfloatArray arr = (jfloatArray)obj;
@@ -291,9 +291,9 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
float n;
env->GetFloatArrayRegion(arr, i, 1, &n);
w[i] = n;
- };
+ }
return sarr;
- };
+ }
if (name == "[Ljava.lang.Object;") {
jobjectArray arr = (jobjectArray)obj;
@@ -308,7 +308,7 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
}
return varr;
- };
+ }
if (name == "java.util.HashMap" || name == "org.godotengine.godot.Dictionary") {
Dictionary ret;
@@ -327,10 +327,10 @@ Variant _jobject_to_variant(JNIEnv *env, jobject obj) {
for (int i = 0; i < keys.size(); i++) {
ret[keys[i]] = vals[i];
- };
+ }
return ret;
- };
+ }
env->DeleteLocalRef(c);
@@ -359,8 +359,9 @@ Variant::Type get_jni_type(const String &p_type) {
int idx = 0;
while (_type_to_vtype[idx].name) {
- if (p_type == _type_to_vtype[idx].name)
+ if (p_type == _type_to_vtype[idx].name) {
return _type_to_vtype[idx].type;
+ }
idx++;
}
@@ -390,8 +391,9 @@ const char *get_jni_sig(const String &p_type) {
int idx = 0;
while (_type_to_vtype[idx].name) {
- if (p_type == _type_to_vtype[idx].name)
+ if (p_type == _type_to_vtype[idx].name) {
return _type_to_vtype[idx].sig;
+ }
idx++;
}
diff --git a/platform/android/net_socket_android.cpp b/platform/android/net_socket_android.cpp
index 620df539e4..a65e7c6724 100644
--- a/platform/android/net_socket_android.cpp
+++ b/platform/android/net_socket_android.cpp
@@ -77,18 +77,21 @@ NetSocketAndroid::~NetSocketAndroid() {
void NetSocketAndroid::close() {
NetSocketPosix::close();
- if (wants_broadcast)
+ if (wants_broadcast) {
multicast_lock_release();
- if (multicast_groups)
+ }
+ if (multicast_groups) {
multicast_lock_release();
+ }
wants_broadcast = false;
multicast_groups = 0;
}
Error NetSocketAndroid::set_broadcasting_enabled(bool p_enabled) {
Error err = NetSocketPosix::set_broadcasting_enabled(p_enabled);
- if (err != OK)
+ if (err != OK) {
return err;
+ }
if (p_enabled != wants_broadcast) {
if (p_enabled) {
@@ -105,11 +108,13 @@ Error NetSocketAndroid::set_broadcasting_enabled(bool p_enabled) {
Error NetSocketAndroid::join_multicast_group(const IPAddress &p_multi_address, String p_if_name) {
Error err = NetSocketPosix::join_multicast_group(p_multi_address, p_if_name);
- if (err != OK)
+ if (err != OK) {
return err;
+ }
- if (!multicast_groups)
+ if (!multicast_groups) {
multicast_lock_acquire();
+ }
multicast_groups++;
return OK;
@@ -117,14 +122,16 @@ Error NetSocketAndroid::join_multicast_group(const IPAddress &p_multi_address, S
Error NetSocketAndroid::leave_multicast_group(const IPAddress &p_multi_address, String p_if_name) {
Error err = NetSocketPosix::leave_multicast_group(p_multi_address, p_if_name);
- if (err != OK)
+ if (err != OK) {
return err;
+ }
ERR_FAIL_COND_V(multicast_groups == 0, ERR_BUG);
multicast_groups--;
- if (!multicast_groups)
+ if (!multicast_groups) {
multicast_lock_release();
+ }
return OK;
}
diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp
index d1672d6ea3..b17b0f3139 100644
--- a/platform/android/os_android.cpp
+++ b/platform/android/os_android.cpp
@@ -81,17 +81,18 @@ void OS_Android::alert(const String &p_alert, const String &p_title) {
void OS_Android::initialize_core() {
OS_Unix::initialize_core();
- if (use_apk_expansion)
+ if (use_apk_expansion) {
FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_RESOURCES);
- else {
+ } else {
FileAccess::make_default<FileAccessAndroid>(FileAccess::ACCESS_RESOURCES);
}
FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_USERDATA);
FileAccess::make_default<FileAccessUnix>(FileAccess::ACCESS_FILESYSTEM);
- if (use_apk_expansion)
+ if (use_apk_expansion) {
DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_RESOURCES);
- else
+ } else {
DirAccess::make_default<DirAccessJAndroid>(DirAccess::ACCESS_RESOURCES);
+ }
DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_USERDATA);
DirAccess::make_default<DirAccessUnix>(DirAccess::ACCESS_FILESYSTEM);
@@ -162,20 +163,23 @@ MainLoop *OS_Android::get_main_loop() const {
}
void OS_Android::main_loop_begin() {
- if (main_loop)
+ if (main_loop) {
main_loop->initialize();
+ }
}
bool OS_Android::main_loop_iterate() {
- if (!main_loop)
+ if (!main_loop) {
return false;
+ }
DisplayServerAndroid::get_singleton()->process_events();
return Main::iteration();
}
void OS_Android::main_loop_end() {
- if (main_loop)
+ if (main_loop) {
main_loop->finalize();
+ }
}
void OS_Android::main_loop_focusout() {
@@ -207,8 +211,9 @@ String OS_Android::get_locale() const {
String OS_Android::get_model_name() const {
String model = godot_io_java->get_model();
- if (!model.is_empty())
+ if (!model.is_empty()) {
return model;
+ }
return OS_Unix::get_model_name();
}
@@ -218,8 +223,9 @@ String OS_Android::get_data_path() const {
}
String OS_Android::get_user_data_dir() const {
- if (!data_dir_cache.is_empty())
+ if (!data_dir_cache.is_empty()) {
return data_dir_cache;
+ }
String data_dir = godot_io_java->get_user_data_dir();
if (!data_dir.is_empty()) {
@@ -230,8 +236,9 @@ String OS_Android::get_user_data_dir() const {
}
String OS_Android::get_cache_path() const {
- if (!cache_dir_cache.is_empty())
+ if (!cache_dir_cache.is_empty()) {
return cache_dir_cache;
+ }
String cache_dir = godot_io_java->get_cache_dir();
if (!cache_dir.is_empty()) {
@@ -243,8 +250,9 @@ String OS_Android::get_cache_path() const {
String OS_Android::get_unique_id() const {
String unique_id = godot_io_java->get_unique_id();
- if (!unique_id.is_empty())
+ if (!unique_id.is_empty()) {
return unique_id;
+ }
return OS::get_unique_id();
}
diff --git a/platform/iphone/app_delegate.mm b/platform/iphone/app_delegate.mm
index 5130a26f15..c5c9b5a5f9 100644
--- a/platform/iphone/app_delegate.mm
+++ b/platform/iphone/app_delegate.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "app_delegate.h"
+
#include "core/config/project_settings.h"
#include "drivers/coreaudio/audio_driver_coreaudio.h"
#import "godot_view.h"
@@ -76,7 +77,7 @@ static ViewController *mainViewController = nil;
// bail, things did not go very well for us, should probably output a message on screen with our error code...
exit(0);
return NO;
- };
+ }
ViewController *viewController = [[ViewController alloc] init];
viewController.godotView.useCADisplayLink = bool(GLOBAL_DEF("display.iOS/use_cadisplaylink", true)) ? YES : NO;
@@ -99,7 +100,7 @@ static ViewController *mainViewController = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
return YES;
-};
+}
- (void)onAudioInterruption:(NSNotification *)notification {
if ([notification.name isEqualToString:AVAudioSessionInterruptionNotification]) {
@@ -111,17 +112,17 @@ static ViewController *mainViewController = nil;
OSIPhone::get_singleton()->on_focus_in();
}
}
-};
+}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_MEMORY_WARNING);
}
-};
+}
- (void)applicationWillTerminate:(UIApplication *)application {
iphone_finish();
-};
+}
// When application goes to background (e.g. user switches to another app or presses Home),
// then applicationWillResignActive -> applicationDidEnterBackground are called.
diff --git a/platform/iphone/display_layer.mm b/platform/iphone/display_layer.mm
index 7448dfed4a..92e81448ac 100644
--- a/platform/iphone/display_layer.mm
+++ b/platform/iphone/display_layer.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "display_layer.h"
+
#include "core/config/project_settings.h"
#include "core/os/keyboard.h"
#include "display_server_iphone.h"
@@ -153,17 +154,6 @@
return NO;
}
- // if (OS::get_singleton()) {
- // OS::VideoMode vm;
- // vm.fullscreen = true;
- // vm.width = backingWidth;
- // vm.height = backingHeight;
- // vm.resizable = false;
- // OS::get_singleton()->set_video_mode(vm);
- // OSIPhone::get_singleton()->set_base_framebuffer(viewFramebuffer);
- // };
- // gl_view_base_fb = viewFramebuffer;
-
return YES;
}
diff --git a/platform/iphone/display_server_iphone.mm b/platform/iphone/display_server_iphone.mm
index 9491c9cf90..a0f8daf5a0 100644
--- a/platform/iphone/display_server_iphone.mm
+++ b/platform/iphone/display_server_iphone.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "display_server_iphone.h"
+
#import "app_delegate.h"
#include "core/config/project_settings.h"
#include "core/io/file_access_pack.h"
@@ -231,7 +232,7 @@ void DisplayServerIPhone::touch_press(int p_idx, int p_x, int p_y, bool p_presse
ev->set_position(Vector2(p_x, p_y));
perform_event(ev);
}
-};
+}
void DisplayServerIPhone::touch_drag(int p_idx, int p_prev_x, int p_prev_y, int p_x, int p_y) {
if (!GLOBAL_DEF("debug/disable_touch", false)) {
@@ -241,16 +242,16 @@ void DisplayServerIPhone::touch_drag(int p_idx, int p_prev_x, int p_prev_y, int
ev->set_position(Vector2(p_x, p_y));
ev->set_relative(Vector2(p_x - p_prev_x, p_y - p_prev_y));
perform_event(ev);
- };
-};
+ }
+}
void DisplayServerIPhone::perform_event(const Ref<InputEvent> &p_event) {
Input::get_singleton()->parse_input_event(p_event);
-};
+}
void DisplayServerIPhone::touches_cancelled(int p_idx) {
touch_press(p_idx, -1, -1, false, false);
-};
+}
// MARK: Keyboard
@@ -263,13 +264,13 @@ void DisplayServerIPhone::key(Key p_key, bool p_pressed) {
ev->set_physical_keycode(p_key);
ev->set_unicode((char32_t)p_key);
perform_event(ev);
-};
+}
// MARK: Motion
void DisplayServerIPhone::update_gravity(float p_x, float p_y, float p_z) {
Input::get_singleton()->set_gravity(Vector3(p_x, p_y, p_z));
-};
+}
void DisplayServerIPhone::update_accelerometer(float p_x, float p_y, float p_z) {
// Found out the Z should not be negated! Pass as is!
@@ -279,15 +280,15 @@ void DisplayServerIPhone::update_accelerometer(float p_x, float p_y, float p_z)
p_z / kDisplayServerIPhoneAcceleration);
Input::get_singleton()->set_accelerometer(v_accelerometer);
-};
+}
void DisplayServerIPhone::update_magnetometer(float p_x, float p_y, float p_z) {
Input::get_singleton()->set_magnetometer(Vector3(p_x, p_y, p_z));
-};
+}
void DisplayServerIPhone::update_gyroscope(float p_x, float p_y, float p_z) {
Input::get_singleton()->set_gyroscope(Vector3(p_x, p_y, p_z));
-};
+}
// MARK: -
@@ -520,7 +521,7 @@ void DisplayServerIPhone::window_move_to_foreground(WindowID p_window) {
float DisplayServerIPhone::screen_get_max_scale() const {
return screen_get_scale(SCREEN_OF_MAIN_WINDOW);
-};
+}
void DisplayServerIPhone::screen_set_orientation(DisplayServer::ScreenOrientation p_orientation, int p_screen) {
screen_orientation = p_orientation;
diff --git a/platform/iphone/godot_iphone.mm b/platform/iphone/godot_iphone.mm
index a76276e815..49474ef554 100644
--- a/platform/iphone/godot_iphone.mm
+++ b/platform/iphone/godot_iphone.mm
@@ -53,7 +53,7 @@ int add_path(int p_argc, char **p_args) {
p_args[p_argc] = nullptr;
return p_argc;
-};
+}
int add_cmdline(int p_argc, char **p_args) {
NSArray *arr = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"godot_cmdline"];
@@ -67,12 +67,12 @@ int add_cmdline(int p_argc, char **p_args) {
continue;
}
p_args[p_argc++] = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];
- };
+ }
p_args[p_argc] = nullptr;
return p_argc;
-};
+}
int iphone_main(int argc, char **argv, String data_dir, String cache_dir) {
size_t len = strlen(argv[0]);
@@ -103,7 +103,7 @@ int iphone_main(int argc, char **argv, String data_dir, String cache_dir) {
char *fargv[64];
for (int i = 0; i < argc; i++) {
fargv[i] = argv[i];
- };
+ }
fargv[argc] = nullptr;
argc = add_path(argc, fargv);
argc = add_cmdline(argc, fargv);
@@ -119,10 +119,10 @@ int iphone_main(int argc, char **argv, String data_dir, String cache_dir) {
os->initialize_modules();
return 0;
-};
+}
void iphone_finish() {
printf("iphone_finish\n");
Main::cleanup();
delete os;
-};
+}
diff --git a/platform/iphone/godot_view.mm b/platform/iphone/godot_view.mm
index ae92f32851..e48dd2e507 100644
--- a/platform/iphone/godot_view.mm
+++ b/platform/iphone/godot_view.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "godot_view.h"
+
#include "core/os/keyboard.h"
#include "core/string/ustring.h"
#import "display_layer.h"
@@ -153,6 +154,8 @@ static const float earth_gravity = 9.80665;
[self initTouches];
+ self.multipleTouchEnabled = YES;
+
// Configure and start accelerometer
if (!self.motionManager) {
self.motionManager = [[CMMotionManager alloc] init];
@@ -226,8 +229,9 @@ static const float earth_gravity = 9.80665;
[self.displayLink setPaused:YES];
// Process all input events
- while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, TRUE) == kCFRunLoopRunHandledSource)
- ;
+ while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, TRUE) == kCFRunLoopRunHandledSource) {
+ // Continue.
+ }
// We are good to go, resume the CADisplayLink
[self.displayLink setPaused:NO];
diff --git a/platform/iphone/godot_view_gesture_recognizer.mm b/platform/iphone/godot_view_gesture_recognizer.mm
index a46c42765a..c8137f35ff 100644
--- a/platform/iphone/godot_view_gesture_recognizer.mm
+++ b/platform/iphone/godot_view_gesture_recognizer.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "godot_view_gesture_recognizer.h"
+
#import "godot_view.h"
#include "core/config/project_settings.h"
@@ -148,7 +149,7 @@ const CGFloat kGLGestureMovementDistance = 0.5;
return;
}
- [self.godotView touchesMoved:cleared withEvent:event];
+ [self.godotView godotTouchesMoved:cleared withEvent:event];
[super touchesMoved:touches withEvent:event];
}
diff --git a/platform/iphone/godot_view_renderer.mm b/platform/iphone/godot_view_renderer.mm
index e49edf5b74..32477ae41c 100644
--- a/platform/iphone/godot_view_renderer.mm
+++ b/platform/iphone/godot_view_renderer.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "godot_view_renderer.h"
+
#include "core/config/project_settings.h"
#include "core/os/keyboard.h"
#import "display_server_iphone.h"
@@ -101,7 +102,7 @@
double dval = [n doubleValue];
ProjectSettings::get_singleton()->set("Info.plist/" + ukey, dval);
- };
+ }
// do stuff
}
}
diff --git a/platform/iphone/ios.mm b/platform/iphone/ios.mm
index da21ad0ace..ad1ea70c10 100644
--- a/platform/iphone/ios.mm
+++ b/platform/iphone/ios.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "ios.h"
+
#import "app_delegate.h"
#import "view_controller.h"
#import <UIKit/UIKit.h>
@@ -36,7 +37,7 @@
void iOS::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_rate_url", "app_id"), &iOS::get_rate_url);
-};
+}
void iOS::alert(const char *p_alert, const char *p_title) {
NSString *title = [NSString stringWithUTF8String:p_title];
@@ -75,6 +76,6 @@ String iOS::get_rate_url(int p_app_id) const {
printf("returning rate url %s\n", ret.utf8().get_data());
return ret;
-};
+}
iOS::iOS() {}
diff --git a/platform/iphone/joypad_iphone.mm b/platform/iphone/joypad_iphone.mm
index f45f4da5a8..9c2feeaaca 100644
--- a/platform/iphone/joypad_iphone.mm
+++ b/platform/iphone/joypad_iphone.mm
@@ -29,6 +29,7 @@
/*************************************************************************/
#import "joypad_iphone.h"
+
#include "core/config/project_settings.h"
#include "drivers/coreaudio/audio_driver_coreaudio.h"
#include "main/main.h"
@@ -139,10 +140,10 @@ void JoypadIPhone::start_processing() {
for (NSNumber *key in keys) {
int joy_id = [key intValue];
return joy_id;
- };
+ }
return -1;
-};
+}
- (void)addiOSJoypad:(GCController *)controller {
// get a new id for our controller
@@ -156,7 +157,7 @@ void JoypadIPhone::start_processing() {
// assign our player index
if (controller.playerIndex == GCControllerPlayerIndexUnset) {
controller.playerIndex = [self getFreePlayerIndex];
- };
+ }
// tell Godot about our new controller
Input::get_singleton()->joy_connection_changed(joy_id, true, String::utf8([controller.vendorName UTF8String]));
@@ -202,8 +203,8 @@ void JoypadIPhone::start_processing() {
// and remove it from our dictionary
[self.connectedJoypads removeObjectForKey:key];
- };
-};
+ }
+}
- (GCControllerPlayerIndex)getFreePlayerIndex {
bool have_player_1 = false;
@@ -223,9 +224,9 @@ void JoypadIPhone::start_processing() {
have_player_3 = true;
} else if (controller.playerIndex == GCControllerPlayerIndex4) {
have_player_4 = true;
- };
- };
- };
+ }
+ }
+ }
if (!have_player_1) {
return GCControllerPlayerIndex1;
@@ -237,7 +238,7 @@ void JoypadIPhone::start_processing() {
return GCControllerPlayerIndex4;
} else {
return GCControllerPlayerIndexUnset;
- };
+ }
}
- (void)setControllerInputHandler:(GCController *)controller {
@@ -285,7 +286,7 @@ void JoypadIPhone::start_processing() {
gamepad.dpad.left.isPressed);
Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_RIGHT,
gamepad.dpad.right.isPressed);
- };
+ }
if (element == gamepad.leftThumbstick) {
float value = gamepad.leftThumbstick.xAxis.value;
@@ -303,7 +304,7 @@ void JoypadIPhone::start_processing() {
} else if (element == gamepad.rightTrigger) {
float value = gamepad.rightTrigger.value;
Input::get_singleton()->joy_axis(joy_id, JoyAxis::TRIGGER_RIGHT, value);
- };
+ }
};
} else if (controller.microGamepad != nil) {
// micro gamepads were added in OS 9 and feature just 2 buttons and a d-pad
@@ -329,7 +330,7 @@ void JoypadIPhone::start_processing() {
gamepad.dpad.down.isPressed);
Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_LEFT, gamepad.dpad.left.isPressed);
Input::get_singleton()->joy_button(joy_id, JoyButton::DPAD_RIGHT, gamepad.dpad.right.isPressed);
- };
+ }
};
}
@@ -338,6 +339,6 @@ void JoypadIPhone::start_processing() {
///@TODO need to add support for controllerPausedHandler which should be a
/// toggle
-};
+}
@end
diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h
index aca6f5fe2b..3281ff0cdb 100644
--- a/platform/iphone/os_iphone.h
+++ b/platform/iphone/os_iphone.h
@@ -109,6 +109,7 @@ public:
virtual String get_locale() const override;
virtual String get_unique_id() const override;
+ virtual String get_processor_name() const override;
virtual void vibrate_handheld(int p_duration_ms = 500) override;
diff --git a/platform/iphone/os_iphone.mm b/platform/iphone/os_iphone.mm
index 8350365d88..56cb49318c 100644
--- a/platform/iphone/os_iphone.mm
+++ b/platform/iphone/os_iphone.mm
@@ -31,6 +31,7 @@
#ifdef IPHONE_ENABLED
#include "os_iphone.h"
+
#import "app_delegate.h"
#include "core/config/project_settings.h"
#include "core/io/dir_access.h"
@@ -45,6 +46,7 @@
#import <AudioToolbox/AudioServices.h>
#import <UIKit/UIKit.h>
#import <dlfcn.h>
+#include <sys/sysctl.h>
#if defined(VULKAN_ENABLED)
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
@@ -168,7 +170,7 @@ void OSIPhone::delete_main_loop() {
if (main_loop) {
main_loop->finalize();
memdelete(main_loop);
- };
+ }
main_loop = nullptr;
}
@@ -197,7 +199,7 @@ void OSIPhone::finalize() {
deinitialize_modules();
// Already gets called
- // delete_main_loop();
+ //delete_main_loop();
}
// MARK: Dynamic Libraries
@@ -230,12 +232,13 @@ Error OSIPhone::get_dynamic_library_symbol_handle(void *p_library_handle, const
String OSIPhone::get_name() const {
return "iOS";
-};
+}
String OSIPhone::get_model_name() const {
String model = ios->get_model();
- if (model != "")
+ if (model != "") {
return model;
+ }
return OS_Unix::get_model_name();
}
@@ -253,7 +256,7 @@ Error OSIPhone::shell_open(String p_uri) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
return OK;
-};
+}
void OSIPhone::set_user_data_dir(String p_dir) {
DirAccess *da = DirAccess::open(p_dir);
@@ -287,6 +290,15 @@ String OSIPhone::get_unique_id() const {
return String::utf8([uuid UTF8String]);
}
+String OSIPhone::get_processor_name() const {
+ char buffer[256];
+ size_t buffer_len = 256;
+ if (sysctlbyname("machdep.cpu.brand_string", &buffer, &buffer_len, NULL, 0) == 0) {
+ return String::utf8(buffer, buffer_len);
+ }
+ ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name. Returning an empty string."));
+}
+
void OSIPhone::vibrate_handheld(int p_duration_ms) {
// iOS does not support duration for vibration
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
diff --git a/platform/iphone/view_controller.mm b/platform/iphone/view_controller.mm
index e1fc645c13..4f4ef4f046 100644
--- a/platform/iphone/view_controller.mm
+++ b/platform/iphone/view_controller.mm
@@ -203,7 +203,7 @@
case DisplayServer::SCREEN_LANDSCAPE:
return UIInterfaceOrientationMaskLandscapeLeft;
}
-};
+}
- (BOOL)prefersStatusBarHidden {
return YES;
diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp
index a0e1246c55..2caf369354 100644
--- a/platform/javascript/display_server_javascript.cpp
+++ b/platform/javascript/display_server_javascript.cpp
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "platform/javascript/display_server_javascript.h"
+#include "display_server_javascript.h"
#ifdef GLES3_ENABLED
#include "drivers/gles3/rasterizer_gles3.h"
@@ -325,12 +325,13 @@ void DisplayServerJavaScript::cursor_set_custom_image(const RES &p_cursor, Curso
image = image->duplicate();
- if (atlas_texture.is_valid())
+ if (atlas_texture.is_valid()) {
image->crop_from_point(
atlas_rect.position.x,
atlas_rect.position.y,
texture_size.width,
texture_size.height);
+ }
if (image->get_format() != Image::FORMAT_RGBA8) {
image->convert(Image::FORMAT_RGBA8);
@@ -618,8 +619,9 @@ void DisplayServerJavaScript::set_icon(const Ref<Image> &p_icon) {
ERR_FAIL_COND(icon->decompress() != OK);
}
if (icon->get_format() != Image::FORMAT_RGBA8) {
- if (icon == p_icon)
+ if (icon == p_icon) {
icon = icon->duplicate();
+ }
icon->convert(Image::FORMAT_RGBA8);
}
@@ -891,8 +893,9 @@ Size2i DisplayServerJavaScript::window_get_real_size(WindowID p_window) const {
}
void DisplayServerJavaScript::window_set_mode(WindowMode p_mode, WindowID p_window) {
- if (window_mode == p_mode)
+ if (window_mode == p_mode) {
return;
+ }
switch (p_mode) {
case WINDOW_MODE_WINDOWED: {
diff --git a/platform/javascript/javascript_main.cpp b/platform/javascript/javascript_main.cpp
index 5c00476a72..307a80feea 100644
--- a/platform/javascript/javascript_main.cpp
+++ b/platform/javascript/javascript_main.cpp
@@ -28,6 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+#include "core/config/engine.h"
#include "core/io/resource_loader.h"
#include "main/main.h"
#include "platform/javascript/display_server_javascript.h"
@@ -94,7 +95,7 @@ extern EMSCRIPTEN_KEEPALIVE int godot_js_main(int argc, char *argv[]) {
Main::start();
os->get_main_loop()->initialize();
#ifdef TOOLS_ENABLED
- if (Main::is_project_manager() && FileAccess::exists("/tmp/preload.zip")) {
+ if (Engine::get_singleton()->is_project_manager_hint() && FileAccess::exists("/tmp/preload.zip")) {
PackedStringArray ps;
ps.push_back("/tmp/preload.zip");
os->get_main_loop()->emit_signal(SNAME("files_dropped"), ps, -1);
diff --git a/platform/javascript/javascript_singleton.cpp b/platform/javascript/javascript_singleton.cpp
index 77858bff01..eb5c02822f 100644
--- a/platform/javascript/javascript_singleton.cpp
+++ b/platform/javascript/javascript_singleton.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "api/javascript_singleton.h"
+
#include "emscripten.h"
#include "os_javascript.h"
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index de5ca44f9d..da88ea18b0 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -175,7 +175,7 @@ String OS_JavaScript::get_name() const {
String OS_JavaScript::get_user_data_dir() const {
return "/userfs";
-};
+}
String OS_JavaScript::get_cache_path() const {
return "/home/web_user/.cache";
diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp
index 86c3534fc9..bf3bfe9553 100644
--- a/platform/linuxbsd/display_server_x11.cpp
+++ b/platform/linuxbsd/display_server_x11.cpp
@@ -1173,6 +1173,7 @@ void DisplayServerX11::show_window(WindowID p_id) {
_THREAD_SAFE_METHOD_
const WindowData &wd = windows[p_id];
+ popup_open(p_id);
DEBUG_LOG_X11("show_window: %lu (%u) \n", wd.x11_window, p_id);
@@ -1183,7 +1184,9 @@ void DisplayServerX11::delete_sub_window(WindowID p_id) {
_THREAD_SAFE_METHOD_
ERR_FAIL_COND(!windows.has(p_id));
- ERR_FAIL_COND_MSG(p_id == MAIN_WINDOW_ID, "Main window can't be deleted"); //ma
+ ERR_FAIL_COND_MSG(p_id == MAIN_WINDOW_ID, "Main window can't be deleted");
+
+ popup_close(p_id);
WindowData &wd = windows[p_id];
@@ -1458,8 +1461,8 @@ void DisplayServerX11::window_set_transient(WindowID p_window, WindowID p_parent
// Set focus to parent sub window to avoid losing all focus when closing a nested sub-menu.
// RevertToPointerRoot is used to make sure we don't lose all focus in case
// a subwindow and its parent are both destroyed.
- if (wd_window.menu_type && !wd_window.no_focus && wd_window.focused) {
- if (!wd_parent.no_focus) {
+ if (!wd_window.no_focus && !wd_window.is_popup && wd_window.focused) {
+ if (!wd_parent.no_focus && !wd_window.is_popup) {
XSetInputFocus(x11_display, wd_parent.x11_window, RevertToPointerRoot, CurrentTime);
}
}
@@ -2073,6 +2076,18 @@ void DisplayServerX11::window_set_flag(WindowFlags p_flag, bool p_enabled, Windo
case WINDOW_FLAG_TRANSPARENT: {
//todo reimplement
} break;
+ case WINDOW_FLAG_NO_FOCUS: {
+ wd.no_focus = p_enabled;
+ } break;
+ case WINDOW_FLAG_POPUP: {
+ XWindowAttributes xwa;
+ XSync(x11_display, False);
+ XGetWindowAttributes(x11_display, wd.x11_window, &xwa);
+
+ ERR_FAIL_COND_MSG(p_window == MAIN_WINDOW_ID, "Main window can't be popup.");
+ ERR_FAIL_COND_MSG((xwa.map_state == IsViewable) && (wd.is_popup != p_enabled), "Pupup flag can't changed while window is opened.");
+ wd.is_popup = p_enabled;
+ } break;
default: {
}
}
@@ -2114,6 +2129,12 @@ bool DisplayServerX11::window_get_flag(WindowFlags p_flag, WindowID p_window) co
case WINDOW_FLAG_TRANSPARENT: {
//todo reimplement
} break;
+ case WINDOW_FLAG_NO_FOCUS: {
+ return wd.no_focus;
+ } break;
+ case WINDOW_FLAG_POPUP: {
+ return wd.is_popup;
+ } break;
default: {
}
}
@@ -3028,23 +3049,36 @@ void DisplayServerX11::_dispatch_input_event(const Ref<InputEvent> &p_event) {
Variant ret;
Callable::CallError ce;
+ {
+ List<WindowID>::Element *E = popup_list.front();
+ if (E && Object::cast_to<InputEventKey>(*p_event)) {
+ // Redirect keyboard input to active popup.
+ if (windows.has(E->get())) {
+ Callable callable = windows[E->get()].input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
+ }
+ }
+ return;
+ }
+ }
+
Ref<InputEventFromWindow> event_from_window = p_event;
if (event_from_window.is_valid() && event_from_window->get_window_id() != INVALID_WINDOW_ID) {
- //send to a window
- ERR_FAIL_COND(!windows.has(event_from_window->get_window_id()));
- Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
- if (callable.is_null()) {
- return;
+ // Send to a single window.
+ if (windows.has(event_from_window->get_window_id())) {
+ Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
+ }
}
- callable.call((const Variant **)&evp, 1, ret, ce);
} else {
- //send to all windows
+ // Send to all windows.
for (KeyValue<WindowID, WindowData> &E : windows) {
Callable callable = E.value.input_event_callback;
- if (callable.is_null()) {
- continue;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
}
- callable.call((const Variant **)&evp, 1, ret, ce);
}
}
}
@@ -3136,6 +3170,108 @@ void DisplayServerX11::_check_pending_events(LocalVector<XEvent> &r_events) {
}
}
+DisplayServer::WindowID DisplayServerX11::window_get_active_popup() const {
+ const List<WindowID>::Element *E = popup_list.back();
+ if (E) {
+ return E->get();
+ } else {
+ return INVALID_WINDOW_ID;
+ }
+}
+
+void DisplayServerX11::window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND(!windows.has(p_window));
+ WindowData &wd = windows[p_window];
+ wd.parent_safe_rect = p_rect;
+}
+
+Rect2i DisplayServerX11::window_get_popup_safe_rect(WindowID p_window) const {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND_V(!windows.has(p_window), Rect2i());
+ const WindowData &wd = windows[p_window];
+ return wd.parent_safe_rect;
+}
+
+void DisplayServerX11::popup_open(WindowID p_window) {
+ WindowData &wd = windows[p_window];
+ if (wd.is_popup) {
+ // Close all popups, up to current popup parent, or every popup if new window is not transient.
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ if (wd.transient_parent != E->get() || wd.transient_parent == INVALID_WINDOW_ID) {
+ _send_window_event(windows[E->get()], DisplayServerX11::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ } else {
+ break;
+ }
+ }
+
+ time_since_popup = OS::get_singleton()->get_ticks_msec();
+ popup_list.push_back(p_window);
+ }
+}
+
+void DisplayServerX11::popup_close(WindowID p_window) {
+ List<WindowID>::Element *E = popup_list.find(p_window);
+ while (E) {
+ _send_window_event(windows[E->get()], DisplayServerX11::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->next();
+ popup_list.erase(E);
+ E = F;
+ }
+}
+
+void DisplayServerX11::mouse_process_popups() {
+ if (popup_list.is_empty()) {
+ return;
+ }
+
+ uint64_t delta = OS::get_singleton()->get_ticks_msec() - time_since_popup;
+ if (delta < 250) {
+ return;
+ }
+
+ int number_of_screens = XScreenCount(x11_display);
+ for (int i = 0; i < number_of_screens; i++) {
+ Window root, child;
+ int root_x, root_y, win_x, win_y;
+ unsigned int mask;
+ if (XQueryPointer(x11_display, XRootWindow(x11_display, i), &root, &child, &root_x, &root_y, &win_x, &win_y, &mask)) {
+ XWindowAttributes root_attrs;
+ XGetWindowAttributes(x11_display, root, &root_attrs);
+ Vector2i pos = Vector2i(root_attrs.x + root_x, root_attrs.y + root_y);
+ if ((pos != last_mouse_monitor_pos) || (mask != last_mouse_monitor_mask)) {
+ if (((mask & Button1Mask) || (mask & Button2Mask) || (mask & Button3Mask) || (mask & Button4Mask) || (mask & Button5Mask))) {
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ // Popup window area.
+ Rect2i win_rect = Rect2i(window_get_position(E->get()), window_get_size(E->get()));
+ // Area of the parent window, which responsible for opening sub-menu.
+ Rect2i safe_rect = window_get_popup_safe_rect(E->get());
+ if (win_rect.has_point(pos)) {
+ break;
+ } else if (safe_rect != Rect2i() && safe_rect.has_point(pos)) {
+ break;
+ } else {
+ _send_window_event(windows[E->get()], DisplayServerX11::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ }
+ }
+ }
+ }
+ last_mouse_monitor_mask = mask;
+ last_mouse_monitor_pos = pos;
+ }
+ }
+}
+
void DisplayServerX11::process_events() {
_THREAD_SAFE_METHOD_
@@ -3144,6 +3280,8 @@ void DisplayServerX11::process_events() {
++frame;
#endif
+ mouse_process_popups();
+
if (app_focused) {
//verify that one of the windows has focus, else send focus out notification
bool focus_found = false;
@@ -3374,7 +3512,7 @@ void DisplayServerX11::process_events() {
// Set focus when menu window is started.
// RevertToPointerRoot is used to make sure we don't lose all focus in case
// a subwindow and its parent are both destroyed.
- if (wd.menu_type && !wd.no_focus) {
+ if (!wd.no_focus && !wd.is_popup) {
XSetInputFocus(x11_display, wd.x11_window, RevertToPointerRoot, CurrentTime);
}
} break;
@@ -3520,7 +3658,7 @@ void DisplayServerX11::process_events() {
// Set focus when menu window is re-used.
// RevertToPointerRoot is used to make sure we don't lose all focus in case
// a subwindow and its parent are both destroyed.
- if (wd.menu_type && !wd.no_focus) {
+ if (!wd.no_focus && !wd.is_popup) {
XSetInputFocus(x11_display, wd.x11_window, RevertToPointerRoot, CurrentTime);
}
@@ -3561,7 +3699,7 @@ void DisplayServerX11::process_events() {
// Ensure window focus on click.
// RevertToPointerRoot is used to make sure we don't lose all focus in case
// a subwindow and its parent are both destroyed.
- if (!wd.no_focus) {
+ if (!wd.no_focus && !wd.is_popup) {
XSetInputFocus(x11_display, wd.x11_window, RevertToPointerRoot, CurrentTime);
}
@@ -4121,21 +4259,20 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
WindowID id = window_id_counter++;
WindowData &wd = windows[id];
- if ((id != MAIN_WINDOW_ID) && (p_flags & WINDOW_FLAG_BORDERLESS_BIT)) {
- wd.menu_type = true;
- }
-
if (p_flags & WINDOW_FLAG_NO_FOCUS_BIT) {
- wd.menu_type = true;
wd.no_focus = true;
}
+ if (p_flags & WINDOW_FLAG_POPUP_BIT) {
+ wd.is_popup = true;
+ }
+
// Setup for menu subwindows:
// - override_redirect forces the WM not to interfere with the window, to avoid delays due to
// handling decorations and placement.
// On the other hand, focus changes need to be handled manually when this is set.
// - save_under is a hint for the WM to keep the content of windows behind to avoid repaint.
- if (wd.menu_type) {
+ if (wd.is_popup || wd.no_focus) {
windowAttributes.override_redirect = True;
windowAttributes.save_under = True;
valuemask |= CWOverrideRedirect | CWSaveUnder;
@@ -4146,7 +4283,7 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
// Enable receiving notification when the window is initialized (MapNotify)
// so the focus can be set at the right time.
- if (wd.menu_type && !wd.no_focus) {
+ if (!wd.no_focus && !wd.is_popup) {
XSelectInput(x11_display, wd.x11_window, StructureNotifyMask);
}
@@ -4243,7 +4380,7 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
}
}
- if (wd.menu_type) {
+ if (wd.is_popup || wd.no_focus) {
// 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);
@@ -4794,7 +4931,7 @@ DisplayServerX11::~DisplayServerX11() {
if (img[i] != nullptr) {
XcursorImageDestroy(img[i]);
}
- };
+ }
if (xim) {
XCloseIM(xim);
diff --git a/platform/linuxbsd/display_server_x11.h b/platform/linuxbsd/display_server_x11.h
index 2d07361deb..63d32d939d 100644
--- a/platform/linuxbsd/display_server_x11.h
+++ b/platform/linuxbsd/display_server_x11.h
@@ -133,7 +133,6 @@ class DisplayServerX11 : public DisplayServer {
ObjectID instance_id;
- bool menu_type = false;
bool no_focus = false;
//better to guess on the fly, given WM can change it
@@ -145,12 +144,21 @@ class DisplayServerX11 : public DisplayServer {
Vector2i last_position_before_fs;
bool focused = true;
bool minimized = false;
+ bool is_popup = false;
+
+ Rect2i parent_safe_rect;
unsigned int focus_order = 0;
};
Map<WindowID, WindowData> windows;
+ unsigned int last_mouse_monitor_mask = 0;
+ Vector2i last_mouse_monitor_pos;
+ uint64_t time_since_popup = 0;
+
+ List<WindowID> popup_list;
+
WindowID last_focused_window = INVALID_WINDOW_ID;
WindowID window_id_counter = MAIN_WINDOW_ID;
@@ -283,6 +291,10 @@ protected:
void _window_changed(XEvent *event);
public:
+ void mouse_process_popups();
+ void popup_open(WindowID p_window);
+ void popup_close(WindowID p_window);
+
virtual bool has_feature(Feature p_feature) const override;
virtual String get_name() const override;
@@ -317,6 +329,10 @@ public:
virtual void show_window(WindowID p_id) override;
virtual void delete_sub_window(WindowID p_id) override;
+ virtual WindowID window_get_active_popup() const override;
+ virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) override;
+ virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const override;
+
virtual WindowID get_window_at_screen_position(const Point2i &p_position) const override;
virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override;
diff --git a/platform/linuxbsd/joypad_linux.cpp b/platform/linuxbsd/joypad_linux.cpp
index 8e963238e3..65d53b266f 100644
--- a/platform/linuxbsd/joypad_linux.cpp
+++ b/platform/linuxbsd/joypad_linux.cpp
@@ -238,7 +238,7 @@ void JoypadLinux::close_joypad(int p_id) {
if (p_id == -1) {
for (int i = 0; i < JOYPADS_MAX; i++) {
close_joypad(i);
- };
+ }
return;
} else if (p_id < 0) {
return;
@@ -251,7 +251,7 @@ void JoypadLinux::close_joypad(int p_id) {
joy.fd = -1;
attached_devices.remove_at(attached_devices.find(joy.devpath));
input->joy_connection_changed(p_id, false, "");
- };
+ }
}
static String _hex_str(uint8_t p_byte) {
@@ -516,7 +516,7 @@ void JoypadLinux::process_joypads() {
}
if (len == 0 || (len < 0 && errno != EAGAIN)) {
close_joypad(i);
- };
+ }
if (joy->force_feedback) {
uint64_t timestamp = input->get_joy_vibration_timestamp(i);
diff --git a/platform/linuxbsd/os_linuxbsd.cpp b/platform/linuxbsd/os_linuxbsd.cpp
index e95a865636..d876932a83 100644
--- a/platform/linuxbsd/os_linuxbsd.cpp
+++ b/platform/linuxbsd/os_linuxbsd.cpp
@@ -141,6 +141,20 @@ String OS_LinuxBSD::get_unique_id() const {
return machine_id;
}
+String OS_LinuxBSD::get_processor_name() const {
+ FileAccessRef f = FileAccess::open("/proc/cpuinfo", FileAccess::READ);
+ ERR_FAIL_COND_V_MSG(!f, "", String("Couldn't open `/proc/cpuinfo` to get the CPU model name. Returning an empty string."));
+
+ while (!f->eof_reached()) {
+ const String line = f->get_line();
+ if (line.find("model name") != -1) {
+ return line.split(":")[1].strip_edges();
+ }
+ }
+
+ ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name from `/proc/cpuinfo`. Returning an empty string."));
+}
+
void OS_LinuxBSD::finalize() {
if (main_loop) {
memdelete(main_loop);
@@ -342,7 +356,7 @@ void OS_LinuxBSD::run() {
if (Main::iteration()) {
break;
}
- };
+ }
main_loop->finalize();
}
diff --git a/platform/linuxbsd/os_linuxbsd.h b/platform/linuxbsd/os_linuxbsd.h
index d97a528ece..d3857e85f8 100644
--- a/platform/linuxbsd/os_linuxbsd.h
+++ b/platform/linuxbsd/os_linuxbsd.h
@@ -87,6 +87,7 @@ public:
virtual Error shell_open(String p_uri) override;
virtual String get_unique_id() const override;
+ virtual String get_processor_name() const override;
virtual void alert(const String &p_alert, const String &p_title = "ALERT!") override;
diff --git a/platform/linuxbsd/vulkan_context_x11.cpp b/platform/linuxbsd/vulkan_context_x11.cpp
index e2fd8c76d2..b4f585726f 100644
--- a/platform/linuxbsd/vulkan_context_x11.cpp
+++ b/platform/linuxbsd/vulkan_context_x11.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "vulkan_context_x11.h"
+
#ifdef USE_VOLK
#include <volk.h>
#else
diff --git a/platform/osx/crash_handler_osx.mm b/platform/osx/crash_handler_osx.mm
index 3e640b3bf3..06ed91907c 100644
--- a/platform/osx/crash_handler_osx.mm
+++ b/platform/osx/crash_handler_osx.mm
@@ -89,8 +89,9 @@ static void handle_crash(int sig) {
fprintf(stderr, "\n================================================================\n");
fprintf(stderr, "%s: Program crashed with signal %d\n", __FUNCTION__, sig);
- if (OS::get_singleton()->get_main_loop())
+ if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_CRASH);
+ }
// Print the engine version just before, so that people are reminded to include the version in backtrace reports.
if (String(VERSION_HASH).is_empty()) {
@@ -119,8 +120,9 @@ static void handle_crash(int sig) {
snprintf(fname, 1024, "%s", demangled);
}
- if (demangled)
+ if (demangled) {
free(demangled);
+ }
}
}
@@ -177,8 +179,9 @@ CrashHandler::~CrashHandler() {
}
void CrashHandler::disable() {
- if (disabled)
+ if (disabled) {
return;
+ }
#ifdef CRASH_HANDLER_ENABLED
signal(SIGSEGV, nullptr);
diff --git a/platform/osx/display_server_osx.h b/platform/osx/display_server_osx.h
index 2b57983ca7..036e74c47c 100644
--- a/platform/osx/display_server_osx.h
+++ b/platform/osx/display_server_osx.h
@@ -104,8 +104,14 @@ public:
bool borderless = false;
bool resize_disabled = false;
bool no_focus = false;
+ bool is_popup = false;
+
+ Rect2i parent_safe_rect;
};
+ List<WindowID> popup_list;
+ uint64_t time_since_popup = 0;
+
private:
#if defined(GLES3_ENABLED)
GLManager_OSX *gl_manager = nullptr;
@@ -197,6 +203,9 @@ public:
void push_to_key_event_buffer(const KeyEvent &p_event);
void update_im_text(const Point2i &p_selection, const String &p_text);
void set_last_focused_window(WindowID p_window);
+ void mouse_process_popups(bool p_close = false);
+ void popup_open(WindowID p_window);
+ void popup_close(WindowID p_window);
void window_update(WindowID p_window);
void window_destroy(WindowID p_window);
@@ -259,6 +268,10 @@ public:
virtual void show_window(WindowID p_id) override;
virtual void delete_sub_window(WindowID p_id) override;
+ virtual WindowID window_get_active_popup() const override;
+ virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) override;
+ virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const override;
+
virtual void window_set_rect_changed_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;
virtual void window_set_window_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;
virtual void window_set_input_event_callback(const Callable &p_callable, WindowID p_window = MAIN_WINDOW_ID) override;
diff --git a/platform/osx/display_server_osx.mm b/platform/osx/display_server_osx.mm
index b7258e6cf4..23f37a8e18 100644
--- a/platform/osx/display_server_osx.mm
+++ b/platform/osx/display_server_osx.mm
@@ -324,27 +324,39 @@ void DisplayServerOSX::_dispatch_input_event(const Ref<InputEvent> &p_event) {
Variant ret;
Callable::CallError ce;
+ {
+ List<WindowID>::Element *E = popup_list.front();
+ if (E && Object::cast_to<InputEventKey>(*p_event)) {
+ // Redirect keyboard input to active popup.
+ if (windows.has(E->get())) {
+ Callable callable = windows[E->get()].input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
+ }
+ }
+ in_dispatch_input_event = false;
+ return;
+ }
+ }
+
Ref<InputEventFromWindow> event_from_window = p_event;
if (event_from_window.is_valid() && event_from_window->get_window_id() != INVALID_WINDOW_ID) {
// Send to a window.
if (windows.has(event_from_window->get_window_id())) {
Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
- if (callable.is_null()) {
- return;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
}
- callable.call((const Variant **)&evp, 1, ret, ce);
}
} else {
// Send to all windows.
- for (Map<WindowID, WindowData>::Element *E = windows.front(); E; E = E->next()) {
- Callable callable = E->get().input_event_callback;
- if (callable.is_null()) {
- continue;
+ for (KeyValue<WindowID, WindowData> &E : windows) {
+ Callable callable = E.value.input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
}
- callable.call((const Variant **)&evp, 1, ret, ce);
}
}
-
in_dispatch_input_event = false;
}
}
@@ -513,6 +525,9 @@ DisplayServerOSX::WindowData &DisplayServerOSX::get_window(WindowID p_window) {
}
void DisplayServerOSX::send_event(NSEvent *p_event) {
+ if ([p_event type] == NSEventTypeLeftMouseDown || [p_event type] == NSEventTypeRightMouseDown || [p_event type] == NSEventTypeOtherMouseDown) {
+ mouse_process_popups();
+ }
// Special case handling of command-period, which is traditionally a special
// shortcut in macOS and doesn't arrive at our regular keyDown handler.
if ([p_event type] == NSEventTypeKeyDown) {
@@ -790,8 +805,9 @@ String DisplayServerOSX::global_menu_get_item_submenu(const String &p_menu_root,
const NSMenu *sub_menu = [menu_item submenu];
if (sub_menu) {
for (Map<String, NSMenu *>::Element *E = submenu.front(); E; E = E->next()) {
- if (E->get() == sub_menu)
+ if (E->get() == sub_menu) {
return E->key();
+ }
}
}
}
@@ -1365,7 +1381,8 @@ DisplayServer::WindowID DisplayServerOSX::create_sub_window(WindowMode p_mode, V
void DisplayServerOSX::show_window(WindowID p_id) {
WindowData &wd = windows[p_id];
- if (wd.no_focus) {
+ popup_open(p_id);
+ if (wd.no_focus || wd.is_popup) {
[wd.window_object orderFront:nil];
} else {
[wd.window_object makeKeyAndOrderFront:nil];
@@ -1808,7 +1825,7 @@ void DisplayServerOSX::window_set_flag(WindowFlags p_flag, bool p_enabled, Windo
}
_update_window_style(wd);
if ([wd.window_object isVisible]) {
- if (wd.no_focus) {
+ if (wd.no_focus || wd.is_popup) {
[wd.window_object orderFront:nil];
} else {
[wd.window_object makeKeyAndOrderFront:nil];
@@ -1837,6 +1854,11 @@ void DisplayServerOSX::window_set_flag(WindowFlags p_flag, bool p_enabled, Windo
case WINDOW_FLAG_NO_FOCUS: {
wd.no_focus = p_enabled;
} break;
+ case WINDOW_FLAG_POPUP: {
+ ERR_FAIL_COND_MSG(p_window == MAIN_WINDOW_ID, "Main window can't be popup.");
+ ERR_FAIL_COND_MSG([wd.window_object isVisible] && (wd.is_popup != p_enabled), "Pupup flag can't changed while window is opened.");
+ wd.is_popup = p_enabled;
+ } break;
default: {
}
}
@@ -1868,6 +1890,9 @@ bool DisplayServerOSX::window_get_flag(WindowFlags p_flag, WindowID p_window) co
case WINDOW_FLAG_NO_FOCUS: {
return wd.no_focus;
} break;
+ case WINDOW_FLAG_POPUP: {
+ return wd.is_popup;
+ } break;
default: {
}
}
@@ -1887,7 +1912,7 @@ void DisplayServerOSX::window_move_to_foreground(WindowID p_window) {
const WindowData &wd = windows[p_window];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
- if (wd.no_focus) {
+ if (wd.no_focus || wd.is_popup) {
[wd.window_object orderFront:nil];
} else {
[wd.window_object makeKeyAndOrderFront:nil];
@@ -2445,6 +2470,120 @@ void DisplayServerOSX::register_osx_driver() {
register_create_function("osx", create_func, get_rendering_drivers_func);
}
+DisplayServer::WindowID DisplayServerOSX::window_get_active_popup() const {
+ const List<WindowID>::Element *E = popup_list.back();
+ if (E) {
+ return E->get();
+ } else {
+ return INVALID_WINDOW_ID;
+ }
+}
+
+void DisplayServerOSX::window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND(!windows.has(p_window));
+ WindowData &wd = windows[p_window];
+ wd.parent_safe_rect = p_rect;
+}
+
+Rect2i DisplayServerOSX::window_get_popup_safe_rect(WindowID p_window) const {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND_V(!windows.has(p_window), Rect2i());
+ const WindowData &wd = windows[p_window];
+ return wd.parent_safe_rect;
+}
+
+void DisplayServerOSX::popup_open(WindowID p_window) {
+ WindowData &wd = windows[p_window];
+ if (wd.is_popup) {
+ bool was_empty = popup_list.is_empty();
+ // Close all popups, up to current popup parent, or every popup if new window is not transient.
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ if (wd.transient_parent != E->get() || wd.transient_parent == INVALID_WINDOW_ID) {
+ send_window_event(windows[E->get()], DisplayServerOSX::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ } else {
+ break;
+ }
+ }
+
+ if (was_empty && popup_list.is_empty()) {
+ // Inform OS that popup was opened, to close other native popups.
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.HIToolbox.beginMenuTrackingNotification" object:@"org.godotengine.godot.popup_window"];
+ }
+ time_since_popup = OS::get_singleton()->get_ticks_msec();
+ popup_list.push_back(p_window);
+ }
+}
+
+void DisplayServerOSX::popup_close(WindowID p_window) {
+ bool was_empty = popup_list.is_empty();
+ List<WindowID>::Element *E = popup_list.find(p_window);
+ while (E) {
+ send_window_event(windows[E->get()], DisplayServerOSX::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->next();
+ popup_list.erase(E);
+ E = F;
+ }
+ if (!was_empty && popup_list.is_empty()) {
+ // Inform OS that all popups are closed.
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.HIToolbox.endMenuTrackingNotification" object:@"org.godotengine.godot.popup_window"];
+ }
+}
+
+void DisplayServerOSX::mouse_process_popups(bool p_close) {
+ _THREAD_SAFE_METHOD_
+
+ bool was_empty = popup_list.is_empty();
+ if (p_close) {
+ // Close all popups.
+ List<WindowID>::Element *E = popup_list.front();
+ while (E) {
+ send_window_event(windows[E->get()], DisplayServerOSX::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->next();
+ popup_list.erase(E);
+ E = F;
+ }
+ if (!was_empty) {
+ // Inform OS that all popups are closed.
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.HIToolbox.endMenuTrackingNotification" object:@"org.godotengine.godot.popup_window"];
+ }
+ } else {
+ uint64_t delta = OS::get_singleton()->get_ticks_msec() - time_since_popup;
+ if (delta < 250) {
+ return;
+ }
+
+ Point2i pos = mouse_get_position();
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ // Popup window area.
+ Rect2i win_rect = Rect2i(window_get_position(E->get()), window_get_size(E->get()));
+ // Area of the parent window, which responsible for opening sub-menu.
+ Rect2i safe_rect = window_get_popup_safe_rect(E->get());
+ if (win_rect.has_point(pos)) {
+ break;
+ } else if (safe_rect != Rect2i() && safe_rect.has_point(pos)) {
+ break;
+ } else {
+ send_window_event(windows[E->get()], DisplayServerOSX::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ }
+ }
+ if (!was_empty && popup_list.is_empty()) {
+ // Inform OS that all popups are closed.
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.HIToolbox.endMenuTrackingNotification" object:@"org.godotengine.godot.popup_window"];
+ }
+ }
+}
+
DisplayServerOSX::DisplayServerOSX(const String &p_rendering_driver, WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Vector2i &p_resolution, Error &r_error) {
Input::get_singleton()->set_event_dispatch_function(_dispatch_input_events);
diff --git a/platform/osx/export/export_plugin.cpp b/platform/osx/export/export_plugin.cpp
index 17861f24d2..24b9bc02a2 100644
--- a/platform/osx/export/export_plugin.cpp
+++ b/platform/osx/export/export_plugin.cpp
@@ -441,7 +441,7 @@ Error EditorExportPlatformOSX::_notarize(const Ref<EditorExportPreset> &p_preset
print_line(TTR("Note: The notarization process generally takes less than an hour. When the process is completed, you'll receive an email."));
print_line(" " + TTR("You can check progress manually by opening a Terminal and running the following command:"));
print_line(" \"xcrun altool --notarization-history 0 -u <your email> -p <app-specific pwd>\"");
- print_line(" " + TTR("Run the following command to staple notarization ticket to the exported application (optional):"));
+ print_line(" " + TTR("Run the following command to staple the notarization ticket to the exported application (optional):"));
print_line(" \"xcrun stapler staple <app path>\"");
}
@@ -826,7 +826,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p
if (((info.external_fa >> 16L) & 0120000) == 0120000) {
#ifndef UNIX_ENABLED
- WARN_PRINT(vformat("Relative symlinks are not supported on this OS, exported project might be broken!"));
+ WARN_PRINT(vformat("Relative symlinks are not supported on this OS, the exported project might be broken!"));
#endif
// Handle symlinks in the archive.
file = tmp_app_path_name.plus_file(file);
@@ -1130,7 +1130,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p
ad_hoc = (sign_identity == "" || sign_identity == "-");
bool lib_validation = p_preset->get("codesign/entitlements/disable_library_validation");
if ((!dylibs_found.is_empty() || !shared_objects.is_empty()) && sign_enabled && ad_hoc && !lib_validation) {
- ERR_PRINT("Application with an ad-hoc signature require 'Disable Library Validation' entitlement to load dynamic libraries.");
+ ERR_PRINT("Ad-hoc signed applications require the 'Disable Library Validation' entitlement to load dynamic libraries.");
err = ERR_CANT_CREATE;
}
}
@@ -1209,7 +1209,7 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p
bool noto_enabled = p_preset->get("notarization/enable");
if (err == OK && noto_enabled) {
if (export_format == "app") {
- WARN_PRINT("Notarization require app to be archived first, select DMG or ZIP export format instead.");
+ WARN_PRINT("Notarization requires the app to be archived first, select the DMG or ZIP export format instead.");
} else {
if (ep.step(TTR("Sending archive for notarization"), 4)) {
return ERR_SKIP;
@@ -1406,7 +1406,7 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
if (noto_enabled) {
if (ad_hoc) {
- err += TTR("Notarization: Notarization with the ad-hoc signature is not supported.") + "\n";
+ err += TTR("Notarization: Notarization with an ad-hoc signature is not supported.") + "\n";
valid = false;
}
if (!sign_enabled) {
@@ -1430,9 +1430,9 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
valid = false;
}
} else {
- err += TTR("Warning: Notarization is disabled. Exported project will be blocked by Gatekeeper, if it's downloaded from an unknown source.") + "\n";
+ err += TTR("Warning: Notarization is disabled. The exported project will be blocked by Gatekeeper if it's downloaded from an unknown source.") + "\n";
if (!sign_enabled) {
- err += TTR("Code signing is disabled. Exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs.") + "\n";
+ err += TTR("Code signing is disabled. The exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs.") + "\n";
} else {
if ((bool)p_preset->get("codesign/hardened_runtime") && ad_hoc) {
err += TTR("Hardened Runtime is not compatible with ad-hoc signature, and will be disabled!") + "\n";
@@ -1443,9 +1443,9 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
}
}
#else
- err += TTR("Warning: Notarization is not supported on this OS. Exported project will be blocked by Gatekeeper, if it's downloaded from an unknown source.") + "\n";
+ err += TTR("Warning: Notarization is not supported from this OS. The exported project will be blocked by Gatekeeper if it's downloaded from an unknown source.") + "\n";
if (!sign_enabled) {
- err += TTR("Code signing is disabled. Exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs.") + "\n";
+ err += TTR("Code signing is disabled. The exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs.") + "\n";
}
#endif
diff --git a/platform/osx/godot_application_delegate.mm b/platform/osx/godot_application_delegate.mm
index be284ba543..dc82075c44 100644
--- a/platform/osx/godot_application_delegate.mm
+++ b/platform/osx/godot_application_delegate.mm
@@ -68,6 +68,10 @@
}
- (void)applicationDidResignActive:(NSNotification *)notification {
+ DisplayServerOSX *ds = (DisplayServerOSX *)DisplayServer::get_singleton();
+ if (ds) {
+ ds->mouse_process_popups(true);
+ }
if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_APPLICATION_FOCUS_OUT);
}
diff --git a/platform/osx/godot_content_view.mm b/platform/osx/godot_content_view.mm
index 76d9cfb081..e96f0a8098 100644
--- a/platform/osx/godot_content_view.mm
+++ b/platform/osx/godot_content_view.mm
@@ -281,7 +281,7 @@
}
DisplayServerOSX::WindowData &wd = ds->get_window(window_id);
- return !wd.no_focus;
+ return !wd.no_focus && !wd.is_popup;
}
- (BOOL)acceptsFirstResponder {
diff --git a/platform/osx/godot_main_osx.mm b/platform/osx/godot_main_osx.mm
index 7fabfaa1b7..f3db363151 100644
--- a/platform/osx/godot_main_osx.mm
+++ b/platform/osx/godot_main_osx.mm
@@ -49,7 +49,7 @@ int main(int argc, char **argv) {
first_arg = i + 2;
}
printf("%i: %s\n", i, argv[i]);
- };
+ }
#ifdef DEBUG_ENABLED
// Lets report the path we made current after all that.
@@ -84,4 +84,4 @@ int main(int argc, char **argv) {
Main::cleanup();
return os.get_exit_code();
-};
+}
diff --git a/platform/osx/godot_window.mm b/platform/osx/godot_window.mm
index 772a2ddb9f..d43853a94b 100644
--- a/platform/osx/godot_window.mm
+++ b/platform/osx/godot_window.mm
@@ -52,7 +52,7 @@
}
DisplayServerOSX::WindowData &wd = ds->get_window(window_id);
- return !wd.no_focus;
+ return !wd.no_focus && !wd.is_popup;
}
- (BOOL)canBecomeMainWindow {
@@ -63,7 +63,7 @@
}
DisplayServerOSX::WindowData &wd = ds->get_window(window_id);
- return !wd.no_focus;
+ return !wd.no_focus && !wd.is_popup;
}
@end
diff --git a/platform/osx/godot_window_delegate.mm b/platform/osx/godot_window_delegate.mm
index 1742be987d..dbc244650e 100644
--- a/platform/osx/godot_window_delegate.mm
+++ b/platform/osx/godot_window_delegate.mm
@@ -54,6 +54,8 @@
return;
}
+ ds->popup_close(window_id);
+
DisplayServerOSX::WindowData &wd = ds->get_window(window_id);
while (wd.transient_children.size()) {
ds->window_set_transient(wd.transient_children.front()->get(), DisplayServerOSX::INVALID_WINDOW_ID);
diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp
index d518206f04..7d31ede61d 100644
--- a/platform/osx/joypad_osx.cpp
+++ b/platform/osx/joypad_osx.cpp
@@ -322,10 +322,11 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) {
// Bluetooth device.
String guid = "05000000";
for (int i = 0; i < 12; i++) {
- if (i < name.size())
+ if (i < name.size()) {
guid += _hex_str(name[i]);
- else
+ } else {
guid += "00";
+ }
}
input->joy_connection_changed(id, true, name, guid);
}
@@ -381,8 +382,9 @@ bool joypad::check_ff_features() {
if (ret == FF_OK && (features.supportedEffects & FFCAP_ET_CONSTANTFORCE)) {
uint32_t val;
ret = FFDeviceGetForceFeedbackProperty(ff_device, FFPROP_FFGAIN, &val, sizeof(val));
- if (ret != FF_OK)
+ if (ret != FF_OK) {
return false;
+ }
int num_axes = features.numFfAxes;
ff_axes = (DWORD *)memalloc(sizeof(DWORD) * num_axes);
ff_directions = (LONG *)memalloc(sizeof(LONG) * num_axes);
@@ -509,16 +511,18 @@ void JoypadOSX::joypad_vibration_stop(int p_id, uint64_t p_timestamp) {
int JoypadOSX::get_joy_index(int p_id) const {
for (int i = 0; i < device_list.size(); i++) {
- if (device_list[i].id == p_id)
+ if (device_list[i].id == p_id) {
return i;
+ }
}
return -1;
}
int JoypadOSX::get_joy_ref(IOHIDDeviceRef p_device) const {
for (int i = 0; i < device_list.size(); i++) {
- if (device_list[i].device_ref == p_device)
+ if (device_list[i].device_ref == p_device) {
return i;
+ }
}
return -1;
}
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 5bb5b3320e..53c5c8bd90 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -102,6 +102,7 @@ public:
virtual Error create_instance(const List<String> &p_arguments, ProcessID *r_child_id = nullptr) override;
virtual String get_unique_id() const override;
+ virtual String get_processor_name() const override;
virtual bool _check_internal_feature_support(const String &p_feature) override;
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index 9288e658cf..6700f8fe82 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -42,6 +42,8 @@
#include <dlfcn.h>
#include <libproc.h>
#include <mach-o/dyld.h>
+#include <os/log.h>
+#include <sys/sysctl.h>
_FORCE_INLINE_ String OS_OSX::get_framework_executable(const String &p_path) {
// Append framework executable name, or return as is if p_path is not a framework.
@@ -72,6 +74,15 @@ void OS_OSX::initialize() {
initialize_core();
}
+String OS_OSX::get_processor_name() const {
+ char buffer[256];
+ size_t buffer_len = 256;
+ if (sysctlbyname("machdep.cpu.brand_string", &buffer, &buffer_len, NULL, 0) == 0) {
+ return String::utf8(buffer, buffer_len);
+ }
+ ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name. Returning an empty string."));
+}
+
void OS_OSX::initialize_core() {
OS_Unix::initialize_core();
@@ -430,7 +441,7 @@ void OS_OSX::run() {
} @catch (NSException *exception) {
ERR_PRINT("NSException: " + String::utf8([exception reason].UTF8String));
}
- };
+ }
main_loop->finalize();
}
diff --git a/platform/osx/osx_terminal_logger.mm b/platform/osx/osx_terminal_logger.mm
index c1dca111a7..48e26f42bf 100644
--- a/platform/osx/osx_terminal_logger.mm
+++ b/platform/osx/osx_terminal_logger.mm
@@ -40,10 +40,11 @@ void OSXTerminalLogger::log_error(const char *p_function, const char *p_file, in
}
const char *err_details;
- if (p_rationale && p_rationale[0])
+ if (p_rationale && p_rationale[0]) {
err_details = p_rationale;
- else
+ } else {
err_details = p_code;
+ }
switch (p_type) {
case ERR_WARNING:
diff --git a/platform/uwp/app_uwp.cpp b/platform/uwp/app_uwp.cpp
index 6832d71a6f..6460c43447 100644
--- a/platform/uwp/app_uwp.cpp
+++ b/platform/uwp/app_uwp.cpp
@@ -177,7 +177,7 @@ static MouseButton _get_button(Windows::UI::Input::PointerPoint ^ pt) {
#endif
return MOUSE_BUTTON_NONE;
-};
+}
static bool _is_touch(Windows::UI::Input::PointerPoint ^ pointerPoint) {
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
@@ -231,11 +231,11 @@ static Windows::Foundation::Point _get_pixel_position(CoreWindow ^ window, Windo
outputPosition.Y *= vm.height;
return outputPosition;
-};
+}
static int _get_finger(uint32_t p_touch_id) {
return p_touch_id % 31; // for now
-};
+}
void App::pointer_event(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args, bool p_pressed, bool p_is_wheel) {
Windows::UI::Input::PointerPoint ^ point = args->CurrentPoint;
@@ -281,15 +281,15 @@ void App::pointer_event(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Cor
os->input_event(mouse_button);
}
}
-};
+}
void App::OnPointerPressed(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) {
pointer_event(sender, args, true);
-};
+}
void App::OnPointerReleased(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) {
pointer_event(sender, args, false);
-};
+}
void App::OnPointerWheelChanged(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) {
pointer_event(sender, args, true, true);
@@ -416,8 +416,9 @@ void App::Load(Platform::String ^ entryPoint) {
// This method is called after the window becomes active.
void App::Run() {
- if (Main::start())
+ if (Main::start()) {
os->run();
+ }
}
// Terminate events do not cause Uninitialize to be called. It will be called if your IFrameworkView
diff --git a/platform/uwp/context_egl_uwp.cpp b/platform/uwp/context_egl_uwp.cpp
index a08693c72f..8ec7bdfcee 100644
--- a/platform/uwp/context_egl_uwp.cpp
+++ b/platform/uwp/context_egl_uwp.cpp
@@ -36,26 +36,26 @@ using Platform::Exception;
void ContextEGL_UWP::release_current() {
eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, mEglContext);
-};
+}
void ContextEGL_UWP::make_current() {
eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext);
-};
+}
int ContextEGL_UWP::get_window_width() {
return width;
-};
+}
int ContextEGL_UWP::get_window_height() {
return height;
-};
+}
void ContextEGL_UWP::reset() {
cleanup();
window = CoreWindow::GetForCurrentThread();
initialize();
-};
+}
void ContextEGL_UWP::swap_buffers() {
if (eglSwapBuffers(mEglDisplay, mEglSurface) != EGL_TRUE) {
@@ -66,7 +66,7 @@ void ContextEGL_UWP::swap_buffers() {
// tell rasterizer to reload textures and stuff?
}
-};
+}
Error ContextEGL_UWP::initialize() {
EGLint configAttribList[] = {
@@ -170,7 +170,7 @@ Error ContextEGL_UWP::initialize() {
}
} catch (...) {
return FAILED;
- };
+ }
mEglDisplay = display;
mEglSurface = surface;
@@ -180,7 +180,7 @@ Error ContextEGL_UWP::initialize() {
eglQuerySurface(display, surface, EGL_HEIGHT, &height);
return OK;
-};
+}
void ContextEGL_UWP::cleanup() {
if (mEglDisplay != EGL_NO_DISPLAY && mEglSurface != EGL_NO_SURFACE) {
@@ -197,7 +197,7 @@ void ContextEGL_UWP::cleanup() {
eglTerminate(mEglDisplay);
mEglDisplay = EGL_NO_DISPLAY;
}
-};
+}
ContextEGL_UWP::ContextEGL_UWP(CoreWindow ^ p_window, Driver p_driver) :
mEglDisplay(EGL_NO_DISPLAY),
@@ -209,4 +209,4 @@ ContextEGL_UWP::ContextEGL_UWP(CoreWindow ^ p_window, Driver p_driver) :
ContextEGL_UWP::~ContextEGL_UWP() {
cleanup();
-};
+}
diff --git a/platform/uwp/joypad_uwp.cpp b/platform/uwp/joypad_uwp.cpp
index e48016919b..85c8959cf1 100644
--- a/platform/uwp/joypad_uwp.cpp
+++ b/platform/uwp/joypad_uwp.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "joypad_uwp.h"
+
#include "core/os/os.h"
using namespace Windows::Gaming::Input;
@@ -45,8 +46,9 @@ void JoypadUWP::process_controllers() {
for (int i = 0; i < MAX_CONTROLLERS; i++) {
ControllerDevice &joy = controllers[i];
- if (!joy.connected)
+ if (!joy.connected) {
break;
+ }
switch (joy.type) {
case ControllerType::GAMEPAD_CONTROLLER: {
@@ -76,8 +78,9 @@ void JoypadUWP::process_controllers() {
}
} else if (joy.vibrating && joy.ff_end_timestamp != 0) {
uint64_t current_time = OS::get_singleton()->get_ticks_usec();
- if (current_time >= joy.ff_end_timestamp)
+ if (current_time >= joy.ff_end_timestamp) {
joypad_vibration_stop(i, current_time);
+ }
}
break;
@@ -87,8 +90,9 @@ void JoypadUWP::process_controllers() {
}
JoypadUWP::JoypadUWP() {
- for (int i = 0; i < MAX_CONTROLLERS; i++)
+ for (int i = 0; i < MAX_CONTROLLERS; i++) {
controllers[i].id = i;
+ }
}
JoypadUWP::JoypadUWP(InputDefault *p_input) {
diff --git a/platform/uwp/os_uwp.cpp b/platform/uwp/os_uwp.cpp
index b6dde9c63f..22a54911f9 100644
--- a/platform/uwp/os_uwp.cpp
+++ b/platform/uwp/os_uwp.cpp
@@ -95,12 +95,12 @@ void OS_UWP::set_window_fullscreen(bool p_enabled) {
video_mode.fullscreen = view->IsFullScreenMode;
- if (video_mode.fullscreen == p_enabled)
+ if (video_mode.fullscreen == p_enabled) {
return;
+ }
if (p_enabled) {
video_mode.fullscreen = view->TryEnterFullScreenMode();
-
} else {
view->ExitFullScreenMode();
video_mode.fullscreen = false;
@@ -112,13 +112,15 @@ bool OS_UWP::is_window_fullscreen() const {
}
void OS_UWP::set_keep_screen_on(bool p_enabled) {
- if (is_keep_screen_on() == p_enabled)
+ if (is_keep_screen_on() == p_enabled) {
return;
+ }
- if (p_enabled)
+ if (p_enabled) {
display_request->RequestActive();
- else
+ } else {
display_request->RequestRelease();
+ }
OS::set_keep_screen_on(p_enabled);
}
@@ -150,7 +152,7 @@ void OS_UWP::set_window(Windows::UI::Core::CoreWindow ^ p_window) {
void OS_UWP::screen_size_changed() {
gl_context->reset();
-};
+}
Error OS_UWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) {
main_loop = nullptr;
@@ -269,8 +271,9 @@ Error OS_UWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_a
_ensure_user_data_dir();
- if (is_keep_screen_on())
+ if (is_keep_screen_on()) {
display_request->RequestActive();
+ }
set_keep_screen_on(GLOBAL_DEF("display/window/energy_saving/keep_screen_on", true));
@@ -283,22 +286,24 @@ void OS_UWP::set_clipboard(const String &p_text) {
clip->SetText(ref new Platform::String((LPCWSTR)(p_text.utf16().get_data())));
Clipboard::SetContent(clip);
-};
+}
String OS_UWP::get_clipboard() const {
- if (managed_object->clipboard != nullptr)
+ if (managed_object->clipboard != nullptr) {
return managed_object->clipboard->Data();
- else
+ } else {
return "";
-};
+ }
+}
void OS_UWP::input_event(const Ref<InputEvent> &p_event) {
input->parse_input_event(p_event);
-};
+}
void OS_UWP::delete_main_loop() {
- if (main_loop)
+ if (main_loop) {
memdelete(main_loop);
+ }
main_loop = nullptr;
}
@@ -308,16 +313,18 @@ void OS_UWP::set_main_loop(MainLoop *p_main_loop) {
}
void OS_UWP::finalize() {
- if (main_loop)
+ if (main_loop) {
memdelete(main_loop);
+ }
main_loop = nullptr;
rendering_server->finish();
memdelete(rendering_server);
#ifdef GLES3_ENABLED
- if (gl_context)
+ if (gl_context) {
memdelete(gl_context);
+ }
#endif
memdelete(input);
@@ -472,8 +479,9 @@ OS::Time OS_UWP::get_time(bool p_utc) const {
OS::TimeZoneInfo OS_UWP::get_time_zone_info() const {
TIME_ZONE_INFORMATION info;
bool daylight = false;
- if (GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT)
+ if (GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT) {
daylight = true;
+ }
TimeZoneInfo ret;
if (daylight) {
@@ -507,7 +515,7 @@ uint64_t OS_UWP::get_unix_time() const {
SystemTimeToFileTime(&ep, &fep);
return (*(uint64_t *)&ft - *(uint64_t *)&fep) / 10000000;
-};
+}
void OS_UWP::delay_usec(uint32_t p_usec) const {
int msec = p_usec < 1000 ? 1 : p_usec / 1000;
@@ -590,8 +598,9 @@ void OS_UWP::queue_key_event(KeyEvent &p_event) {
void OS_UWP::set_cursor_shape(CursorShape p_shape) {
ERR_FAIL_INDEX(p_shape, CURSOR_MAX);
- if (cursor_shape == p_shape)
+ if (cursor_shape == p_shape) {
return;
+ }
static const CoreCursorType uwp_cursors[CURSOR_MAX] = {
CoreCursorType::Arrow,
@@ -628,15 +637,15 @@ void OS_UWP::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c
Error OS_UWP::execute(const String &p_path, const List<String> &p_arguments, String *r_pipe, int *r_exitcode, bool read_stderr, Mutex *p_pipe_mutex, bool p_open_console) {
return FAILED;
-};
+}
Error OS_UWP::create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id, bool p_open_console) {
return FAILED;
-};
+}
Error OS_UWP::kill(const ProcessID &p_pid) {
return FAILED;
-};
+}
Error OS_UWP::set_cwd(const String &p_cwd) {
return FAILED;
@@ -651,11 +660,11 @@ void OS_UWP::set_icon(const Ref<Image> &p_icon) {
bool OS_UWP::has_environment(const String &p_var) const {
return false;
-};
+}
String OS_UWP::get_environment(const String &p_var) const {
return "";
-};
+}
bool OS_UWP::set_environment(const String &p_var, const String &p_value) const {
return false;
@@ -751,8 +760,9 @@ Error OS_UWP::get_dynamic_library_symbol_handle(void *p_library_handle, const St
}
void OS_UWP::run() {
- if (!main_loop)
+ if (!main_loop) {
return;
+ }
main_loop->init();
@@ -763,12 +773,14 @@ void OS_UWP::run() {
while (!force_quit) {
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
- if (managed_object->alert_close_handle)
+ if (managed_object->alert_close_handle) {
continue;
+ }
process_events(); // get rid of pending events
- if (Main::iteration())
+ if (Main::iteration()) {
break;
- };
+ }
+ }
main_loop->finish();
}
diff --git a/platform/windows/crash_handler_windows.cpp b/platform/windows/crash_handler_windows.cpp
index 5064f6b97f..3b2c6fe9f6 100644
--- a/platform/windows/crash_handler_windows.cpp
+++ b/platform/windows/crash_handler_windows.cpp
@@ -80,8 +80,9 @@ public:
std::string name() { return std::string(sym->Name); }
std::string undecorated_name() {
- if (*sym->Name == '\0')
+ if (*sym->Name == '\0') {
return "<couldn't map PC to fn name>";
+ }
std::vector<char> und_name(max_name_len);
UnDecorateSymbolName(sym->Name, &und_name[0], max_name_len, UNDNAME_COMPLETE);
return std::string(&und_name[0], strlen(&und_name[0]));
@@ -131,12 +132,14 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
fprintf(stderr, "\n================================================================\n");
fprintf(stderr, "%s: Program crashed\n", __FUNCTION__);
- if (OS::get_singleton()->get_main_loop())
+ if (OS::get_singleton()->get_main_loop()) {
OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_CRASH);
+ }
// Load the symbols:
- if (!SymInitialize(process, nullptr, false))
+ if (!SymInitialize(process, nullptr, false)) {
return EXCEPTION_CONTINUE_SEARCH;
+ }
SymSetOptions(SymGetOptions() | SYMOPT_LOAD_LINES | SYMOPT_UNDNAME);
EnumProcessModules(process, &module_handles[0], module_handles.size() * sizeof(HMODULE), &cbNeeded);
@@ -193,18 +196,21 @@ DWORD CrashHandlerException(EXCEPTION_POINTERS *ep) {
if (frame.AddrPC.Offset != 0) {
std::string fnName = symbol(process, frame.AddrPC.Offset).undecorated_name();
- if (SymGetLineFromAddr64(process, frame.AddrPC.Offset, &offset_from_symbol, &line))
+ if (SymGetLineFromAddr64(process, frame.AddrPC.Offset, &offset_from_symbol, &line)) {
fprintf(stderr, "[%d] %s (%s:%d)\n", n, fnName.c_str(), line.FileName, line.LineNumber);
- else
+ } else {
fprintf(stderr, "[%d] %s\n", n, fnName.c_str());
- } else
+ }
+ } else {
fprintf(stderr, "[%d] ???\n", n);
+ }
n++;
}
- if (!StackWalk64(image_type, process, hThread, &frame, context, nullptr, SymFunctionTableAccess64, SymGetModuleBase64, nullptr))
+ if (!StackWalk64(image_type, process, hThread, &frame, context, nullptr, SymFunctionTableAccess64, SymGetModuleBase64, nullptr)) {
break;
+ }
} while (frame.AddrReturn.Offset != 0 && n < 256);
fprintf(stderr, "-- END OF BACKTRACE --\n");
@@ -225,8 +231,9 @@ CrashHandler::~CrashHandler() {
}
void CrashHandler::disable() {
- if (disabled)
+ if (disabled) {
return;
+ }
disabled = true;
}
diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp
index c7955ebf31..163f5c350b 100644
--- a/platform/windows/display_server_windows.cpp
+++ b/platform/windows/display_server_windows.cpp
@@ -231,7 +231,7 @@ String DisplayServerWindows::clipboard_get() const {
String ret;
if (!OpenClipboard(windows[last_focused_window].hWnd)) {
ERR_FAIL_V_MSG("", "Unable to open clipboard.");
- };
+ }
if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
HGLOBAL mem = GetClipboardData(CF_UNICODETEXT);
@@ -240,8 +240,8 @@ String DisplayServerWindows::clipboard_get() const {
if (ptr != nullptr) {
ret = String::utf16((const char16_t *)ptr);
GlobalUnlock(mem);
- };
- };
+ }
+ }
} else if (IsClipboardFormatAvailable(CF_TEXT)) {
HGLOBAL mem = GetClipboardData(CF_UNICODETEXT);
@@ -250,9 +250,9 @@ String DisplayServerWindows::clipboard_get() const {
if (ptr != nullptr) {
ret.parse_utf8((const char *)ptr);
GlobalUnlock(mem);
- };
- };
- };
+ }
+ }
+ }
CloseClipboard();
@@ -422,8 +422,9 @@ static int QueryDpiForMonitor(HMONITOR hmon, _MonitorDpiType dpiType = MDT_Defau
getDPIForMonitor = Shcore ? (GetDPIForMonitor_t)GetProcAddress(Shcore, "GetDpiForMonitor") : nullptr;
if ((Shcore == nullptr) || (getDPIForMonitor == nullptr)) {
- if (Shcore)
+ if (Shcore) {
FreeLibrary(Shcore);
+ }
Shcore = (HMODULE)INVALID_HANDLE_VALUE;
}
}
@@ -545,6 +546,9 @@ DisplayServer::WindowID DisplayServerWindows::create_sub_window(WindowMode p_mod
if (p_flags & WINDOW_FLAG_NO_FOCUS_BIT) {
wd.no_focus = true;
}
+ if (p_flags & WINDOW_FLAG_POPUP_BIT) {
+ wd.is_popup = true;
+ }
// Inherit icons from MAIN_WINDOW for all sub windows.
HICON mainwindow_icon = (HICON)SendMessage(windows[MAIN_WINDOW_ID].hWnd, WM_GETICON, ICON_SMALL, 0);
@@ -562,13 +566,14 @@ void DisplayServerWindows::show_window(WindowID p_id) {
ERR_FAIL_COND(!windows.has(p_id));
WindowData &wd = windows[p_id];
+ popup_open(p_id);
if (p_id != MAIN_WINDOW_ID) {
_update_window_style(p_id);
}
- ShowWindow(wd.hWnd, wd.no_focus ? SW_SHOWNOACTIVATE : SW_SHOW); // Show the window.
- if (!wd.no_focus) {
+ ShowWindow(wd.hWnd, (wd.no_focus || wd.is_popup) ? SW_SHOWNOACTIVATE : SW_SHOW); // Show the window.
+ if (!wd.no_focus && !wd.is_popup) {
SetForegroundWindow(wd.hWnd); // Slightly higher priority.
SetFocus(wd.hWnd); // Set keyboard focus.
}
@@ -580,6 +585,8 @@ void DisplayServerWindows::delete_sub_window(WindowID p_window) {
ERR_FAIL_COND(!windows.has(p_window));
ERR_FAIL_COND_MSG(p_window == MAIN_WINDOW_ID, "Main window cannot be deleted.");
+ popup_close(p_window);
+
WindowData &wd = windows[p_window];
while (wd.transient_children.size()) {
@@ -1018,6 +1025,7 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
r_style_ex = WS_EX_WINDOWEDGE;
if (p_main_window) {
r_style_ex |= WS_EX_APPWINDOW;
+ r_style |= WS_VISIBLE;
}
if (p_fullscreen || p_borderless) {
@@ -1036,13 +1044,15 @@ void DisplayServerWindows::_get_window_style(bool p_main_window, bool p_fullscre
r_style = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU;
}
}
- if (!p_borderless) {
- r_style |= WS_VISIBLE;
- }
if (p_no_activate_focus) {
r_style_ex |= WS_EX_TOPMOST | WS_EX_NOACTIVATE;
}
+
+ if (!p_borderless && !p_no_activate_focus) {
+ r_style |= WS_VISIBLE;
+ }
+
r_style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
r_style_ex |= WS_EX_ACCEPTFILES;
}
@@ -1056,12 +1066,12 @@ void DisplayServerWindows::_update_window_style(WindowID p_window, bool p_repain
DWORD style = 0;
DWORD style_ex = 0;
- _get_window_style(p_window == MAIN_WINDOW_ID, wd.fullscreen, wd.multiwindow_fs, wd.borderless, wd.resizable, wd.maximized, wd.no_focus, style, style_ex);
+ _get_window_style(p_window == MAIN_WINDOW_ID, wd.fullscreen, wd.multiwindow_fs, wd.borderless, wd.resizable, wd.maximized, wd.no_focus || wd.is_popup, style, style_ex);
SetWindowLongPtr(wd.hWnd, GWL_STYLE, style);
SetWindowLongPtr(wd.hWnd, GWL_EXSTYLE, style_ex);
- SetWindowPos(wd.hWnd, wd.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | (wd.no_focus ? SWP_NOACTIVATE : 0));
+ SetWindowPos(wd.hWnd, wd.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | ((wd.no_focus || wd.is_popup) ? SWP_NOACTIVATE : 0));
if (p_repaint) {
RECT rect;
@@ -1212,6 +1222,7 @@ void DisplayServerWindows::window_set_flag(WindowFlags p_flag, bool p_enabled, W
wd.borderless = p_enabled;
_update_window_style(p_window);
_update_window_mouse_passthrough(p_window);
+ ShowWindow(wd.hWnd, (wd.no_focus || wd.is_popup) ? SW_SHOWNOACTIVATE : SW_SHOW); // Show the window.
} break;
case WINDOW_FLAG_ALWAYS_ON_TOP: {
ERR_FAIL_COND_MSG(wd.transient_parent != INVALID_WINDOW_ID && p_enabled, "Transient windows can't become on top");
@@ -1225,6 +1236,11 @@ void DisplayServerWindows::window_set_flag(WindowFlags p_flag, bool p_enabled, W
wd.no_focus = p_enabled;
_update_window_style(p_window);
} break;
+ case WINDOW_FLAG_POPUP: {
+ ERR_FAIL_COND_MSG(p_window == MAIN_WINDOW_ID, "Main window can't be popup.");
+ ERR_FAIL_COND_MSG(IsWindowVisible(wd.hWnd) && (wd.is_popup != p_enabled), "Pupup flag can't changed while window is opened.");
+ wd.is_popup = p_enabled;
+ } break;
case WINDOW_FLAG_MAX:
break;
}
@@ -1251,6 +1267,9 @@ bool DisplayServerWindows::window_get_flag(WindowFlags p_flag, WindowID p_window
case WINDOW_FLAG_NO_FOCUS: {
return wd.no_focus;
} break;
+ case WINDOW_FLAG_POPUP: {
+ return wd.is_popup;
+ } break;
case WINDOW_FLAG_MAX:
break;
}
@@ -1279,7 +1298,9 @@ void DisplayServerWindows::window_move_to_foreground(WindowID p_window) {
ERR_FAIL_COND(!windows.has(p_window));
WindowData &wd = windows[p_window];
- SetForegroundWindow(wd.hWnd);
+ if (!wd.no_focus && !wd.is_popup) {
+ SetForegroundWindow(wd.hWnd);
+ }
}
bool DisplayServerWindows::window_can_draw(WindowID p_window) const {
@@ -1326,8 +1347,9 @@ void DisplayServerWindows::window_set_ime_position(const Point2i &p_pos, WindowI
wd.im_position = p_pos;
HIMC himc = ImmGetContext(wd.hWnd);
- if (himc == (HIMC)0)
+ if (himc == (HIMC)0) {
return;
+ }
COMPOSITIONFORM cps;
cps.dwStyle = CFS_FORCE_POSITION;
@@ -1989,33 +2011,145 @@ void DisplayServerWindows::_dispatch_input_event(const Ref<InputEvent> &p_event)
Variant ret;
Callable::CallError ce;
+ {
+ List<WindowID>::Element *E = popup_list.front();
+ if (E && Object::cast_to<InputEventKey>(*p_event)) {
+ // Redirect keyboard input to active popup.
+ if (windows.has(E->get())) {
+ Callable callable = windows[E->get()].input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
+ }
+ }
+ in_dispatch_input_event = false;
+ return;
+ }
+ }
+
Ref<InputEventFromWindow> event_from_window = p_event;
if (event_from_window.is_valid() && event_from_window->get_window_id() != INVALID_WINDOW_ID) {
// Send to a single window.
- if (!windows.has(event_from_window->get_window_id())) {
- in_dispatch_input_event = false;
- ERR_FAIL_MSG("DisplayServerWindows: Invalid window id in input event.");
- }
- Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
- if (callable.is_null()) {
- in_dispatch_input_event = false;
- return;
+ if (windows.has(event_from_window->get_window_id())) {
+ Callable callable = windows[event_from_window->get_window_id()].input_event_callback;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
+ }
}
- callable.call((const Variant **)&evp, 1, ret, ce);
} else {
// Send to all windows.
for (const KeyValue<WindowID, WindowData> &E : windows) {
const Callable callable = E.value.input_event_callback;
- if (callable.is_null()) {
- continue;
+ if (callable.is_valid()) {
+ callable.call((const Variant **)&evp, 1, ret, ce);
}
- callable.call((const Variant **)&evp, 1, ret, ce);
}
}
in_dispatch_input_event = false;
}
+LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam) {
+ DisplayServerWindows *ds_win = static_cast<DisplayServerWindows *>(DisplayServer::get_singleton());
+ if (ds_win) {
+ return ds_win->MouseProc(code, wParam, lParam);
+ } else {
+ return ::CallNextHookEx(nullptr, code, wParam, lParam);
+ }
+}
+
+DisplayServer::WindowID DisplayServerWindows::window_get_active_popup() const {
+ const List<WindowID>::Element *E = popup_list.back();
+ if (E) {
+ return E->get();
+ } else {
+ return INVALID_WINDOW_ID;
+ }
+}
+
+void DisplayServerWindows::window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND(!windows.has(p_window));
+ WindowData &wd = windows[p_window];
+ wd.parent_safe_rect = p_rect;
+}
+
+Rect2i DisplayServerWindows::window_get_popup_safe_rect(WindowID p_window) const {
+ _THREAD_SAFE_METHOD_
+
+ ERR_FAIL_COND_V(!windows.has(p_window), Rect2i());
+ const WindowData &wd = windows[p_window];
+ return wd.parent_safe_rect;
+}
+
+void DisplayServerWindows::popup_open(WindowID p_window) {
+ WindowData &wd = windows[p_window];
+ if (wd.is_popup) {
+ // Close all popups, up to current popup parent, or every popup if new window is not transient.
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ if (wd.transient_parent != E->get() || wd.transient_parent == INVALID_WINDOW_ID) {
+ _send_window_event(windows[E->get()], DisplayServerWindows::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ } else {
+ break;
+ }
+ }
+
+ time_since_popup = OS::get_singleton()->get_ticks_msec();
+ popup_list.push_back(p_window);
+ }
+}
+
+void DisplayServerWindows::popup_close(WindowID p_window) {
+ List<WindowID>::Element *E = popup_list.find(p_window);
+ while (E) {
+ _send_window_event(windows[E->get()], DisplayServerWindows::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->next();
+ popup_list.erase(E);
+ E = F;
+ }
+}
+
+LRESULT DisplayServerWindows::MouseProc(int code, WPARAM wParam, LPARAM lParam) {
+ _THREAD_SAFE_METHOD_
+ uint64_t delta = OS::get_singleton()->get_ticks_msec() - time_since_popup;
+ if (delta > 250) {
+ switch (wParam) {
+ case WM_NCLBUTTONDOWN:
+ case WM_NCRBUTTONDOWN:
+ case WM_NCMBUTTONDOWN:
+ case WM_LBUTTONDOWN:
+ case WM_RBUTTONDOWN:
+ case WM_MBUTTONDOWN: {
+ MOUSEHOOKSTRUCT *ms = (MOUSEHOOKSTRUCT *)lParam;
+ Point2i pos = Point2i(ms->pt.x, ms->pt.y);
+ List<WindowID>::Element *E = popup_list.back();
+ while (E) {
+ // Popup window area.
+ Rect2i win_rect = Rect2i(window_get_position(E->get()), window_get_size(E->get()));
+ // Area of the parent window, which responsible for opening sub-menu.
+ Rect2i safe_rect = window_get_popup_safe_rect(E->get());
+ if (win_rect.has_point(pos)) {
+ break;
+ } else if (safe_rect != Rect2i() && safe_rect.has_point(pos)) {
+ break;
+ } else {
+ _send_window_event(windows[E->get()], DisplayServerWindows::WINDOW_EVENT_CLOSE_REQUEST);
+ List<WindowID>::Element *F = E->prev();
+ popup_list.erase(E);
+ E = F;
+ }
+ }
+
+ } break;
+ }
+ }
+ return ::CallNextHookEx(mouse_monitor, code, wParam, lParam);
+}
+
// Our default window procedure to handle processing of window-related system messages/events.
// Also known as DefProc or DefWindowProc.
// See: https://docs.microsoft.com/en-us/windows/win32/winmsg/window-procedures
@@ -2026,7 +2160,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
} else {
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
}
- };
+ }
WindowID window_id = INVALID_WINDOW_ID;
bool window_created = false;
@@ -2048,6 +2182,13 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
// Process window messages.
switch (uMsg) {
+ case WM_MOUSEACTIVATE: {
+ if (windows[window_id].no_focus) {
+ return MA_NOACTIVATEANDEAT; // Do not activate, and discard mouse messages.
+ } else if (windows[window_id].is_popup) {
+ return MA_NOACTIVATE; // Do not activate, but process mouse messages.
+ }
+ } break;
case WM_SETFOCUS: {
windows[window_id].window_has_focus = true;
last_focused_window = window_id;
@@ -2131,8 +2272,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
case SC_MONITORPOWER: // Monitor trying to enter powersave?
return 0; // Prevent from happening.
case SC_KEYMENU:
- if ((lParam >> 16) <= 0)
+ if ((lParam >> 16) <= 0) {
return 0;
+ }
}
} break;
case WM_CLOSE: // Did we receive a close message?
@@ -2164,8 +2306,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
return 0;
}
- if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
+ if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize) {
OutputDebugString(TEXT("GetRawInputData does not return correct size !\n"));
+ }
RAWINPUT *raw = (RAWINPUT *)lpb;
@@ -2260,8 +2403,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
ScreenToClient(windows[window_id].hWnd, &coords);
// Don't calculate relative mouse movement if we don't have focus in CAPTURED mode.
- if (!windows[window_id].window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED)
+ if (!windows[window_id].window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) {
break;
+ }
Ref<InputEventMouseMotion> mm;
mm.instantiate();
@@ -2306,8 +2450,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm->set_relative(Vector2(mm->get_position() - Vector2(old_x, old_y)));
old_x = mm->get_position().x;
old_y = mm->get_position().y;
- if (windows[window_id].window_has_focus)
+ if (windows[window_id].window_has_focus || window_get_active_popup() == window_id) {
Input::get_singleton()->parse_input_event(mm);
+ }
}
return 0;
}
@@ -2447,7 +2592,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm->set_relative(Vector2(mm->get_position() - Vector2(old_x, old_y)));
old_x = mm->get_position().x;
old_y = mm->get_position().y;
- if (windows[window_id].window_has_focus) {
+ if (windows[window_id].window_has_focus || window_get_active_popup() == window_id) {
Input::get_singleton()->parse_input_event(mm);
}
@@ -2547,8 +2692,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm->set_relative(Vector2(mm->get_position() - Vector2(old_x, old_y)));
old_x = mm->get_position().x;
old_y = mm->get_position().y;
- if (windows[window_id].window_has_focus)
+ if (windows[window_id].window_has_focus || window_get_active_popup() == window_id) {
Input::get_singleton()->parse_input_event(mm);
+ }
} break;
case WM_LBUTTONDOWN:
@@ -2694,8 +2840,9 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
if (uMsg != WM_MOUSEWHEEL && uMsg != WM_MOUSEHWHEEL) {
if (mb->is_pressed()) {
- if (++pressrc > 0 && mouse_mode != MOUSE_MODE_CAPTURED)
+ if (++pressrc > 0 && mouse_mode != MOUSE_MODE_CAPTURED) {
SetCapture(hWnd);
+ }
} else {
if (--pressrc <= 0) {
if (mouse_mode != MOUSE_MODE_CAPTURED) {
@@ -2770,13 +2917,14 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
window.width = window_client_rect.size.width;
window.height = window_client_rect.size.height;
-#if defined(VULKAN_ENABLED)
- if (context_vulkan && window_created) {
- context_vulkan->window_resize(window_id, window.width, window.height);
- }
-#endif
rect_changed = true;
}
+#if defined(VULKAN_ENABLED)
+ if (context_vulkan && window_created) {
+ // Note: Trigger resize event to update swapchains when window is minimized/restored, even if size is not changed.
+ context_vulkan->window_resize(window_id, window.width, window.height);
+ }
+#endif
}
if (!window.minimized && (!(window_pos_params->flags & SWP_NOMOVE) || window_pos_params->flags & SWP_FRAMECHANGED)) {
@@ -2823,14 +2971,17 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
case WM_SYSKEYUP:
case WM_KEYUP:
case WM_KEYDOWN: {
- if (wParam == VK_SHIFT)
+ if (wParam == VK_SHIFT) {
shift_mem = (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN);
- if (wParam == VK_CONTROL)
+ }
+ if (wParam == VK_CONTROL) {
control_mem = (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN);
+ }
if (wParam == VK_MENU) {
alt_mem = (uMsg == WM_KEYDOWN || uMsg == WM_SYSKEYDOWN);
- if (lParam & (1 << 24))
+ if (lParam & (1 << 24)) {
gr_mem = alt_mem;
+ }
}
if (mouse_mode == MOUSE_MODE_CAPTURED) {
@@ -2839,10 +2990,6 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
_send_window_event(windows[window_id], WINDOW_EVENT_CLOSE_REQUEST);
}
}
- /*
- if (wParam==VK_WIN) TODO wtf is this?
- meta_mem=uMsg==WM_KEYDOWN;
- */
[[fallthrough]];
}
case WM_CHAR: {
@@ -2857,10 +3004,12 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
ke.uMsg = uMsg;
ke.window_id = window_id;
- if (ke.uMsg == WM_SYSKEYDOWN)
+ if (ke.uMsg == WM_SYSKEYDOWN) {
ke.uMsg = WM_KEYDOWN;
- if (ke.uMsg == WM_SYSKEYUP)
+ }
+ if (ke.uMsg == WM_SYSKEYUP) {
ke.uMsg = WM_KEYUP;
+ }
ke.wParam = wParam;
ke.lParam = lParam;
@@ -2888,7 +3037,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
_drag_event(window_id, touch_pos.x, touch_pos.y, ti.dwID);
} else if (ti.dwFlags & (TOUCHEVENTF_UP | TOUCHEVENTF_DOWN)) {
_touch_event(window_id, ti.dwFlags & TOUCHEVENTF_DOWN, touch_pos.x, touch_pos.y, ti.dwID);
- };
+ }
}
bHandled = TRUE;
} else {
@@ -2901,7 +3050,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
if (bHandled) {
CloseTouchInputHandle((HTOUCHINPUT)lParam);
return 0;
- };
+ }
} break;
case WM_DEVICECHANGE: {
@@ -2955,8 +3104,8 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
default: {
if (user_proc) {
return CallWindowProcW(user_proc, hWnd, uMsg, wParam, lParam);
- };
- };
+ }
+ }
}
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
@@ -2964,10 +3113,11 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
DisplayServerWindows *ds_win = static_cast<DisplayServerWindows *>(DisplayServer::get_singleton());
- if (ds_win)
+ if (ds_win) {
return ds_win->WndProc(hWnd, uMsg, wParam, lParam);
- else
+ } else {
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
+ }
}
void DisplayServerWindows::_process_activate_event(WindowID p_window_id, WPARAM wParam, LPARAM lParam) {
@@ -3034,8 +3184,9 @@ void DisplayServerWindows::_process_key_events() {
k->set_ctrl_pressed(false);
}
- if (k->get_unicode() < 32)
+ if (k->get_unicode() < 32) {
k->set_unicode(0);
+ }
Input::get_singleton()->parse_input_event(k);
} else {
@@ -3090,8 +3241,9 @@ void DisplayServerWindows::_process_key_events() {
k->set_ctrl_pressed(false);
}
- if (k->get_unicode() < 32)
+ if (k->get_unicode() < 32) {
k->set_unicode(0);
+ }
k->set_echo((ke.uMsg == WM_KEYDOWN && (ke.lParam & (1 << 30))));
@@ -3395,7 +3547,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
wc.cbWndExtra = 0;
wc.hInstance = hInstance ? hInstance : GetModuleHandle(nullptr);
wc.hIcon = LoadIcon(nullptr, IDI_WINLOGO);
- wc.hCursor = nullptr; //LoadCursor(nullptr, IDC_ARROW);
+ wc.hCursor = nullptr;
wc.hbrBackground = nullptr;
wc.lpszMenuName = nullptr;
wc.lpszClassName = L"Engine";
@@ -3446,11 +3598,13 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
return;
}
- // gl_manager->set_use_vsync(current_videomode.use_vsync);
+ //gl_manager->set_use_vsync(current_videomode.use_vsync);
RasterizerGLES3::make_current();
}
#endif
+ HHOOK mouse_monitor = SetWindowsHookEx(WH_MOUSE, ::MouseProc, nullptr, GetCurrentThreadId());
+
Point2i window_position(
(screen_get_size(0).width - p_resolution.width) / 2,
(screen_get_size(0).height - p_resolution.height) / 2);
@@ -3476,14 +3630,13 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
}
#endif
- //set_ime_active(false);
-
if (!OS::get_singleton()->is_in_low_processor_usage_mode()) {
SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS);
DWORD index = 0;
HANDLE handle = AvSetMmThreadCharacteristics("Games", &index);
- if (handle)
+ if (handle) {
AvSetMmThreadPriority(handle, AVRT_PRIORITY_CRITICAL);
+ }
// This is needed to make sure that background work does not starve the main thread.
// This is only setting the priority of this thread, not the whole process.
@@ -3535,12 +3688,16 @@ DisplayServerWindows::~DisplayServerWindows() {
cursors_cache.clear();
+ if (mouse_monitor) {
+ UnhookWindowsHookEx(mouse_monitor);
+ }
+
if (user_proc) {
SetWindowLongPtr(windows[MAIN_WINDOW_ID].hWnd, GWLP_WNDPROC, (LONG_PTR)user_proc);
- };
+ }
#ifdef GLES3_ENABLED
- // destroy windows .. NYI?
+ // destroy windows .. NYI?
#endif
if (windows.has(MAIN_WINDOW_ID)) {
diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h
index 7561f9bb77..a56a2b83ac 100644
--- a/platform/windows/display_server_windows.h
+++ b/platform/windows/display_server_windows.h
@@ -387,9 +387,15 @@ class DisplayServerWindows : public DisplayServer {
WindowID transient_parent = INVALID_WINDOW_ID;
Set<WindowID> transient_children;
+
+ bool is_popup = false;
+ Rect2i parent_safe_rect;
};
JoypadWindows *joypad;
+ HHOOK mouse_monitor = nullptr;
+ List<WindowID> popup_list;
+ uint64_t time_since_popup = 0;
WindowID _create_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect);
WindowID window_id_counter = MAIN_WINDOW_ID;
@@ -440,6 +446,10 @@ class DisplayServerWindows : public DisplayServer {
public:
LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ LRESULT MouseProc(int code, WPARAM wParam, LPARAM lParam);
+
+ void popup_open(WindowID p_window);
+ void popup_close(WindowID p_window);
virtual bool has_feature(Feature p_feature) const override;
virtual String get_name() const override;
@@ -474,6 +484,10 @@ public:
virtual void show_window(WindowID p_window) override;
virtual void delete_sub_window(WindowID p_window) override;
+ virtual WindowID window_get_active_popup() const override;
+ virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect) override;
+ virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const override;
+
virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const override;
virtual WindowID get_window_at_screen_position(const Point2i &p_position) const override;
diff --git a/platform/windows/gl_manager_windows.cpp b/platform/windows/gl_manager_windows.cpp
index 74b5f48502..a97fa99d7f 100644
--- a/platform/windows/gl_manager_windows.cpp
+++ b/platform/windows/gl_manager_windows.cpp
@@ -56,14 +56,9 @@ typedef HGLRC(APIENTRY *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC, HGLRC, const int
int GLManager_Windows::_find_or_create_display(GLWindow &win) {
// find display NYI, only 1 supported so far
- if (_displays.size())
+ if (_displays.size()) {
return 0;
-
- // for (unsigned int n = 0; n < _displays.size(); n++) {
- // const GLDisplay &d = _displays[n];
- // if (d.x11_display == p_x11_display)
- // return n;
- // }
+ }
// create
GLDisplay d_temp = {};
@@ -230,23 +225,27 @@ void GLManager_Windows::window_destroy(DisplayServer::WindowID p_window_id) {
}
void GLManager_Windows::release_current() {
- if (!_current_window)
+ if (!_current_window) {
return;
+ }
wglMakeCurrent(_current_window->hDC, nullptr);
}
void GLManager_Windows::window_make_current(DisplayServer::WindowID p_window_id) {
- if (p_window_id == -1)
+ if (p_window_id == -1) {
return;
+ }
GLWindow &win = _windows[p_window_id];
- if (!win.in_use)
+ if (!win.in_use) {
return;
+ }
// noop
- if (&win == _current_window)
+ if (&win == _current_window) {
return;
+ }
const GLDisplay &disp = get_display(win.gldisplay_id);
wglMakeCurrent(win.hDC, disp.hRC);
@@ -255,8 +254,9 @@ void GLManager_Windows::window_make_current(DisplayServer::WindowID p_window_id)
}
void GLManager_Windows::make_current() {
- if (!_current_window)
+ if (!_current_window) {
return;
+ }
if (!_current_window->in_use) {
WARN_PRINT("current window not in use!");
return;
@@ -269,8 +269,9 @@ void GLManager_Windows::swap_buffers() {
// NO NEED TO CALL SWAP BUFFERS for each window...
// see https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glXSwapBuffers.xml
- if (!_current_window)
+ if (!_current_window) {
return;
+ }
if (!_current_window->in_use) {
WARN_PRINT("current window not in use!");
return;
@@ -304,12 +305,15 @@ void GLManager_Windows::set_use_vsync(bool p_use) {
if (!setup) {
setup = true;
String extensions = glXQueryExtensionsString(x11_display, DefaultScreen(x11_display));
- if (extensions.find("GLX_EXT_swap_control") != -1)
+ if (extensions.find("GLX_EXT_swap_control") != -1) {
glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalEXT");
- if (extensions.find("GLX_MESA_swap_control") != -1)
+ }
+ if (extensions.find("GLX_MESA_swap_control") != -1) {
glXSwapIntervalMESA = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalMESA");
- if (extensions.find("GLX_SGI_swap_control") != -1)
+ }
+ if (extensions.find("GLX_SGI_swap_control") != -1) {
glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddressARB((const GLubyte *)"glXSwapIntervalSGI");
+ }
}
int val = p_use ? 1 : 0;
if (glXSwapIntervalMESA) {
@@ -319,8 +323,9 @@ void GLManager_Windows::set_use_vsync(bool p_use) {
} else if (glXSwapIntervalEXT) {
GLXDrawable drawable = glXGetCurrentDrawable();
glXSwapIntervalEXT(x11_display, drawable, val);
- } else
+ } else {
return;
+ }
use_vsync = p_use;
*/
}
diff --git a/platform/windows/godot_windows.cpp b/platform/windows/godot_windows.cpp
index 618d5670d2..ad4e3ae77c 100644
--- a/platform/windows/godot_windows.cpp
+++ b/platform/windows/godot_windows.cpp
@@ -163,8 +163,9 @@ int widechar_main(int argc, wchar_t **argv) {
return 255;
}
- if (Main::start())
+ if (Main::start()) {
os.run();
+ }
Main::cleanup();
for (int i = 0; i < argc; ++i) {
@@ -173,7 +174,7 @@ int widechar_main(int argc, wchar_t **argv) {
delete[] argv_utf8;
return os.get_exit_code();
-};
+}
int _main() {
LPWSTR *wc_argv;
diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp
index b0dd86a4b7..494e0b9105 100644
--- a/platform/windows/joypad_windows.cpp
+++ b/platform/windows/joypad_windows.cpp
@@ -60,8 +60,9 @@ JoypadWindows::JoypadWindows(HWND *hwnd) {
load_xinput();
- for (int i = 0; i < JOYPADS_MAX; i++)
+ for (int i = 0; i < JOYPADS_MAX; i++) {
attached_joypads[i] = false;
+ }
HRESULT result = DirectInput8Create(GetModuleHandle(nullptr), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&dinput, nullptr);
if (result == DI_OK) {
@@ -144,8 +145,9 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) {
HRESULT hr;
int num = input->get_unused_joy_id();
- if (have_device(instance->guidInstance) || num == -1)
+ if (have_device(instance->guidInstance) || num == -1) {
return false;
+ }
d_joypads[num] = dinput_gamepad();
dinput_gamepad *joy = &d_joypads[num];
@@ -196,27 +198,28 @@ void JoypadWindows::setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_
DIPROPRANGE prop_range;
DIPROPDWORD dilong;
LONG ofs;
- if (ob->guidType == GUID_XAxis)
+ if (ob->guidType == GUID_XAxis) {
ofs = DIJOFS_X;
- else if (ob->guidType == GUID_YAxis)
+ } else if (ob->guidType == GUID_YAxis) {
ofs = DIJOFS_Y;
- else if (ob->guidType == GUID_ZAxis)
+ } else if (ob->guidType == GUID_ZAxis) {
ofs = DIJOFS_Z;
- else if (ob->guidType == GUID_RxAxis)
+ } else if (ob->guidType == GUID_RxAxis) {
ofs = DIJOFS_RX;
- else if (ob->guidType == GUID_RyAxis)
+ } else if (ob->guidType == GUID_RyAxis) {
ofs = DIJOFS_RY;
- else if (ob->guidType == GUID_RzAxis)
+ } else if (ob->guidType == GUID_RzAxis) {
ofs = DIJOFS_RZ;
- else if (ob->guidType == GUID_Slider) {
+ } else if (ob->guidType == GUID_Slider) {
if (slider_count < 2) {
ofs = DIJOFS_SLIDER(slider_count);
slider_count++;
} else {
return;
}
- } else
+ } else {
return;
+ }
prop_range.diph.dwSize = sizeof(DIPROPRANGE);
prop_range.diph.dwHeaderSize = sizeof(DIPROPHEADER);
prop_range.diph.dwObj = ob->dwType;
@@ -227,8 +230,9 @@ void JoypadWindows::setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_
dinput_gamepad &joy = d_joypads[p_joy_id];
res = IDirectInputDevice8_SetProperty(joy.di_joy, DIPROP_RANGE, &prop_range.diph);
- if (FAILED(res))
+ if (FAILED(res)) {
return;
+ }
dilong.diph.dwSize = sizeof(dilong);
dilong.diph.dwHeaderSize = sizeof(dilong.diph);
@@ -237,8 +241,9 @@ void JoypadWindows::setup_joypad_object(const DIDEVICEOBJECTINSTANCE *ob, int p_
dilong.dwData = 0;
res = IDirectInputDevice8_SetProperty(joy.di_joy, DIPROP_DEADZONE, &dilong.diph);
- if (FAILED(res))
+ if (FAILED(res)) {
return;
+ }
joy.joy_axis.push_back(ofs);
}
@@ -268,8 +273,9 @@ void JoypadWindows::close_joypad(int id) {
return;
}
- if (!d_joypads[id].attached)
+ if (!d_joypads[id].attached) {
return;
+ }
d_joypads[id].di_joy->Unacquire();
d_joypads[id].di_joy->Release();
@@ -355,16 +361,18 @@ void JoypadWindows::process_joypads() {
}
} else if (joy.vibrating && joy.ff_end_timestamp != 0) {
uint64_t current_time = OS::get_singleton()->get_ticks_usec();
- if (current_time >= joy.ff_end_timestamp)
+ if (current_time >= joy.ff_end_timestamp) {
joypad_vibration_stop_xinput(i, current_time);
+ }
}
}
for (int i = 0; i < JOYPADS_MAX; i++) {
dinput_gamepad *joy = &d_joypads[i];
- if (!joy->attached)
+ if (!joy->attached) {
continue;
+ }
DIJOYSTATE2 js;
hr = joy->di_joy->Poll();
@@ -404,9 +412,9 @@ void JoypadWindows::process_joypads() {
if (joy->joy_axis[j] == axes[k]) {
input->joy_axis(joy->id, (JoyAxis)j, axis_correct(values[k]));
break;
- };
- };
- };
+ }
+ }
+ }
}
return;
}
@@ -446,7 +454,7 @@ void JoypadWindows::post_hat(int p_device, DWORD p_dpad) {
dpad_val = (HatMask)(HatMask::LEFT | HatMask::UP);
}
input->joy_hat(p_device, dpad_val);
-};
+}
float JoypadWindows::axis_correct(int p_val, bool p_xinput, bool p_trigger, bool p_negate) const {
if (Math::abs(p_val) < MIN_JOY_AXIS) {
diff --git a/platform/windows/joypad_windows.h b/platform/windows/joypad_windows.h
index 0e3d03fa52..4f15bcf080 100644
--- a/platform/windows/joypad_windows.h
+++ b/platform/windows/joypad_windows.h
@@ -86,8 +86,9 @@ private:
attached = false;
confirmed = false;
- for (int i = 0; i < MAX_JOY_BUTTONS; i++)
+ for (int i = 0; i < MAX_JOY_BUTTONS; i++) {
last_buttons[i] = false;
+ }
}
};
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 59f55b5dd2..13e3aa7883 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -107,8 +107,9 @@ void RedirectIOToConsole() {
}
BOOL WINAPI HandlerRoutine(_In_ DWORD dwCtrlType) {
- if (!EngineDebugger::is_active())
+ if (!EngineDebugger::is_active()) {
return FALSE;
+ }
switch (dwCtrlType) {
case CTRL_C_EVENT:
@@ -166,8 +167,9 @@ void OS_Windows::initialize() {
}
void OS_Windows::delete_main_loop() {
- if (main_loop)
+ if (main_loop) {
memdelete(main_loop);
+ }
main_loop = nullptr;
}
@@ -180,8 +182,9 @@ void OS_Windows::finalize() {
driver_midi.close();
#endif
- if (main_loop)
+ if (main_loop) {
memdelete(main_loop);
+ }
main_loop = nullptr;
}
@@ -288,8 +291,9 @@ OS::Time OS_Windows::get_time(bool p_utc) const {
OS::TimeZoneInfo OS_Windows::get_time_zone_info() const {
TIME_ZONE_INFORMATION info;
bool daylight = false;
- if (GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT)
+ if (GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT) {
daylight = true;
+ }
TimeZoneInfo ret;
if (daylight) {
@@ -322,10 +326,11 @@ double OS_Windows::get_unix_time() const {
}
void OS_Windows::delay_usec(uint32_t p_usec) const {
- if (p_usec < 1000)
+ if (p_usec < 1000) {
Sleep(1);
- else
+ } else {
Sleep(p_usec / 1000);
+ }
}
uint64_t OS_Windows::get_ticks_usec() const {
@@ -430,7 +435,7 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments,
if (p_pipe_mutex) {
p_pipe_mutex->unlock();
}
- };
+ }
CloseHandle(pipe[0]); // Close pipe read handle.
} else {
WaitForSingleObject(pi.pi.hProcess, INFINITE);
@@ -446,7 +451,7 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments,
CloseHandle(pi.pi.hThread);
return OK;
-};
+}
Error OS_Windows::create_process(const String &p_path, const List<String> &p_arguments, ProcessID *r_child_id, bool p_open_console) {
String path = p_path.replace("/", "\\");
@@ -478,7 +483,7 @@ Error OS_Windows::create_process(const String &p_path, const List<String> &p_arg
process_map->insert(pid, pi);
return OK;
-};
+}
Error OS_Windows::kill(const ProcessID &p_pid) {
ERR_FAIL_COND_V(!process_map->has(p_pid), FAILED);
@@ -492,15 +497,16 @@ Error OS_Windows::kill(const ProcessID &p_pid) {
CloseHandle(pi.hThread);
return ret != 0 ? OK : FAILED;
-};
+}
int OS_Windows::get_process_id() const {
return _getpid();
}
Error OS_Windows::set_cwd(const String &p_cwd) {
- if (_wchdir((LPCWSTR)(p_cwd.utf16().get_data())) != 0)
+ if (_wchdir((LPCWSTR)(p_cwd.utf16().get_data())) != 0) {
return ERR_CANT_OPEN;
+ }
return OK;
}
@@ -523,7 +529,7 @@ bool OS_Windows::has_environment(const String &p_var) const {
free(env);
return has_env;
#endif
-};
+}
String OS_Windows::get_environment(const String &p_var) const {
WCHAR wval[0x7fff]; // MSDN says 32767 char is the maximum
@@ -542,7 +548,7 @@ String OS_Windows::get_stdin_string(bool p_block) {
if (p_block) {
char buff[1024];
return fgets(buff, 1024, stdin);
- };
+ }
return String();
}
@@ -580,17 +586,20 @@ String OS_Windows::get_locale() const {
int sublang = SUBLANGID(langid);
while (wl->locale) {
- if (wl->main_lang == lang && wl->sublang == SUBLANG_NEUTRAL)
+ if (wl->main_lang == lang && wl->sublang == SUBLANG_NEUTRAL) {
neutral = wl->locale;
+ }
- if (lang == wl->main_lang && sublang == wl->sublang)
+ if (lang == wl->main_lang && sublang == wl->sublang) {
return String(wl->locale).replace("-", "_");
+ }
wl++;
}
- if (!neutral.is_empty())
+ if (!neutral.is_empty()) {
return String(neutral).replace("-", "_");
+ }
return "en";
}
@@ -617,25 +626,48 @@ BOOL is_wow64() {
int OS_Windows::get_processor_count() const {
SYSTEM_INFO sysinfo;
- if (is_wow64())
+ if (is_wow64()) {
GetNativeSystemInfo(&sysinfo);
- else
+ } else {
GetSystemInfo(&sysinfo);
+ }
return sysinfo.dwNumberOfProcessors;
}
+String OS_Windows::get_processor_name() const {
+ const String id = "Hardware\\Description\\System\\CentralProcessor\\0";
+
+ HKEY hkey;
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, (LPCWSTR)(id.utf16().get_data()), 0, KEY_QUERY_VALUE, &hkey) != ERROR_SUCCESS) {
+ ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name. Returning an empty string."));
+ }
+
+ WCHAR buffer[256];
+ DWORD buffer_len = 256;
+ DWORD vtype = REG_SZ;
+ if (RegQueryValueExW(hkey, L"ProcessorNameString", NULL, &vtype, (LPBYTE)buffer, &buffer_len) == ERROR_SUCCESS) {
+ RegCloseKey(hkey);
+ return String::utf16((const char16_t *)buffer, buffer_len).strip_edges();
+ } else {
+ RegCloseKey(hkey);
+ ERR_FAIL_V_MSG("", String("Couldn't get the CPU model name. Returning an empty string."));
+ }
+}
+
void OS_Windows::run() {
- if (!main_loop)
+ if (!main_loop) {
return;
+ }
main_loop->initialize();
while (!force_quit) {
DisplayServer::get_singleton()->process_events(); // get rid of pending events
- if (Main::iteration())
+ if (Main::iteration()) {
break;
- };
+ }
+ }
main_loop->finalize();
}
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index bde663a27b..5bfd24327e 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -142,6 +142,7 @@ public:
virtual String get_locale() const override;
virtual int get_processor_count() const override;
+ virtual String get_processor_name() const override;
virtual String get_config_path() const override;
virtual String get_data_path() const override;
diff --git a/platform/windows/windows_terminal_logger.cpp b/platform/windows/windows_terminal_logger.cpp
index 0d5f0e617c..df21977698 100644
--- a/platform/windows/windows_terminal_logger.cpp
+++ b/platform/windows/windows_terminal_logger.cpp
@@ -44,25 +44,29 @@ void WindowsTerminalLogger::logv(const char *p_format, va_list p_list, bool p_er
const unsigned int BUFFER_SIZE = 16384;
char buf[BUFFER_SIZE + 1]; // +1 for the terminating character
int len = vsnprintf(buf, BUFFER_SIZE, p_format, p_list);
- if (len <= 0)
+ if (len <= 0) {
return;
- if ((unsigned int)len >= BUFFER_SIZE)
+ }
+ if ((unsigned int)len >= BUFFER_SIZE) {
len = BUFFER_SIZE; // Output is too big, will be truncated
+ }
buf[len] = 0;
int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, nullptr, 0);
- if (wlen < 0)
+ if (wlen < 0) {
return;
+ }
wchar_t *wbuf = (wchar_t *)memalloc((len + 1) * sizeof(wchar_t));
ERR_FAIL_NULL_MSG(wbuf, "Out of memory.");
MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen);
wbuf[wlen] = 0;
- if (p_err)
+ if (p_err) {
fwprintf(stderr, L"%ls", wbuf);
- else
+ } else {
wprintf(L"%ls", wbuf);
+ }
memfree(wbuf);
diff --git a/scene/2d/animated_sprite_2d.cpp b/scene/2d/animated_sprite_2d.cpp
index 2d05d46342..257e334873 100644
--- a/scene/2d/animated_sprite_2d.cpp
+++ b/scene/2d/animated_sprite_2d.cpp
@@ -158,14 +158,14 @@ void AnimatedSprite2D::_notification(int p_what) {
return;
}
- double speed = frames->get_animation_speed(animation) * speed_scale;
- if (speed == 0) {
- return; //do nothing
- }
-
double remaining = get_process_delta_time();
while (remaining) {
+ double speed = frames->get_animation_speed(animation) * speed_scale;
+ if (speed == 0) {
+ return; // Do nothing.
+ }
+
if (timeout <= 0) {
timeout = _get_frame_duration();
diff --git a/scene/2d/joint_2d.cpp b/scene/2d/joint_2d.cpp
index 0467c39746..c2773191ea 100644
--- a/scene/2d/joint_2d.cpp
+++ b/scene/2d/joint_2d.cpp
@@ -128,7 +128,7 @@ void Joint2D::set_node_a(const NodePath &p_node_a) {
return;
}
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
}
@@ -145,7 +145,7 @@ void Joint2D::set_node_b(const NodePath &p_node_b) {
return;
}
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
}
@@ -159,15 +159,18 @@ NodePath Joint2D::get_node_b() const {
void Joint2D::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_READY: {
+ case NOTIFICATION_POST_ENTER_TREE: {
+ if (is_configured()) {
+ _disconnect_signals();
+ }
_update_joint();
} break;
case NOTIFICATION_EXIT_TREE: {
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
- _update_joint(true);
}
+ _update_joint(true);
} break;
}
}
@@ -187,7 +190,9 @@ void Joint2D::set_exclude_nodes_from_collision(bool p_enable) {
if (exclude_from_collision == p_enable) {
return;
}
-
+ if (is_configured()) {
+ _disconnect_signals();
+ }
_update_joint(true);
exclude_from_collision = p_enable;
_update_joint();
diff --git a/scene/2d/line_2d.cpp b/scene/2d/line_2d.cpp
index 312ba0272e..2716bb2e25 100644
--- a/scene/2d/line_2d.cpp
+++ b/scene/2d/line_2d.cpp
@@ -247,10 +247,7 @@ float Line2D::get_sharp_limit() const {
}
void Line2D::set_round_precision(int p_precision) {
- if (p_precision < 1) {
- p_precision = 1;
- }
- _round_precision = p_precision;
+ _round_precision = MAX(1, p_precision);
update();
}
@@ -409,7 +406,7 @@ void Line2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "end_cap_mode", PROPERTY_HINT_ENUM, "None,Box,Round"), "set_end_cap_mode", "get_end_cap_mode");
ADD_GROUP("Border", "");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "sharp_limit"), "set_sharp_limit", "get_sharp_limit");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "round_precision"), "set_round_precision", "get_round_precision");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "round_precision", PROPERTY_HINT_RANGE, "1,32,1"), "set_round_precision", "get_round_precision");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "antialiased"), "set_antialiased", "get_antialiased");
BIND_ENUM_CONSTANT(LINE_JOINT_SHARP);
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index a4ad0a8d99..eb4d9d6445 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -1168,7 +1168,7 @@ bool CharacterBody2D::move_and_slide() {
if (moving_platform_apply_velocity_on_leave == PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY && current_platform_velocity.dot(up_direction) < 0) {
current_platform_velocity = current_platform_velocity.slide(up_direction);
}
- motion_velocity += current_platform_velocity;
+ velocity += current_platform_velocity;
}
}
@@ -1176,7 +1176,7 @@ bool CharacterBody2D::move_and_slide() {
}
void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_floor) {
- Vector2 motion = motion_velocity * p_delta;
+ Vector2 motion = velocity * p_delta;
Vector2 motion_slide_up = motion.slide(up_direction);
Vector2 prev_floor_normal = floor_normal;
@@ -1194,7 +1194,7 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// If the platform's ceiling push down the body.
bool apply_ceiling_velocity = false;
bool first_slide = true;
- bool vel_dir_facing_up = motion_velocity.dot(up_direction) > 0;
+ bool vel_dir_facing_up = velocity.dot(up_direction) > 0;
Vector2 last_travel;
for (int iteration = 0; iteration < max_slides; ++iteration) {
@@ -1211,26 +1211,26 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
motion_results.push_back(result);
_set_collision_direction(result);
- // If we hit a ceiling platform, we set the vertical motion_velocity to at least the platform one.
+ // If we hit a ceiling platform, we set the vertical velocity to at least the platform one.
if (on_ceiling && result.collider_velocity != Vector2() && result.collider_velocity.dot(up_direction) < 0) {
// If ceiling sliding is on, only apply when the ceiling is flat or when the motion is upward.
if (!slide_on_ceiling || motion.dot(up_direction) < 0 || (result.collision_normal + up_direction).length() < 0.01) {
apply_ceiling_velocity = true;
Vector2 ceiling_vertical_velocity = up_direction * up_direction.dot(result.collider_velocity);
- Vector2 motion_vertical_velocity = up_direction * up_direction.dot(motion_velocity);
+ Vector2 motion_vertical_velocity = up_direction * up_direction.dot(velocity);
if (motion_vertical_velocity.dot(up_direction) > 0 || ceiling_vertical_velocity.length_squared() > motion_vertical_velocity.length_squared()) {
- motion_velocity = ceiling_vertical_velocity + motion_velocity.slide(up_direction);
+ velocity = ceiling_vertical_velocity + velocity.slide(up_direction);
}
}
}
- if (on_floor && floor_stop_on_slope && (motion_velocity.normalized() + up_direction).length() < 0.01) {
+ if (on_floor && floor_stop_on_slope && (velocity.normalized() + up_direction).length() < 0.01) {
Transform2D gt = get_global_transform();
if (result.travel.length() <= margin + CMP_EPSILON) {
gt.elements[2] -= result.travel;
}
set_global_transform(gt);
- motion_velocity = Vector2();
+ velocity = Vector2();
last_motion = Vector2();
motion = Vector2();
break;
@@ -1254,7 +1254,7 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
}
// Determines if you are on the ground.
_snap_on_floor(true, false);
- motion_velocity = Vector2();
+ velocity = Vector2();
last_motion = Vector2();
motion = Vector2();
break;
@@ -1276,7 +1276,7 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Regular sliding, the last part of the test handle the case when you don't want to slide on the ceiling.
else if ((sliding_enabled || !on_floor) && (!on_ceiling || slide_on_ceiling || !vel_dir_facing_up) && !apply_ceiling_velocity) {
Vector2 slide_motion = result.remainder.slide(result.collision_normal);
- if (slide_motion.dot(motion_velocity) > 0.0) {
+ if (slide_motion.dot(velocity) > 0.0) {
motion = slide_motion;
} else {
motion = Vector2();
@@ -1284,10 +1284,10 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
if (slide_on_ceiling && on_ceiling) {
// Apply slide only in the direction of the input motion, otherwise just stop to avoid jittering when moving against a wall.
if (vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(result.collision_normal);
+ velocity = velocity.slide(result.collision_normal);
} else {
// Avoid acceleration in slope when falling.
- motion_velocity = up_direction * up_direction.dot(motion_velocity);
+ velocity = up_direction * up_direction.dot(velocity);
}
}
}
@@ -1295,7 +1295,7 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
else {
motion = result.remainder;
if (on_ceiling && !slide_on_ceiling && vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(up_direction);
+ velocity = velocity.slide(up_direction);
motion = motion.slide(up_direction);
}
}
@@ -1329,23 +1329,23 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Scales the horizontal velocity according to the wall slope.
if (is_on_wall_only() && motion_slide_up.dot(motion_results.get(0).collision_normal) < 0) {
- Vector2 slide_motion = motion_velocity.slide(motion_results.get(0).collision_normal);
+ Vector2 slide_motion = velocity.slide(motion_results.get(0).collision_normal);
if (motion_slide_up.dot(slide_motion) < 0) {
- motion_velocity = up_direction * up_direction.dot(motion_velocity);
+ velocity = up_direction * up_direction.dot(velocity);
} else {
- // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
- motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
+ // Keeps the vertical motion from velocity and add the horizontal motion of the projection.
+ velocity = up_direction * up_direction.dot(velocity) + slide_motion.slide(up_direction);
}
}
// Reset the gravity accumulation when touching the ground.
if (on_floor && !vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(up_direction);
+ velocity = velocity.slide(up_direction);
}
}
void CharacterBody2D::_move_and_slide_floating(double p_delta) {
- Vector2 motion = motion_velocity * p_delta;
+ Vector2 motion = velocity * p_delta;
platform_rid = RID();
platform_object_id = ObjectID();
@@ -1370,7 +1370,7 @@ void CharacterBody2D::_move_and_slide_floating(double p_delta) {
break;
}
- if (wall_min_slide_angle != 0 && result.get_angle(-motion_velocity.normalized()) < wall_min_slide_angle + FLOOR_ANGLE_THRESHOLD) {
+ if (wall_min_slide_angle != 0 && result.get_angle(-velocity.normalized()) < wall_min_slide_angle + FLOOR_ANGLE_THRESHOLD) {
motion = Vector2();
} else if (first_slide) {
Vector2 motion_slide_norm = result.remainder.slide(result.collision_normal).normalized();
@@ -1379,7 +1379,7 @@ void CharacterBody2D::_move_and_slide_floating(double p_delta) {
motion = result.remainder.slide(result.collision_normal);
}
- if (motion.dot(motion_velocity) <= 0.0) {
+ if (motion.dot(velocity) <= 0.0) {
motion = Vector2();
}
}
@@ -1471,12 +1471,12 @@ void CharacterBody2D::_set_platform_data(const PhysicsServer2D::MotionResult &p_
platform_layer = PhysicsServer2D::get_singleton()->body_get_collision_layer(platform_rid);
}
-const Vector2 &CharacterBody2D::get_motion_velocity() const {
- return motion_velocity;
+const Vector2 &CharacterBody2D::get_velocity() const {
+ return velocity;
}
-void CharacterBody2D::set_motion_velocity(const Vector2 &p_velocity) {
- motion_velocity = p_velocity;
+void CharacterBody2D::set_velocity(const Vector2 &p_velocity) {
+ velocity = p_velocity;
}
bool CharacterBody2D::is_on_floor() const {
@@ -1697,8 +1697,8 @@ void CharacterBody2D::_notification(int p_what) {
void CharacterBody2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("move_and_slide"), &CharacterBody2D::move_and_slide);
- ClassDB::bind_method(D_METHOD("set_motion_velocity", "motion_velocity"), &CharacterBody2D::set_motion_velocity);
- ClassDB::bind_method(D_METHOD("get_motion_velocity"), &CharacterBody2D::get_motion_velocity);
+ ClassDB::bind_method(D_METHOD("set_velocity", "velocity"), &CharacterBody2D::set_velocity);
+ ClassDB::bind_method(D_METHOD("get_velocity"), &CharacterBody2D::get_velocity);
ClassDB::bind_method(D_METHOD("set_safe_margin", "pixels"), &CharacterBody2D::set_safe_margin);
ClassDB::bind_method(D_METHOD("get_safe_margin"), &CharacterBody2D::get_safe_margin);
@@ -1750,7 +1750,7 @@ void CharacterBody2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "motion_mode", PROPERTY_HINT_ENUM, "Grounded,Floating", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_motion_mode", "get_motion_mode");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "up_direction"), "set_up_direction", "get_up_direction");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_motion_velocity", "get_motion_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_velocity", "get_velocity");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_ceiling"), "set_slide_on_ceiling_enabled", "is_slide_on_ceiling_enabled");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_slides", "get_max_slides");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wall_min_slide_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians", PROPERTY_USAGE_DEFAULT), "set_wall_min_slide_angle", "get_wall_min_slide_angle");
diff --git a/scene/2d/physics_body_2d.h b/scene/2d/physics_body_2d.h
index cfaa2570fb..8d9e31d4dd 100644
--- a/scene/2d/physics_body_2d.h
+++ b/scene/2d/physics_body_2d.h
@@ -337,8 +337,8 @@ public:
};
bool move_and_slide();
- const Vector2 &get_motion_velocity() const;
- void set_motion_velocity(const Vector2 &p_velocity);
+ const Vector2 &get_velocity() const;
+ void set_velocity(const Vector2 &p_velocity);
bool is_on_floor() const;
bool is_on_floor_only() const;
@@ -378,7 +378,7 @@ private:
Vector2 up_direction = Vector2(0.0, -1.0);
uint32_t moving_platform_floor_layers = UINT32_MAX;
uint32_t moving_platform_wall_layers = 0;
- Vector2 motion_velocity;
+ Vector2 velocity;
Vector2 floor_normal;
Vector2 platform_velocity;
diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp
index 1f4dec6864..1fe4adb4db 100644
--- a/scene/2d/polygon_2d.cpp
+++ b/scene/2d/polygon_2d.cpp
@@ -428,15 +428,6 @@ Vector<Color> Polygon2D::get_vertex_colors() const {
void Polygon2D::set_texture(const Ref<Texture2D> &p_texture) {
texture = p_texture;
-
- /*if (texture.is_valid()) {
- uint32_t flags=texture->get_flags();
- flags&=~Texture::FLAG_REPEAT;
- if (tex_tile)
- flags|=Texture::FLAG_REPEAT;
-
- texture->set_flags(flags);
- }*/
update();
}
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index 0d50d7f8d6..db33e6561a 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -1997,6 +1997,10 @@ void TileMap::set_cell(int p_layer, const Vector2i &p_coords, int p_source_id, c
}
}
+void TileMap::erase_cell(int p_layer, const Vector2i &p_coords) {
+ set_cell(p_layer, p_coords, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE);
+}
+
int TileMap::get_cell_source_id(int p_layer, const Vector2i &p_coords, bool p_use_proxies) const {
ERR_FAIL_INDEX_V(p_layer, (int)layers.size(), TileSet::INVALID_SOURCE);
@@ -3622,7 +3626,8 @@ void TileMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_visibility_mode", "navigation_visibility_mode"), &TileMap::set_navigation_visibility_mode);
ClassDB::bind_method(D_METHOD("get_navigation_visibility_mode"), &TileMap::get_navigation_visibility_mode);
- ClassDB::bind_method(D_METHOD("set_cell", "layer", "coords", "source_id", "atlas_coords", "alternative_tile"), &TileMap::set_cell, DEFVAL(TileSet::INVALID_SOURCE), DEFVAL(TileSetSource::INVALID_ATLAS_COORDS), DEFVAL(TileSetSource::INVALID_TILE_ALTERNATIVE));
+ ClassDB::bind_method(D_METHOD("set_cell", "layer", "coords", "source_id", "atlas_coords", "alternative_tile"), &TileMap::set_cell, DEFVAL(TileSet::INVALID_SOURCE), DEFVAL(TileSetSource::INVALID_ATLAS_COORDS), DEFVAL(0));
+ ClassDB::bind_method(D_METHOD("erase_cell", "layer", "coords"), &TileMap::erase_cell);
ClassDB::bind_method(D_METHOD("get_cell_source_id", "layer", "coords", "use_proxies"), &TileMap::get_cell_source_id);
ClassDB::bind_method(D_METHOD("get_cell_atlas_coords", "layer", "coords", "use_proxies"), &TileMap::get_cell_atlas_coords);
ClassDB::bind_method(D_METHOD("get_cell_alternative_tile", "layer", "coords", "use_proxies"), &TileMap::get_cell_alternative_tile);
diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h
index 0da04bfeae..a0655dea2a 100644
--- a/scene/2d/tile_map.h
+++ b/scene/2d/tile_map.h
@@ -321,7 +321,8 @@ public:
VisibilityMode get_navigation_visibility_mode();
// Cells accessors.
- void set_cell(int p_layer, const Vector2i &p_coords, int p_source_id = -1, const Vector2i p_atlas_coords = TileSetSource::INVALID_ATLAS_COORDS, int p_alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE);
+ void set_cell(int p_layer, const Vector2i &p_coords, int p_source_id = -1, const Vector2i p_atlas_coords = TileSetSource::INVALID_ATLAS_COORDS, int p_alternative_tile = 0);
+ void erase_cell(int p_layer, const Vector2i &p_coords);
int get_cell_source_id(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
Vector2i get_cell_atlas_coords(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
int get_cell_alternative_tile(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;
diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp
index 375692d049..4eace17cc0 100644
--- a/scene/3d/camera_3d.cpp
+++ b/scene/3d/camera_3d.cpp
@@ -82,12 +82,6 @@ void Camera3D::_update_camera() {
RenderingServer::get_singleton()->camera_set_transform(camera, get_camera_transform());
- // here goes listener stuff
- /*
- if (viewport_ptr && is_inside_scene() && is_current())
- get_viewport()->_camera_3d_transform_changed_notify();
- */
-
if (get_tree()->is_node_being_edited(this) || !is_current()) {
return;
}
diff --git a/scene/3d/joint_3d.cpp b/scene/3d/joint_3d.cpp
index 36abd0a5c5..ce7c0d8292 100644
--- a/scene/3d/joint_3d.cpp
+++ b/scene/3d/joint_3d.cpp
@@ -124,7 +124,7 @@ void Joint3D::set_node_a(const NodePath &p_node_a) {
return;
}
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
}
@@ -141,7 +141,7 @@ void Joint3D::set_node_b(const NodePath &p_node_b) {
return;
}
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
}
@@ -166,15 +166,18 @@ int Joint3D::get_solver_priority() const {
void Joint3D::_notification(int p_what) {
switch (p_what) {
- case NOTIFICATION_READY: {
+ case NOTIFICATION_POST_ENTER_TREE: {
+ if (is_configured()) {
+ _disconnect_signals();
+ }
_update_joint();
} break;
case NOTIFICATION_EXIT_TREE: {
- if (joint.is_valid()) {
+ if (is_configured()) {
_disconnect_signals();
- _update_joint(true);
}
+ _update_joint(true);
} break;
}
}
@@ -183,6 +186,10 @@ void Joint3D::set_exclude_nodes_from_collision(bool p_enable) {
if (exclude_from_collision == p_enable) {
return;
}
+ if (is_configured()) {
+ _disconnect_signals();
+ }
+ _update_joint(true);
exclude_from_collision = p_enable;
_update_joint();
}
diff --git a/scene/3d/occluder_instance_3d.cpp b/scene/3d/occluder_instance_3d.cpp
index 2488bfb8ba..855922c341 100644
--- a/scene/3d/occluder_instance_3d.cpp
+++ b/scene/3d/occluder_instance_3d.cpp
@@ -192,7 +192,6 @@ void QuadOccluder3D::set_size(const Vector2 &p_size) {
}
size = p_size.max(Vector2());
- ;
_update();
}
@@ -237,7 +236,6 @@ void BoxOccluder3D::set_size(const Vector3 &p_size) {
}
size = Vector3(MAX(p_size.x, 0.0f), MAX(p_size.y, 0.0f), MAX(p_size.z, 0.0f));
- ;
_update();
}
diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp
index c6d7e1df86..25411e54c0 100644
--- a/scene/3d/physics_body_3d.cpp
+++ b/scene/3d/physics_body_3d.cpp
@@ -1169,7 +1169,7 @@ bool CharacterBody3D::move_and_slide() {
for (int i = 0; i < 3; i++) {
if (locked_axis & (1 << i)) {
- motion_velocity[i] = 0.0;
+ velocity[i] = 0.0;
}
}
@@ -1239,7 +1239,7 @@ bool CharacterBody3D::move_and_slide() {
if (moving_platform_apply_velocity_on_leave == PLATFORM_VEL_ON_LEAVE_UPWARD_ONLY && current_platform_velocity.dot(up_direction) < 0) {
current_platform_velocity = current_platform_velocity.slide(up_direction);
}
- motion_velocity += current_platform_velocity;
+ velocity += current_platform_velocity;
}
}
@@ -1247,7 +1247,7 @@ bool CharacterBody3D::move_and_slide() {
}
void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_floor) {
- Vector3 motion = motion_velocity * p_delta;
+ Vector3 motion = velocity * p_delta;
Vector3 motion_slide_up = motion.slide(up_direction);
Vector3 prev_floor_normal = floor_normal;
@@ -1267,7 +1267,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// If the platform's ceiling push down the body.
bool apply_ceiling_velocity = false;
bool first_slide = true;
- bool vel_dir_facing_up = motion_velocity.dot(up_direction) > 0;
+ bool vel_dir_facing_up = velocity.dot(up_direction) > 0;
Vector3 total_travel;
for (int iteration = 0; iteration < max_slides; ++iteration) {
@@ -1287,26 +1287,26 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
CollisionState result_state;
_set_collision_direction(result, result_state);
- // If we hit a ceiling platform, we set the vertical motion_velocity to at least the platform one.
+ // If we hit a ceiling platform, we set the vertical velocity to at least the platform one.
if (collision_state.ceiling && platform_ceiling_velocity != Vector3() && platform_ceiling_velocity.dot(up_direction) < 0) {
// If ceiling sliding is on, only apply when the ceiling is flat or when the motion is upward.
if (!slide_on_ceiling || motion.dot(up_direction) < 0 || (ceiling_normal + up_direction).length() < 0.01) {
apply_ceiling_velocity = true;
Vector3 ceiling_vertical_velocity = up_direction * up_direction.dot(platform_ceiling_velocity);
- Vector3 motion_vertical_velocity = up_direction * up_direction.dot(motion_velocity);
+ Vector3 motion_vertical_velocity = up_direction * up_direction.dot(velocity);
if (motion_vertical_velocity.dot(up_direction) > 0 || ceiling_vertical_velocity.length_squared() > motion_vertical_velocity.length_squared()) {
- motion_velocity = ceiling_vertical_velocity + motion_velocity.slide(up_direction);
+ velocity = ceiling_vertical_velocity + velocity.slide(up_direction);
}
}
}
- if (collision_state.floor && floor_stop_on_slope && (motion_velocity.normalized() + up_direction).length() < 0.01) {
+ if (collision_state.floor && floor_stop_on_slope && (velocity.normalized() + up_direction).length() < 0.01) {
Transform3D gt = get_global_transform();
if (result.travel.length() <= margin + CMP_EPSILON) {
gt.origin -= result.travel;
}
set_global_transform(gt);
- motion_velocity = Vector3();
+ velocity = Vector3();
motion = Vector3();
last_motion = Vector3();
break;
@@ -1367,11 +1367,11 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Scales the horizontal velocity according to the wall slope.
if (vel_dir_facing_up) {
- Vector3 slide_motion = motion_velocity.slide(result.collisions[0].normal);
- // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
- motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
+ Vector3 slide_motion = velocity.slide(result.collisions[0].normal);
+ // Keeps the vertical motion from velocity and add the horizontal motion of the projection.
+ velocity = up_direction * up_direction.dot(velocity) + slide_motion.slide(up_direction);
} else {
- motion_velocity = motion_velocity.slide(forward);
+ velocity = velocity.slide(forward);
}
// Allow only lateral motion along previous floor when already on floor.
@@ -1401,7 +1401,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
if (stop_all_motion) {
motion = Vector3();
- motion_velocity = Vector3();
+ velocity = Vector3();
}
}
}
@@ -1412,7 +1412,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
real_t motion_angle = Math::abs(Math::acos(-horizontal_normal.dot(motion_slide_up.normalized())));
if (motion_angle < wall_min_slide_angle) {
motion = up_direction * motion.dot(up_direction);
- motion_velocity = up_direction * motion_velocity.dot(up_direction);
+ velocity = up_direction * velocity.dot(up_direction);
apply_default_sliding = false;
}
@@ -1437,7 +1437,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
slide_motion *= motion_length;
}
- if (slide_motion.dot(motion_velocity) > 0.0) {
+ if (slide_motion.dot(velocity) > 0.0) {
motion = slide_motion;
} else {
motion = Vector3();
@@ -1446,10 +1446,10 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
if (slide_on_ceiling && result_state.ceiling) {
// Apply slide only in the direction of the input motion, otherwise just stop to avoid jittering when moving against a wall.
if (vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(collision.normal);
+ velocity = velocity.slide(collision.normal);
} else {
// Avoid acceleration in slope when falling.
- motion_velocity = up_direction * up_direction.dot(motion_velocity);
+ velocity = up_direction * up_direction.dot(velocity);
}
}
}
@@ -1457,7 +1457,7 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
else {
motion = result.remainder;
if (result_state.ceiling && !slide_on_ceiling && vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(up_direction);
+ velocity = velocity.slide(up_direction);
motion = motion.slide(up_direction);
}
}
@@ -1502,12 +1502,12 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// Reset the gravity accumulation when touching the ground.
if (collision_state.floor && !vel_dir_facing_up) {
- motion_velocity = motion_velocity.slide(up_direction);
+ velocity = velocity.slide(up_direction);
}
}
void CharacterBody3D::_move_and_slide_floating(double p_delta) {
- Vector3 motion = motion_velocity * p_delta;
+ Vector3 motion = velocity * p_delta;
platform_rid = RID();
platform_object_id = ObjectID();
@@ -1534,7 +1534,7 @@ void CharacterBody3D::_move_and_slide_floating(double p_delta) {
break;
}
- if (wall_min_slide_angle != 0 && Math::acos(wall_normal.dot(-motion_velocity.normalized())) < wall_min_slide_angle + FLOOR_ANGLE_THRESHOLD) {
+ if (wall_min_slide_angle != 0 && Math::acos(wall_normal.dot(-velocity.normalized())) < wall_min_slide_angle + FLOOR_ANGLE_THRESHOLD) {
motion = Vector3();
if (result.travel.length() < margin + CMP_EPSILON) {
Transform3D gt = get_global_transform();
@@ -1548,7 +1548,7 @@ void CharacterBody3D::_move_and_slide_floating(double p_delta) {
motion = result.remainder.slide(wall_normal);
}
- if (motion.dot(motion_velocity) <= 0.0) {
+ if (motion.dot(velocity) <= 0.0) {
motion = Vector3();
}
}
@@ -1723,12 +1723,12 @@ real_t CharacterBody3D::get_safe_margin() const {
return margin;
}
-const Vector3 &CharacterBody3D::get_motion_velocity() const {
- return motion_velocity;
+const Vector3 &CharacterBody3D::get_velocity() const {
+ return velocity;
}
-void CharacterBody3D::set_motion_velocity(const Vector3 &p_velocity) {
- motion_velocity = p_velocity;
+void CharacterBody3D::set_velocity(const Vector3 &p_velocity) {
+ velocity = p_velocity;
}
bool CharacterBody3D::is_on_floor() const {
@@ -1943,8 +1943,8 @@ void CharacterBody3D::_notification(int p_what) {
void CharacterBody3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("move_and_slide"), &CharacterBody3D::move_and_slide);
- ClassDB::bind_method(D_METHOD("set_motion_velocity", "motion_velocity"), &CharacterBody3D::set_motion_velocity);
- ClassDB::bind_method(D_METHOD("get_motion_velocity"), &CharacterBody3D::get_motion_velocity);
+ ClassDB::bind_method(D_METHOD("set_velocity", "velocity"), &CharacterBody3D::set_velocity);
+ ClassDB::bind_method(D_METHOD("get_velocity"), &CharacterBody3D::get_velocity);
ClassDB::bind_method(D_METHOD("set_safe_margin", "pixels"), &CharacterBody3D::set_safe_margin);
ClassDB::bind_method(D_METHOD("get_safe_margin"), &CharacterBody3D::get_safe_margin);
@@ -1997,7 +1997,7 @@ void CharacterBody3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "motion_mode", PROPERTY_HINT_ENUM, "Grounded,Floating", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_motion_mode", "get_motion_mode");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "up_direction"), "set_up_direction", "get_up_direction");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slide_on_ceiling"), "set_slide_on_ceiling_enabled", "is_slide_on_ceiling_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "motion_velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_motion_velocity", "get_motion_velocity");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "velocity", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_velocity", "get_velocity");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_slides", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_max_slides", "get_max_slides");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "wall_min_slide_angle", PROPERTY_HINT_RANGE, "0,180,0.1,radians", PROPERTY_USAGE_DEFAULT), "set_wall_min_slide_angle", "get_wall_min_slide_angle");
ADD_GROUP("Floor", "floor_");
diff --git a/scene/3d/physics_body_3d.h b/scene/3d/physics_body_3d.h
index 67dc7382c3..0f753fef76 100644
--- a/scene/3d/physics_body_3d.h
+++ b/scene/3d/physics_body_3d.h
@@ -354,8 +354,8 @@ public:
};
bool move_and_slide();
- const Vector3 &get_motion_velocity() const;
- void set_motion_velocity(const Vector3 &p_velocity);
+ const Vector3 &get_velocity() const;
+ void set_velocity(const Vector3 &p_velocity);
bool is_on_floor() const;
bool is_on_floor_only() const;
@@ -416,7 +416,7 @@ private:
real_t floor_max_angle = Math::deg2rad((real_t)45.0);
real_t wall_min_slide_angle = Math::deg2rad((real_t)15.0);
Vector3 up_direction = Vector3(0.0, 1.0, 0.0);
- Vector3 motion_velocity;
+ Vector3 velocity;
Vector3 floor_normal;
Vector3 wall_normal;
Vector3 ceiling_normal;
diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp
index 68c9ff8ece..ce281c79bc 100644
--- a/scene/3d/sprite_3d.cpp
+++ b/scene/3d/sprite_3d.cpp
@@ -696,10 +696,6 @@ Rect2 Sprite3D::get_item_rect() const {
if (texture.is_null()) {
return Rect2(0, 0, 1, 1);
}
- /*
- if (texture.is_null())
- return CanvasItem::get_item_rect();
- */
Size2 s;
@@ -1023,14 +1019,14 @@ void AnimatedSprite3D::_notification(int p_what) {
return;
}
- float speed = frames->get_animation_speed(animation);
- if (speed == 0) {
- return; //do nothing
- }
-
double remaining = get_process_delta_time();
while (remaining) {
+ double speed = frames->get_animation_speed(animation);
+ if (speed == 0) {
+ return; // Do nothing.
+ }
+
if (timeout <= 0) {
timeout = 1.0 / speed;
diff --git a/scene/3d/vehicle_body_3d.cpp b/scene/3d/vehicle_body_3d.cpp
index a5fd3a7dd0..8d02d26fc4 100644
--- a/scene/3d/vehicle_body_3d.cpp
+++ b/scene/3d/vehicle_body_3d.cpp
@@ -116,9 +116,7 @@ TypedArray<String> VehicleWheel3D::get_configuration_warnings() const {
}
void VehicleWheel3D::_update(PhysicsDirectBodyState3D *s) {
- if (m_raycastInfo.m_isInContact)
-
- {
+ if (m_raycastInfo.m_isInContact) {
real_t project = m_raycastInfo.m_contactNormalWS.dot(m_raycastInfo.m_wheelDirectionWS);
Vector3 chassis_velocity_at_contactPoint;
Vector3 relpos = m_raycastInfo.m_contactPointWS - s->get_transform().origin;
@@ -135,11 +133,7 @@ void VehicleWheel3D::_update(PhysicsDirectBodyState3D *s) {
m_suspensionRelativeVelocity = projVel * inv;
m_clippedInvContactDotSuspension = inv;
}
-
- }
-
- else // Not in contact : position wheel in a nice (rest length) position
- {
+ } else { // Not in contact : position wheel in a nice (rest length) position
m_raycastInfo.m_suspensionLength = m_suspensionRestLength;
m_suspensionRelativeVelocity = real_t(0.0);
m_raycastInfo.m_contactNormalWS = -m_raycastInfo.m_wheelDirectionWS;
diff --git a/scene/3d/xr_nodes.cpp b/scene/3d/xr_nodes.cpp
index b18819c920..efae81e048 100644
--- a/scene/3d/xr_nodes.cpp
+++ b/scene/3d/xr_nodes.cpp
@@ -448,11 +448,6 @@ void XRController3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_tracker_hand"), &XRController3D::get_tracker_hand);
- ClassDB::bind_method(D_METHOD("get_rumble"), &XRController3D::get_rumble);
- ClassDB::bind_method(D_METHOD("set_rumble", "rumble"), &XRController3D::set_rumble);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rumble", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_rumble", "get_rumble");
- ADD_PROPERTY_DEFAULT("rumble", 0.0);
-
ADD_SIGNAL(MethodInfo("button_pressed", PropertyInfo(Variant::STRING, "name")));
ADD_SIGNAL(MethodInfo("button_released", PropertyInfo(Variant::STRING, "name")));
ADD_SIGNAL(MethodInfo("input_value_changed", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::FLOAT, "value")));
@@ -558,20 +553,6 @@ Vector2 XRController3D::get_axis(const StringName &p_name) const {
}
}
-real_t XRController3D::get_rumble() const {
- if (!tracker.is_valid()) {
- return 0.0;
- }
-
- return tracker->get_rumble();
-}
-
-void XRController3D::set_rumble(real_t p_rumble) {
- if (tracker.is_valid()) {
- tracker->set_rumble(p_rumble);
- }
-}
-
XRPositionalTracker::TrackerHand XRController3D::get_tracker_hand() const {
// get our XRServer
if (!tracker.is_valid()) {
@@ -612,7 +593,7 @@ TypedArray<String> XROrigin3D::get_configuration_warnings() const {
}
}
- bool xr_enabled = GLOBAL_GET("rendering/xr/enabled");
+ bool xr_enabled = GLOBAL_GET("xr/shaders/enabled");
if (!xr_enabled) {
warnings.push_back(TTR("XR is not enabled in rendering project settings. Stereoscopic output is not supported unless this is enabled."));
}
diff --git a/scene/3d/xr_nodes.h b/scene/3d/xr_nodes.h
index 5675cbd944..3079e20dc7 100644
--- a/scene/3d/xr_nodes.h
+++ b/scene/3d/xr_nodes.h
@@ -139,9 +139,6 @@ public:
float get_value(const StringName &p_name) const;
Vector2 get_axis(const StringName &p_name) const;
- real_t get_rumble() const;
- void set_rumble(real_t p_rumble);
-
XRPositionalTracker::TrackerHand get_tracker_hand() const;
XRController3D() {}
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index 7ad76e43a2..e243915c13 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -595,18 +595,12 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, double
}
if (update_mode == Animation::UPDATE_CONTINUOUS || update_mode == Animation::UPDATE_CAPTURE || (p_delta == 0 && update_mode == Animation::UPDATE_DISCRETE)) { //delta == 0 means seek
-
Variant value = a->value_track_interpolate(i, p_time);
if (value == Variant()) {
continue;
}
- //thanks to trigger mode, this should be solved now..
- /*
- if (p_delta==0 && value.get_type()==Variant::STRING)
- continue; // doing this with strings is messy, should find another way
- */
if (pa->accum_pass != accum_pass) {
ERR_CONTINUE(cache_update_prop_size >= NODE_CACHE_UPDATE_MAX);
cache_update_prop[cache_update_prop_size++] = pa;
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 9585b4d51d..e83524b06c 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -1241,7 +1241,7 @@ void ItemList::_notification(int p_what) {
text_ofs.x = size.width - text_ofs.x - max_len;
}
- items.write[i].text_buf->set_width(max_len);
+ items.write[i].text_buf->set_width(width - text_ofs.x);
if (rtl) {
items.write[i].text_buf->set_alignment(HORIZONTAL_ALIGNMENT_RIGHT);
@@ -1253,7 +1253,9 @@ void ItemList::_notification(int p_what) {
items[i].text_buf->draw_outline(get_canvas_item(), text_ofs, outline_size, font_outline_color);
}
- items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate);
+ if (width - text_ofs.x > 0) {
+ items[i].text_buf->draw(get_canvas_item(), text_ofs, modulate);
+ }
}
}
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index 77e910870f..96735678c1 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -99,7 +99,7 @@ private:
SelectMode select_mode = SELECT_SINGLE;
IconMode icon_mode = ICON_MODE_LEFT;
VScrollBar *scroll_bar;
- TextParagraph::OverrunBehavior text_overrun_behavior = TextParagraph::OVERRUN_NO_TRIMMING;
+ TextParagraph::OverrunBehavior text_overrun_behavior = TextParagraph::OVERRUN_TRIM_ELLIPSIS;
uint64_t search_time_msec = 0;
String search_string;
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 883eb1a1ba..ff4e071a95 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -847,7 +847,8 @@ void LineEdit::_notification(int p_what) {
// Draw carets.
ofs.x = x_ofs + scroll_offset;
if (draw_caret || drag_caret_force_displayed) {
- const int caret_width = get_theme_constant(SNAME("caret_width")) * get_theme_default_base_scale();
+ // Prevent carets from disappearing at theme scales below 1.0 (if the caret width is 1).
+ const int caret_width = get_theme_constant(SNAME("caret_width")) * MAX(1, get_theme_default_base_scale());
if (ime_text.length() == 0) {
// Normal caret.
diff --git a/scene/gui/nine_patch_rect.cpp b/scene/gui/nine_patch_rect.cpp
index 7940056e2f..4f34ece86f 100644
--- a/scene/gui/nine_patch_rect.cpp
+++ b/scene/gui/nine_patch_rect.cpp
@@ -95,10 +95,6 @@ void NinePatchRect::set_texture(const Ref<Texture2D> &p_tex) {
}
texture = p_tex;
update();
- /*
- if (texture.is_valid())
- texture->set_flags(texture->get_flags()&(~Texture::FLAG_REPEAT)); //remove repeat from texture, it looks bad in sprites
- */
update_minimum_size();
emit_signal(SceneStringNames::get_singleton()->texture_changed);
}
diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp
index 4a5dc57e36..24b91cd16a 100644
--- a/scene/gui/popup.cpp
+++ b/scene/gui/popup.cpp
@@ -42,26 +42,30 @@ void Popup::_input_from_window(const Ref<InputEvent> &p_event) {
}
void Popup::_initialize_visible_parents() {
- visible_parents.clear();
-
- Window *parent_window = this;
- while (parent_window) {
- parent_window = parent_window->get_parent_visible_window();
- if (parent_window) {
- visible_parents.push_back(parent_window);
- parent_window->connect("focus_entered", callable_mp(this, &Popup::_parent_focused));
- parent_window->connect("tree_exited", callable_mp(this, &Popup::_deinitialize_visible_parents));
+ if (is_embedded()) {
+ visible_parents.clear();
+
+ Window *parent_window = this;
+ while (parent_window) {
+ parent_window = parent_window->get_parent_visible_window();
+ if (parent_window) {
+ visible_parents.push_back(parent_window);
+ parent_window->connect("focus_entered", callable_mp(this, &Popup::_parent_focused));
+ parent_window->connect("tree_exited", callable_mp(this, &Popup::_deinitialize_visible_parents));
+ }
}
}
}
void Popup::_deinitialize_visible_parents() {
- for (uint32_t i = 0; i < visible_parents.size(); ++i) {
- visible_parents[i]->disconnect("focus_entered", callable_mp(this, &Popup::_parent_focused));
- visible_parents[i]->disconnect("tree_exited", callable_mp(this, &Popup::_deinitialize_visible_parents));
- }
+ if (is_embedded()) {
+ for (uint32_t i = 0; i < visible_parents.size(); ++i) {
+ visible_parents[i]->disconnect("focus_entered", callable_mp(this, &Popup::_parent_focused));
+ visible_parents[i]->disconnect("tree_exited", callable_mp(this, &Popup::_deinitialize_visible_parents));
+ }
- visible_parents.clear();
+ visible_parents.clear();
+ }
}
void Popup::_notification(int p_what) {
@@ -94,7 +98,7 @@ void Popup::_notification(int p_what) {
}
void Popup::_parent_focused() {
- if (popped_up && close_on_parent_focus) {
+ if (popped_up && get_flag(FLAG_POPUP)) {
_close_pressed();
}
}
@@ -111,19 +115,7 @@ 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"));
}
@@ -184,6 +176,7 @@ Popup::Popup() {
set_transient(true);
set_flag(FLAG_BORDERLESS, true);
set_flag(FLAG_RESIZE_DISABLED, true);
+ set_flag(FLAG_POPUP, true);
connect("window_input", callable_mp(this, &Popup::_input_from_window));
}
diff --git a/scene/gui/popup.h b/scene/gui/popup.h
index 5678043b23..a3c56c9ff1 100644
--- a/scene/gui/popup.h
+++ b/scene/gui/popup.h
@@ -42,7 +42,6 @@ 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);
@@ -61,9 +60,6 @@ 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 deca1451ee..af2edfa090 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -205,7 +205,6 @@ void PopupMenu::_activate_submenu(int p_over) {
submenu_pos.x = this_pos.x - submenu_size.width;
}
- submenu_popup->set_close_on_parent_focus(false);
submenu_popup->set_position(submenu_pos);
PopupMenu *submenu_pum = Object::cast_to<PopupMenu>(submenu_popup);
@@ -223,6 +222,11 @@ void PopupMenu::_activate_submenu(int p_over) {
// Set autohide areas.
+ Rect2 safe_area = this_rect;
+ safe_area.position.y += items[p_over]._ofs_cache + scroll_offset + style->get_offset().height - vsep / 2;
+ safe_area.size.y = items[p_over]._height_cache;
+ DisplayServer::get_singleton()->window_set_popup_safe_rect(submenu_popup->get_window_id(), safe_area);
+
// Make the position of the parent popup relative to submenu popup.
this_rect.position = this_rect.position - submenu_pum->get_position();
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index cfd0e664be..dd07831b83 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -3725,7 +3725,7 @@ void RichTextLabel::scroll_to_line(int p_line) {
if ((line_count <= p_line) && (line_count + main->lines[i].text_buf->get_line_count() >= p_line)) {
float line_offset = 0.f;
for (int j = 0; j < p_line - line_count; j++) {
- line_offset += main->lines[i].text_buf->get_line_size(j).y;
+ line_offset += main->lines[i].text_buf->get_line_size(j).y + get_theme_constant(SNAME("line_separation"));
}
vscroll->set_value(main->lines[i].offset.y + line_offset);
return;
@@ -3734,6 +3734,28 @@ void RichTextLabel::scroll_to_line(int p_line) {
}
}
+float RichTextLabel::get_line_offset(int p_line) {
+ int line_count = 0;
+ for (int i = 0; i < main->lines.size(); i++) {
+ if ((line_count <= p_line) && (p_line <= line_count + main->lines[i].text_buf->get_line_count())) {
+ float line_offset = 0.f;
+ for (int j = 0; j < p_line - line_count; j++) {
+ line_offset += main->lines[i].text_buf->get_line_size(j).y + get_theme_constant(SNAME("line_separation"));
+ }
+ return main->lines[i].offset.y + line_offset;
+ }
+ line_count += main->lines[i].text_buf->get_line_count();
+ }
+ return 0;
+}
+
+float RichTextLabel::get_paragraph_offset(int p_paragraph) {
+ if (0 <= p_paragraph && p_paragraph < main->lines.size()) {
+ return main->lines[p_paragraph].offset.y;
+ }
+ return 0;
+}
+
int RichTextLabel::get_line_count() const {
int line_count = 0;
for (int i = 0; i < main->lines.size(); i++) {
@@ -4350,6 +4372,9 @@ void RichTextLabel::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_content_height"), &RichTextLabel::get_content_height);
ClassDB::bind_method(D_METHOD("get_content_width"), &RichTextLabel::get_content_width);
+ ClassDB::bind_method(D_METHOD("get_line_offset", "line"), &RichTextLabel::get_line_offset);
+ ClassDB::bind_method(D_METHOD("get_paragraph_offset", "paragraph"), &RichTextLabel::get_paragraph_offset);
+
ClassDB::bind_method(D_METHOD("parse_expressions_for_values", "expressions"), &RichTextLabel::parse_expressions_for_values);
ClassDB::bind_method(D_METHOD("set_effects", "effects"), &RichTextLabel::set_effects);
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index ddc8cc75b8..53c2046c8f 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -551,6 +551,9 @@ public:
int get_paragraph_count() const;
int get_visible_paragraph_count() const;
+ float get_line_offset(int p_line);
+ float get_paragraph_offset(int p_paragraph);
+
void scroll_to_line(int p_line);
int get_line_count() const;
int get_visible_line_count() const;
diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp
index b04cb39920..e1b0e8cca8 100644
--- a/scene/gui/scroll_bar.cpp
+++ b/scene/gui/scroll_bar.cpp
@@ -426,11 +426,6 @@ double ScrollBar::get_grabber_size() const {
}
float page = (get_page() > 0) ? get_page() : 0;
- /*
- if (grabber_range < get_step())
- grabber_range=get_step();
- */
-
double area_size = get_area_size();
double grabber_size = page / range * area_size;
return grabber_size + get_grabber_min_size();
diff --git a/scene/gui/subviewport_container.cpp b/scene/gui/subviewport_container.cpp
index ce78c286f5..c66e145bc4 100644
--- a/scene/gui/subviewport_container.cpp
+++ b/scene/gui/subviewport_container.cpp
@@ -148,6 +148,24 @@ void SubViewportContainer::_notification(int p_what) {
}
}
} break;
+
+ case NOTIFICATION_MOUSE_ENTER: {
+ _notify_viewports(NOTIFICATION_VP_MOUSE_ENTER);
+ } break;
+
+ case NOTIFICATION_MOUSE_EXIT: {
+ _notify_viewports(NOTIFICATION_VP_MOUSE_EXIT);
+ } break;
+ }
+}
+
+void SubViewportContainer::_notify_viewports(int p_notification) {
+ for (int i = 0; i < get_child_count(); i++) {
+ SubViewport *c = Object::cast_to<SubViewport>(get_child(i));
+ if (!c) {
+ continue;
+ }
+ c->notification(p_notification);
}
}
diff --git a/scene/gui/subviewport_container.h b/scene/gui/subviewport_container.h
index 3138a6144c..f52f01e4e2 100644
--- a/scene/gui/subviewport_container.h
+++ b/scene/gui/subviewport_container.h
@@ -38,6 +38,7 @@ class SubViewportContainer : public Container {
bool stretch = false;
int shrink = 1;
+ void _notify_viewports(int p_notification);
protected:
void _notification(int p_what);
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 5a3c622c86..854a9e463c 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1283,7 +1283,8 @@ void TextEdit::_notification(int p_what) {
}
// Carets.
- const int caret_width = get_theme_constant(SNAME("caret_width")) * get_theme_default_base_scale();
+ // Prevent carets from disappearing at theme scales below 1.0 (if the caret width is 1).
+ const int caret_width = get_theme_constant(SNAME("caret_width")) * MAX(1, get_theme_default_base_scale());
if (!clipped && caret.line == line && line_wrap_index == caret_wrap_index) {
caret.draw_pos.y = ofs_y + ldata->get_line_descent(line_wrap_index);
@@ -2374,7 +2375,7 @@ void TextEdit::_do_backspace(bool p_word, bool p_all_to_left) {
if (p_all_to_left) {
int caret_current_column = caret.column;
- caret.column = 0;
+ set_caret_column(0);
_remove_text(caret.line, 0, caret.line, caret_current_column);
return;
}
@@ -2920,15 +2921,20 @@ void TextEdit::_clear() {
end_complex_operation();
return;
}
+ // Cannot merge with above, as we are not part of the tree on creation.
+ int old_text_size = text.size();
+
clear_undo_history();
text.clear();
- caret.column = 0;
- caret.line = 0;
+ set_caret_line(0, false);
+ set_caret_column(0);
caret.x_ofs = 0;
caret.line_ofs = 0;
caret.wrap_ofs = 0;
caret.last_fit_x = 0;
selection.active = false;
+
+ emit_signal(SNAME("lines_edited_from"), old_text_size, 0);
}
void TextEdit::set_text(const String &p_text) {
@@ -2987,14 +2993,16 @@ void TextEdit::set_line(int p_line, const String &p_new_text) {
if (p_line < 0 || p_line >= text.size()) {
return;
}
+ begin_complex_operation();
_remove_text(p_line, 0, p_line, text[p_line].length());
_insert_text(p_line, 0, p_new_text);
- if (caret.line == p_line) {
- caret.column = MIN(caret.column, p_new_text.length());
+ if (caret.line == p_line && caret.column > p_new_text.length()) {
+ set_caret_column(MIN(caret.column, p_new_text.length()), false);
}
if (has_selection() && p_line == selection.to_line && selection.to_column > text[p_line].length()) {
selection.to_column = text[p_line].length();
}
+ end_complex_operation();
}
String TextEdit::get_line(int p_line) const {
@@ -3049,8 +3057,10 @@ void TextEdit::swap_lines(int p_from_line, int p_to_line) {
String tmp = get_line(p_from_line);
String tmp2 = get_line(p_to_line);
+ begin_complex_operation();
set_line(p_to_line, tmp);
set_line(p_from_line, tmp2);
+ end_complex_operation();
}
void TextEdit::insert_line_at(int p_at, const String &p_text) {
@@ -3059,7 +3069,7 @@ void TextEdit::insert_line_at(int p_at, const String &p_text) {
_insert_text(p_at, 0, p_text + "\n");
if (caret.line >= p_at) {
// offset caret when located after inserted line
- ++caret.line;
+ set_caret_line(caret.line + 1, false);
}
if (has_selection()) {
if (selection.from_line >= p_at) {
@@ -3964,6 +3974,7 @@ void TextEdit::set_caret_line(int p_line, bool p_adjust_viewport, bool p_can_be_
}
}
}
+ bool caret_moved = caret.line != p_line;
caret.line = p_line;
int n_col = _get_char_pos_for_line(caret.last_fit_x, p_line, p_wrap_index);
@@ -3977,15 +3988,16 @@ void TextEdit::set_caret_line(int p_line, bool p_adjust_viewport, bool p_can_be_
n_col -= 1;
}
}
+ caret_moved = (caret_moved || caret.column != n_col);
caret.column = n_col;
- if (p_adjust_viewport) {
+ if (is_inside_tree() && p_adjust_viewport) {
adjust_viewport_to_caret();
}
setting_caret_line = false;
- if (!caret_pos_dirty) {
+ if (caret_moved && !caret_pos_dirty) {
if (is_inside_tree()) {
MessageQueue::get_singleton()->push_call(this, "_emit_caret_changed");
}
@@ -4002,6 +4014,7 @@ void TextEdit::set_caret_column(int p_col, bool p_adjust_viewport) {
p_col = 0;
}
+ bool caret_moved = caret.column != p_col;
caret.column = p_col;
if (caret.column > get_line(caret.line).length()) {
caret.column = get_line(caret.line).length();
@@ -4009,11 +4022,11 @@ void TextEdit::set_caret_column(int p_col, bool p_adjust_viewport) {
caret.last_fit_x = _get_column_x_offset_for_line(caret.column, caret.line);
- if (p_adjust_viewport) {
+ if (is_inside_tree() && p_adjust_viewport) {
adjust_viewport_to_caret();
}
- if (!caret_pos_dirty) {
+ if (caret_moved && !caret_pos_dirty) {
if (is_inside_tree()) {
MessageQueue::get_singleton()->push_call(this, "_emit_caret_changed");
}
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index fc0258a760..5afc37061b 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -1701,8 +1701,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2
bool skip = (p_item == root && hide_root);
if (!skip && (p_pos.y + label_h - cache.offset.y) > 0) {
- //draw separation.
- //if (p_item->get_parent()!=root || !hide_root)
+ // Draw separation.
ERR_FAIL_COND_V(cache.font.is_null(), -1);
@@ -2259,11 +2258,6 @@ void Tree::select_single_item(TreeItem *p_selected, TreeItem *p_current, int p_c
emit_signal(SNAME("item_selected"));
emitted_row = true;
}
- /*
- if (p_col==i)
- p_current->selected_signal.call(p_col);
- */
-
} else if (c.selected) {
if (p_selected != p_current) {
// Deselect other rows.
@@ -3292,8 +3286,21 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
} else {
Rect2 rect = get_selected()->get_meta("__focus_rect");
Point2 mpos = b->get_position();
+ int icon_size_x = 0;
+ Ref<Texture2D> icon = get_selected()->get_icon(selected_col);
+ if (icon.is_valid()) {
+ Rect2i icon_region = get_selected()->get_icon_region(selected_col);
+ if (icon_region == Rect2i()) {
+ icon_size_x = icon->get_width();
+ } else {
+ icon_size_x = icon_region.size.width;
+ }
+ }
+ // Icon is treated as if it is outside of the rect so that double clicking on it will emit the item_double_clicked signal.
if (rtl) {
- mpos.x = get_size().width - mpos.x;
+ mpos.x = get_size().width - (mpos.x + icon_size_x);
+ } else {
+ mpos.x -= icon_size_x;
}
if (rect.has_point(mpos)) {
if (!edit_selected()) {
@@ -4065,10 +4072,6 @@ int Tree::get_edited_column() const {
}
TreeItem *Tree::get_next_selected(TreeItem *p_item) {
- /*
- if (!p_item)
- return nullptr;
- */
if (!root) {
return nullptr;
}
diff --git a/scene/gui/video_stream_player.cpp b/scene/gui/video_stream_player.cpp
index 17dd3123f5..d7c76aa070 100644
--- a/scene/gui/video_stream_player.cpp
+++ b/scene/gui/video_stream_player.cpp
@@ -240,11 +240,11 @@ void VideoStreamPlayer::set_stream(const Ref<VideoStream> &p_stream) {
if (!expand) {
update_minimum_size();
}
-};
+}
Ref<VideoStream> VideoStreamPlayer::get_stream() const {
return stream;
-};
+}
void VideoStreamPlayer::play() {
ERR_FAIL_COND(!is_inside_tree());
@@ -254,10 +254,8 @@ void VideoStreamPlayer::play() {
playback->stop();
playback->play();
set_process_internal(true);
- // AudioServer::get_singleton()->stream_set_active(stream_rid,true);
- // AudioServer::get_singleton()->stream_set_volume_scale(stream_rid,volume);
last_audio_time = 0;
-};
+}
void VideoStreamPlayer::stop() {
if (!is_inside_tree()) {
@@ -268,11 +266,10 @@ void VideoStreamPlayer::stop() {
}
playback->stop();
- // AudioServer::get_singleton()->stream_set_active(stream_rid,false);
resampler.flush();
set_process_internal(false);
last_audio_time = 0;
-};
+}
bool VideoStreamPlayer::is_playing() const {
if (playback.is_null()) {
@@ -280,16 +277,16 @@ bool VideoStreamPlayer::is_playing() const {
}
return playback->is_playing();
-};
+}
void VideoStreamPlayer::set_paused(bool p_paused) {
paused = p_paused;
if (playback.is_valid()) {
playback->set_paused(p_paused);
set_process_internal(!p_paused);
- };
+ }
last_audio_time = 0;
-};
+}
bool VideoStreamPlayer::is_paused() const {
return paused;
@@ -313,11 +310,11 @@ int VideoStreamPlayer::get_audio_track() const {
void VideoStreamPlayer::set_volume(float p_vol) {
volume = p_vol;
-};
+}
float VideoStreamPlayer::get_volume() const {
return volume;
-};
+}
void VideoStreamPlayer::set_volume_db(float p_db) {
if (p_db < -79) {
@@ -325,7 +322,7 @@ void VideoStreamPlayer::set_volume_db(float p_db) {
} else {
set_volume(Math::db2linear(p_db));
}
-};
+}
float VideoStreamPlayer::get_volume_db() const {
if (volume == 0) {
@@ -333,21 +330,21 @@ float VideoStreamPlayer::get_volume_db() const {
} else {
return Math::linear2db(volume);
}
-};
+}
String VideoStreamPlayer::get_stream_name() const {
if (stream.is_null()) {
return "<No Stream>";
}
return stream->get_name();
-};
+}
float VideoStreamPlayer::get_stream_position() const {
if (playback.is_null()) {
return 0;
}
return playback->get_playback_position();
-};
+}
void VideoStreamPlayer::set_stream_position(float p_position) {
if (playback.is_valid()) {
@@ -365,14 +362,14 @@ Ref<Texture2D> VideoStreamPlayer::get_video_texture() const {
void VideoStreamPlayer::set_autoplay(bool p_enable) {
autoplay = p_enable;
-};
+}
bool VideoStreamPlayer::has_autoplay() const {
return autoplay;
-};
+}
void VideoStreamPlayer::set_bus(const StringName &p_bus) {
- //if audio is active, must lock this
+ // If audio is active, must lock this.
AudioServer::get_singleton()->lock();
bus = p_bus;
AudioServer::get_singleton()->unlock();
@@ -446,7 +443,6 @@ void VideoStreamPlayer::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "audio_track", PROPERTY_HINT_RANGE, "0,128,1"), "set_audio_track", "get_audio_track");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "VideoStream"), "set_stream", "get_stream");
- //ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/loop"), "set_loop", "has_loop") ;
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume_db", PROPERTY_HINT_RANGE, "-80,24,0.01"), "set_volume_db", "get_volume_db");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volume", PROPERTY_HINT_RANGE, "0,15,0.01,exp", PROPERTY_USAGE_NONE), "set_volume", "get_volume");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "autoplay"), "set_autoplay", "has_autoplay");
@@ -461,7 +457,5 @@ void VideoStreamPlayer::_bind_methods() {
VideoStreamPlayer::VideoStreamPlayer() {}
VideoStreamPlayer::~VideoStreamPlayer() {
- // if (stream_rid.is_valid())
- // AudioServer::get_singleton()->free(stream_rid);
- resampler.clear(); //Not necessary here, but make in consistent with other "stream_player" classes
-};
+ resampler.clear(); // Not necessary here, but make in consistent with other "stream_player" classes.
+}
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index 9ad711c596..d2f5b52dbf 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -56,32 +56,19 @@ Transform2D CanvasItem::_edit_get_transform() const {
#endif
bool CanvasItem::is_visible_in_tree() const {
- return visible && visible_in_tree;
+ return visible && parent_visible_in_tree;
}
-void CanvasItem::_propagate_visibility_changed(bool p_visible, bool p_was_visible) {
- if (p_visible && first_draw) { //avoid propagating it twice
- first_draw = false;
- }
- visible_in_tree = p_visible;
- notification(NOTIFICATION_VISIBILITY_CHANGED);
-
- if (visible && p_visible) {
- update();
- } else if (!p_visible && (visible || p_was_visible)) {
- emit_signal(SceneStringNames::get_singleton()->hidden);
+void CanvasItem::_propagate_visibility_changed(bool p_parent_visible_in_tree) {
+ parent_visible_in_tree = p_parent_visible_in_tree;
+ if (!visible) {
+ return;
}
- _block();
-
- for (int i = 0; i < get_child_count(); i++) {
- CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i));
-
- if (c && c->visible) { //should the top_levels stop propagation? i think so but..
- c->_propagate_visibility_changed(p_visible);
- }
+ if (p_parent_visible_in_tree && first_draw) { // Avoid propagating it twice.
+ first_draw = false;
}
- _unblock();
+ _handle_visibility_change(p_parent_visible_in_tree);
}
void CanvasItem::set_visible(bool p_visible) {
@@ -90,13 +77,34 @@ void CanvasItem::set_visible(bool p_visible) {
}
visible = p_visible;
- RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, p_visible);
- if (!is_inside_tree()) {
+ if (!parent_visible_in_tree) {
+ notification(NOTIFICATION_VISIBILITY_CHANGED);
return;
}
- _propagate_visibility_changed(p_visible, !p_visible);
+ _handle_visibility_change(p_visible);
+}
+
+void CanvasItem::_handle_visibility_change(bool p_visible) {
+ RenderingServer::get_singleton()->canvas_item_set_visible(canvas_item, p_visible);
+ notification(NOTIFICATION_VISIBILITY_CHANGED);
+
+ if (p_visible) {
+ update();
+ } else {
+ emit_signal(SceneStringNames::get_singleton()->hidden);
+ }
+
+ _block();
+ for (int i = 0; i < get_child_count(); i++) {
+ CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i));
+
+ if (c) { // Should the top_levels stop propagation? I think so, but...
+ c->_propagate_visibility_changed(p_visible);
+ }
+ }
+ _unblock();
}
void CanvasItem::show() {
@@ -264,13 +272,13 @@ void CanvasItem::_notification(int p_what) {
CanvasItem *ci = Object::cast_to<CanvasItem>(parent);
if (ci) {
- visible_in_tree = ci->is_visible_in_tree();
+ parent_visible_in_tree = ci->is_visible_in_tree();
C = ci->children_items.push_back(this);
} else {
CanvasLayer *cl = Object::cast_to<CanvasLayer>(parent);
if (cl) {
- visible_in_tree = cl->is_visible();
+ parent_visible_in_tree = cl->is_visible();
} else {
// Look for a window.
Viewport *viewport = nullptr;
@@ -288,9 +296,9 @@ void CanvasItem::_notification(int p_what) {
window = Object::cast_to<Window>(viewport);
if (window) {
window->connect(SceneStringNames::get_singleton()->visibility_changed, callable_mp(this, &CanvasItem::_window_visibility_changed));
- visible_in_tree = window->is_visible();
+ parent_visible_in_tree = window->is_visible();
} else {
- visible_in_tree = true;
+ parent_visible_in_tree = true;
}
}
}
@@ -333,7 +341,7 @@ void CanvasItem::_notification(int p_what) {
window->disconnect(SceneStringNames::get_singleton()->visibility_changed, callable_mp(this, &CanvasItem::_window_visibility_changed));
}
global_invalid = true;
- visible_in_tree = false;
+ parent_visible_in_tree = false;
} break;
case NOTIFICATION_VISIBILITY_CHANGED: {
diff --git a/scene/main/canvas_item.h b/scene/main/canvas_item.h
index 2a9e7bac3d..1b2c188fc0 100644
--- a/scene/main/canvas_item.h
+++ b/scene/main/canvas_item.h
@@ -85,7 +85,7 @@ private:
Window *window = nullptr;
bool first_draw = false;
bool visible = true;
- bool visible_in_tree = false;
+ bool parent_visible_in_tree = false;
bool clip_children = false;
bool pending_update = false;
bool top_level = false;
@@ -108,7 +108,8 @@ private:
void _top_level_raise_self();
- void _propagate_visibility_changed(bool p_visible, bool p_was_visible = false);
+ void _propagate_visibility_changed(bool p_parent_visible_in_tree);
+ void _handle_visibility_change(bool p_visible);
void _update_callback();
diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp
index 6c627857fa..7aa4d391f8 100644
--- a/scene/main/canvas_layer.cpp
+++ b/scene/main/canvas_layer.cpp
@@ -58,11 +58,7 @@ void CanvasLayer::set_visible(bool p_visible) {
if (c) {
RenderingServer::get_singleton()->canvas_item_set_visible(c->get_canvas_item(), p_visible && c->is_visible());
- if (c->is_visible()) {
- c->_propagate_visibility_changed(p_visible);
- } else {
- c->notification(CanvasItem::NOTIFICATION_VISIBILITY_CHANGED);
- }
+ c->_propagate_visibility_changed(p_visible);
}
}
}
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 42a2e41a08..211667ce38 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -1344,27 +1344,45 @@ bool Node::has_node(const NodePath &p_path) const {
return get_node_or_null(p_path) != nullptr;
}
-Node *Node::find_node(const String &p_mask, bool p_recursive, bool p_owned) const {
+TypedArray<Node> Node::find_nodes(const String &p_mask, const String &p_type, bool p_recursive, bool p_owned) const {
+ TypedArray<Node> ret;
+ ERR_FAIL_COND_V(p_mask.is_empty() && p_type.is_empty(), ret);
+
Node *const *cptr = data.children.ptr();
int ccount = data.children.size();
for (int i = 0; i < ccount; i++) {
if (p_owned && !cptr[i]->data.owner) {
continue;
}
- if (cptr[i]->data.name.operator String().match(p_mask)) {
- return cptr[i];
+
+ if (!p_mask.is_empty()) {
+ if (!cptr[i]->data.name.operator String().match(p_mask)) {
+ continue;
+ } else if (p_type.is_empty()) {
+ ret.append(cptr[i]);
+ }
}
- if (!p_recursive) {
- continue;
+ if (cptr[i]->is_class(p_type)) {
+ ret.append(cptr[i]);
+ } else if (cptr[i]->get_script_instance()) {
+ Ref<Script> script = cptr[i]->get_script_instance()->get_script();
+ while (script.is_valid()) {
+ if ((ScriptServer::is_global_class(p_type) && ScriptServer::get_global_class_path(p_type) == script->get_path()) || p_type == script->get_path()) {
+ ret.append(cptr[i]);
+ break;
+ }
+
+ script = script->get_base_script();
+ }
}
- Node *ret = cptr[i]->find_node(p_mask, true, p_owned);
- if (ret) {
- return ret;
+ if (p_recursive) {
+ ret.append_array(cptr[i]->find_nodes(p_mask, p_type, true, p_owned));
}
}
- return nullptr;
+
+ return ret;
}
Node *Node::get_parent() const {
@@ -2706,7 +2724,7 @@ void Node::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_node", "path"), &Node::get_node);
ClassDB::bind_method(D_METHOD("get_node_or_null", "path"), &Node::get_node_or_null);
ClassDB::bind_method(D_METHOD("get_parent"), &Node::get_parent);
- ClassDB::bind_method(D_METHOD("find_node", "mask", "recursive", "owned"), &Node::find_node, DEFVAL(true), DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("find_nodes", "mask", "type", "recursive", "owned"), &Node::find_nodes, DEFVAL(""), DEFVAL(true), DEFVAL(true));
ClassDB::bind_method(D_METHOD("find_parent", "mask"), &Node::find_parent);
ClassDB::bind_method(D_METHOD("has_node_and_resource", "path"), &Node::has_node_and_resource);
ClassDB::bind_method(D_METHOD("get_node_and_resource", "path"), &Node::_get_node_and_resource);
@@ -2845,6 +2863,9 @@ void Node::_bind_methods() {
BIND_CONSTANT(NOTIFICATION_WM_CLOSE_REQUEST);
BIND_CONSTANT(NOTIFICATION_WM_GO_BACK_REQUEST);
BIND_CONSTANT(NOTIFICATION_WM_SIZE_CHANGED);
+ BIND_CONSTANT(NOTIFICATION_WM_DPI_CHANGE);
+ BIND_CONSTANT(NOTIFICATION_VP_MOUSE_ENTER);
+ BIND_CONSTANT(NOTIFICATION_VP_MOUSE_EXIT);
BIND_CONSTANT(NOTIFICATION_OS_MEMORY_WARNING);
BIND_CONSTANT(NOTIFICATION_TRANSLATION_CHANGED);
BIND_CONSTANT(NOTIFICATION_WM_ABOUT);
diff --git a/scene/main/node.h b/scene/main/node.h
index f2dcdf4b43..8e49f871a7 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -268,6 +268,8 @@ public:
NOTIFICATION_WM_GO_BACK_REQUEST = 1007,
NOTIFICATION_WM_SIZE_CHANGED = 1008,
NOTIFICATION_WM_DPI_CHANGE = 1009,
+ NOTIFICATION_VP_MOUSE_ENTER = 1010,
+ NOTIFICATION_VP_MOUSE_EXIT = 1011,
NOTIFICATION_OS_MEMORY_WARNING = MainLoop::NOTIFICATION_OS_MEMORY_WARNING,
NOTIFICATION_TRANSLATION_CHANGED = MainLoop::NOTIFICATION_TRANSLATION_CHANGED,
@@ -299,7 +301,7 @@ public:
bool has_node(const NodePath &p_path) const;
Node *get_node(const NodePath &p_path) const;
Node *get_node_or_null(const NodePath &p_path) const;
- Node *find_node(const String &p_mask, bool p_recursive = true, bool p_owned = true) const;
+ TypedArray<Node> find_nodes(const String &p_mask, const String &p_type = "", bool p_recursive = true, bool p_owned = true) const;
bool has_node_and_resource(const NodePath &p_path) const;
Node *get_node_and_resource(const NodePath &p_path, RES &r_res, Vector<StringName> &r_leftover_subpath, bool p_last_is_property = true) const;
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp
index 2b4d7d8331..69e7472cf2 100644
--- a/scene/main/scene_tree.cpp
+++ b/scene/main/scene_tree.cpp
@@ -1256,8 +1256,6 @@ void SceneTree::_bind_methods() {
ADD_SIGNAL(MethodInfo("process_frame"));
ADD_SIGNAL(MethodInfo("physics_frame"));
- ADD_SIGNAL(MethodInfo("files_dropped", PropertyInfo(Variant::PACKED_STRING_ARRAY, "files"), PropertyInfo(Variant::INT, "screen")));
-
BIND_ENUM_CONSTANT(GROUP_CALL_DEFAULT);
BIND_ENUM_CONSTANT(GROUP_CALL_REVERSE);
BIND_ENUM_CONSTANT(GROUP_CALL_REALTIME);
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 2831e76fba..de6aa2b139 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -496,17 +496,17 @@ void Viewport::_notification(int p_what) {
#endif // _3D_DISABLED
} break;
- case NOTIFICATION_WM_MOUSE_ENTER: {
- gui.mouse_in_window = true;
+ case NOTIFICATION_VP_MOUSE_ENTER: {
+ gui.mouse_in_viewport = true;
} break;
- case NOTIFICATION_WM_MOUSE_EXIT: {
- gui.mouse_in_window = false;
+ case NOTIFICATION_VP_MOUSE_EXIT: {
+ gui.mouse_in_viewport = false;
_drop_physics_mouseover();
_drop_mouse_over();
- // When the mouse exits the window, we want to end mouse_over, but
+ // When the mouse exits the viewport, we want to end mouse_over, but
// not mouse_focus, because, for example, we want to continue
- // dragging a scrollbar even if the mouse has left the window.
+ // dragging a scrollbar even if the mouse has left the viewport.
} break;
case NOTIFICATION_WM_WINDOW_FOCUS_OUT: {
@@ -1239,6 +1239,7 @@ void Viewport::_gui_show_tooltip() {
panel->set_transient(true);
panel->set_flag(Window::FLAG_NO_FOCUS, true);
+ panel->set_flag(Window::FLAG_POPUP, false);
panel->set_wrap_controls(true);
panel->add_child(base_tooltip);
@@ -1268,7 +1269,10 @@ void Viewport::_gui_show_tooltip() {
gui.tooltip_popup->set_position(r.position);
gui.tooltip_popup->set_size(r.size);
- gui.tooltip_popup->show();
+ DisplayServer::WindowID active_popup = DisplayServer::get_singleton()->window_get_active_popup();
+ if (active_popup == DisplayServer::INVALID_WINDOW_ID || active_popup == window->get_window_id()) {
+ gui.tooltip_popup->show();
+ }
gui.tooltip_popup->child_controls_changed();
}
@@ -1683,7 +1687,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
Control *over = nullptr;
if (gui.mouse_focus) {
over = gui.mouse_focus;
- } else if (gui.mouse_in_window) {
+ } else if (gui.mouse_in_viewport) {
over = gui_find_control(mpos);
}
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 3a71745f44..93e42f1838 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -335,7 +335,7 @@ private:
// info used when this is a window
bool forced_mouse_focus = false; //used for menu buttons
- bool mouse_in_window = true;
+ bool mouse_in_viewport = true;
bool key_event_accepted = false;
Control *mouse_focus = nullptr;
Control *last_mouse_focus = nullptr;
diff --git a/scene/main/window.cpp b/scene/main/window.cpp
index e7a575f40a..6837fcae21 100644
--- a/scene/main/window.cpp
+++ b/scene/main/window.cpp
@@ -340,9 +340,11 @@ void Window::_event_callback(DisplayServer::WindowEvent p_event) {
case DisplayServer::WINDOW_EVENT_MOUSE_ENTER: {
_propagate_window_notification(this, NOTIFICATION_WM_MOUSE_ENTER);
emit_signal(SNAME("mouse_entered"));
+ notification(NOTIFICATION_VP_MOUSE_ENTER);
DisplayServer::get_singleton()->cursor_set_shape(DisplayServer::CURSOR_ARROW); //restore cursor shape
} break;
case DisplayServer::WINDOW_EVENT_MOUSE_EXIT: {
+ notification(NOTIFICATION_VP_MOUSE_EXIT);
_propagate_window_notification(this, NOTIFICATION_WM_MOUSE_EXIT);
emit_signal(SNAME("mouse_exited"));
} break;
@@ -434,8 +436,12 @@ void Window::set_visible(bool p_visible) {
//update transient exclusive
if (transient_parent) {
if (exclusive && visible) {
- ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child.");
- transient_parent->exclusive_child = this;
+#ifdef TOOLS_ENABLED
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child.");
+ transient_parent->exclusive_child = this;
+ }
+#endif
} else {
if (transient_parent->exclusive_child == this) {
transient_parent->exclusive_child = nullptr;
@@ -949,7 +955,7 @@ bool Window::_can_consume_input_events() const {
void Window::_window_input(const Ref<InputEvent> &p_ev) {
if (EngineDebugger::is_active()) {
- //quit from game window using F8
+ // Quit from game window using F8.
Ref<InputEventKey> k = p_ev;
if (k.is_valid() && k->is_pressed() && !k->is_echo() && k->get_keycode() == Key::F8) {
EngineDebugger::get_singleton()->send_message("request_quit", Array());
@@ -957,15 +963,7 @@ void Window::_window_input(const Ref<InputEvent> &p_ev) {
}
if (exclusive_child != nullptr) {
- /*
- Window *focus_target = exclusive_child;
- focus_target->grab_focus();
- while (focus_target->exclusive_child != nullptr) {
- focus_target = focus_target->exclusive_child;
- focus_target->grab_focus();
- }*/
-
- if (!is_embedding_subwindows()) { //not embedding, no need for event
+ if (!is_embedding_subwindows()) { // Not embedding, no need for event.
return;
}
}
@@ -1585,6 +1583,7 @@ void Window::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "always_on_top"), "set_flag", "get_flag", FLAG_ALWAYS_ON_TOP);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "transparent"), "set_flag", "get_flag", FLAG_TRANSPARENT);
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "unfocusable"), "set_flag", "get_flag", FLAG_NO_FOCUS);
+ ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "popup_window"), "set_flag", "get_flag", FLAG_POPUP);
ADD_GROUP("Limits", "");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "min_size"), "set_min_size", "get_min_size");
@@ -1628,6 +1627,7 @@ void Window::_bind_methods() {
BIND_ENUM_CONSTANT(FLAG_ALWAYS_ON_TOP);
BIND_ENUM_CONSTANT(FLAG_TRANSPARENT);
BIND_ENUM_CONSTANT(FLAG_NO_FOCUS);
+ BIND_ENUM_CONSTANT(FLAG_POPUP);
BIND_ENUM_CONSTANT(FLAG_MAX);
BIND_ENUM_CONSTANT(CONTENT_SCALE_MODE_DISABLED);
diff --git a/scene/main/window.h b/scene/main/window.h
index f37689f905..3d8e337b4a 100644
--- a/scene/main/window.h
+++ b/scene/main/window.h
@@ -55,6 +55,7 @@ public:
FLAG_ALWAYS_ON_TOP = DisplayServer::WINDOW_FLAG_ALWAYS_ON_TOP,
FLAG_TRANSPARENT = DisplayServer::WINDOW_FLAG_TRANSPARENT,
FLAG_NO_FOCUS = DisplayServer::WINDOW_FLAG_NO_FOCUS,
+ FLAG_POPUP = DisplayServer::WINDOW_FLAG_POPUP,
FLAG_MAX = DisplayServer::WINDOW_FLAG_MAX,
};
diff --git a/scene/multiplayer/scene_cache_interface.cpp b/scene/multiplayer/scene_cache_interface.cpp
index 2f278ed864..f05dc5a2da 100644
--- a/scene/multiplayer/scene_cache_interface.cpp
+++ b/scene/multiplayer/scene_cache_interface.cpp
@@ -139,74 +139,46 @@ void SceneCacheInterface::process_confirm_path(int p_from, const uint8_t *p_pack
E->get() = true;
}
-bool SceneCacheInterface::_send_confirm_path(Node *p_node, NodePath p_path, PathSentCache *psc, int p_target) {
- bool has_all_peers = true;
- List<int> peers_to_add; // If one is missing, take note to add it.
-
- for (const Set<int>::Element *E = multiplayer->get_connected_peers().front(); E; E = E->next()) {
- if (p_target < 0 && E->get() == -p_target) {
- continue; // Continue, excluded.
- }
-
- if (p_target > 0 && E->get() != p_target) {
- continue; // Continue, not for this peer.
- }
-
- Map<int, bool>::Element *F = psc->confirmed_peers.find(E->get());
-
- if (!F || !F->get()) {
- // Path was not cached, or was cached but is unconfirmed.
- if (!F) {
- // Not cached at all, take note.
- peers_to_add.push_back(E->get());
- }
+Error SceneCacheInterface::_send_confirm_path(Node *p_node, NodePath p_path, PathSentCache *psc, const List<int> &p_peers) {
+ // Encode function name.
+ const CharString path = String(p_path).utf8();
+ const int path_len = encode_cstring(path.get_data(), nullptr);
- has_all_peers = false;
- }
- }
-
- if (peers_to_add.size() > 0) {
- // Those that need to be added, send a message for this.
-
- // Encode function name.
- const CharString path = String(p_path).utf8();
- const int path_len = encode_cstring(path.get_data(), nullptr);
+ // Extract MD5 from rpc methods list.
+ const String methods_md5 = multiplayer->get_rpc_md5(p_node);
+ const int methods_md5_len = 33; // 32 + 1 for the `0` that is added by the encoder.
- // Extract MD5 from rpc methods list.
- const String methods_md5 = multiplayer->get_rpc_md5(p_node);
- const int methods_md5_len = 33; // 32 + 1 for the `0` that is added by the encoder.
-
- Vector<uint8_t> packet;
- packet.resize(1 + 4 + path_len + methods_md5_len);
- int ofs = 0;
+ Vector<uint8_t> packet;
+ packet.resize(1 + 4 + path_len + methods_md5_len);
+ int ofs = 0;
- packet.write[ofs] = MultiplayerAPI::NETWORK_COMMAND_SIMPLIFY_PATH;
- ofs += 1;
+ packet.write[ofs] = MultiplayerAPI::NETWORK_COMMAND_SIMPLIFY_PATH;
+ ofs += 1;
- ofs += encode_cstring(methods_md5.utf8().get_data(), &packet.write[ofs]);
+ ofs += encode_cstring(methods_md5.utf8().get_data(), &packet.write[ofs]);
- ofs += encode_uint32(psc->id, &packet.write[ofs]);
+ ofs += encode_uint32(psc->id, &packet.write[ofs]);
- ofs += encode_cstring(path.get_data(), &packet.write[ofs]);
+ ofs += encode_cstring(path.get_data(), &packet.write[ofs]);
- Ref<MultiplayerPeer> multiplayer_peer = multiplayer->get_multiplayer_peer();
- ERR_FAIL_COND_V(multiplayer_peer.is_null(), false);
+ Ref<MultiplayerPeer> multiplayer_peer = multiplayer->get_multiplayer_peer();
+ ERR_FAIL_COND_V(multiplayer_peer.is_null(), ERR_BUG);
#ifdef DEBUG_ENABLED
- multiplayer->profile_bandwidth("out", packet.size() * peers_to_add.size());
+ multiplayer->profile_bandwidth("out", packet.size() * p_peers.size());
#endif
- for (int &E : peers_to_add) {
- multiplayer_peer->set_target_peer(E); // To all of you.
- multiplayer_peer->set_transfer_channel(0);
- multiplayer_peer->set_transfer_mode(Multiplayer::TRANSFER_MODE_RELIABLE);
- multiplayer_peer->put_packet(packet.ptr(), packet.size());
-
- psc->confirmed_peers.insert(E, false); // Insert into confirmed, but as false since it was not confirmed.
- }
+ Error err = OK;
+ for (int peer_id : p_peers) {
+ multiplayer_peer->set_target_peer(peer_id);
+ multiplayer_peer->set_transfer_channel(0);
+ multiplayer_peer->set_transfer_mode(Multiplayer::TRANSFER_MODE_RELIABLE);
+ err = multiplayer_peer->put_packet(packet.ptr(), packet.size());
+ ERR_FAIL_COND_V(err != OK, err);
+ // Insert into confirmed, but as false since it was not confirmed.
+ psc->confirmed_peers.insert(peer_id, false);
}
-
- return has_all_peers;
+ return err;
}
bool SceneCacheInterface::is_cache_confirmed(NodePath p_path, int p_peer) {
@@ -230,7 +202,43 @@ bool SceneCacheInterface::send_object_cache(Object *p_obj, NodePath p_path, int
}
r_id = psc->id;
- return _send_confirm_path(node, p_path, psc, p_peer_id);
+ bool has_all_peers = true;
+ List<int> peers_to_add; // If one is missing, take note to add it.
+
+ if (p_peer_id > 0) {
+ // Fast single peer check.
+ Map<int, bool>::Element *F = psc->confirmed_peers.find(p_peer_id);
+ if (!F) {
+ peers_to_add.push_back(p_peer_id); // Need to also be notified.
+ has_all_peers = false;
+ } else if (!F->get()) {
+ has_all_peers = false;
+ }
+ } else {
+ // Long and painful.
+ for (const Set<int>::Element *E = multiplayer->get_connected_peers().front(); E; E = E->next()) {
+ if (p_peer_id < 0 && E->get() == -p_peer_id) {
+ continue; // Continue, excluded.
+ }
+ if (p_peer_id > 0 && E->get() != p_peer_id) {
+ continue; // Continue, not for this peer.
+ }
+
+ Map<int, bool>::Element *F = psc->confirmed_peers.find(E->get());
+ if (!F) {
+ peers_to_add.push_back(E->get()); // Need to also be notified.
+ has_all_peers = false;
+ } else if (!F->get()) {
+ has_all_peers = false;
+ }
+ }
+ }
+
+ if (peers_to_add.size()) {
+ _send_confirm_path(node, p_path, psc, peers_to_add);
+ }
+
+ return has_all_peers;
}
Object *SceneCacheInterface::get_cached_object(int p_from, uint32_t p_cache_id) {
diff --git a/scene/multiplayer/scene_cache_interface.h b/scene/multiplayer/scene_cache_interface.h
index 91a53cb948..c709d26b51 100644
--- a/scene/multiplayer/scene_cache_interface.h
+++ b/scene/multiplayer/scene_cache_interface.h
@@ -60,7 +60,7 @@ private:
int last_send_cache_id = 1;
protected:
- bool _send_confirm_path(Node *p_node, NodePath p_path, PathSentCache *psc, int p_target);
+ Error _send_confirm_path(Node *p_node, NodePath p_path, PathSentCache *psc, const List<int> &p_peers);
static MultiplayerCacheInterface *_create(MultiplayerAPI *p_multiplayer);
public:
diff --git a/scene/multiplayer/scene_replication_interface.cpp b/scene/multiplayer/scene_replication_interface.cpp
index 25a704b37e..0764f136e4 100644
--- a/scene/multiplayer/scene_replication_interface.cpp
+++ b/scene/multiplayer/scene_replication_interface.cpp
@@ -350,11 +350,12 @@ void SceneReplicationInterface::_send_sync(int p_peer, uint64_t p_msec) {
}
if (size) {
uint32_t net_id = rep_state->get_net_id(oid);
- if (net_id == 0) {
+ if (net_id == 0 || (net_id & 0x80000000)) {
// First time path based ID.
NodePath rel_path = multiplayer->get_root_path().rel_path_to(sync->get_path());
int path_id = 0;
multiplayer->send_object_cache(sync, rel_path, p_peer, path_id);
+ ERR_CONTINUE_MSG(net_id && net_id != (uint32_t(path_id) | 0x80000000), "This should never happen!");
net_id = path_id;
rep_state->set_net_id(oid, net_id | 0x80000000);
}
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index bc533ff022..312a557602 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -2413,7 +2413,7 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, Interpol
real_t c = 0.0;
// prepare for all cases of interpolation
- if ((loop_mode == LOOP_LINEAR || loop_mode == LOOP_PINGPONG) && p_loop_wrap) {
+ if (loop_mode == LOOP_LINEAR && p_loop_wrap) {
// loop
if (!p_backward) {
// no backward
@@ -2567,11 +2567,19 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, double p_time, Interpol
case INTERPOLATION_CUBIC: {
int pre = idx - 1;
if (pre < 0) {
- pre = 0;
+ if (loop_mode == LOOP_LINEAR && p_loop_wrap) {
+ pre = len - 1;
+ } else {
+ pre = 0;
+ }
}
int post = next + 1;
if (post >= len) {
- post = next;
+ if (loop_mode == LOOP_LINEAR && p_loop_wrap) {
+ post = 0;
+ } else {
+ post = next;
+ }
}
return _cubic_interpolate(p_keys[pre].value, p_keys[idx].value, p_keys[next].value, p_keys[post].value, c);
diff --git a/scene/resources/box_shape_3d.cpp b/scene/resources/box_shape_3d.cpp
index a1ec9a2230..1abbf366fd 100644
--- a/scene/resources/box_shape_3d.cpp
+++ b/scene/resources/box_shape_3d.cpp
@@ -77,6 +77,7 @@ bool BoxShape3D::_get(const StringName &p_name, Variant &r_property) const {
#endif // DISABLE_DEPRECATED
void BoxShape3D::set_size(const Vector3 &p_size) {
+ ERR_FAIL_COND_MSG(p_size.x < 0 || p_size.y < 0 || p_size.z < 0, "BoxShape3D size cannot be negative.");
size = p_size;
_update_shape();
notify_change_to_owners();
diff --git a/scene/resources/capsule_shape_2d.cpp b/scene/resources/capsule_shape_2d.cpp
index 4d2698d27d..a1ad487bff 100644
--- a/scene/resources/capsule_shape_2d.cpp
+++ b/scene/resources/capsule_shape_2d.cpp
@@ -59,6 +59,7 @@ void CapsuleShape2D::_update_shape() {
}
void CapsuleShape2D::set_radius(real_t p_radius) {
+ ERR_FAIL_COND_MSG(p_radius < 0, "CapsuleShape2D radius cannot be negative.");
radius = p_radius;
if (radius > height * 0.5) {
height = radius * 2.0;
@@ -71,6 +72,7 @@ real_t CapsuleShape2D::get_radius() const {
}
void CapsuleShape2D::set_height(real_t p_height) {
+ ERR_FAIL_COND_MSG(p_height < 0, "CapsuleShape2D height cannot be negative.");
height = p_height;
if (radius > height * 0.5) {
radius = height * 0.5;
diff --git a/scene/resources/capsule_shape_3d.cpp b/scene/resources/capsule_shape_3d.cpp
index c16ddad984..2179ce82dd 100644
--- a/scene/resources/capsule_shape_3d.cpp
+++ b/scene/resources/capsule_shape_3d.cpp
@@ -79,6 +79,7 @@ void CapsuleShape3D::_update_shape() {
}
void CapsuleShape3D::set_radius(float p_radius) {
+ ERR_FAIL_COND_MSG(p_radius < 0, "CapsuleShape3D radius cannot be negative.");
radius = p_radius;
if (radius > height * 0.5) {
height = radius * 2.0;
@@ -92,6 +93,7 @@ float CapsuleShape3D::get_radius() const {
}
void CapsuleShape3D::set_height(float p_height) {
+ ERR_FAIL_COND_MSG(p_height < 0, "CapsuleShape3D height cannot be negative.");
height = p_height;
if (radius > height * 0.5) {
radius = height * 0.5;
diff --git a/scene/resources/circle_shape_2d.cpp b/scene/resources/circle_shape_2d.cpp
index 9c16ac2eed..de931fca7e 100644
--- a/scene/resources/circle_shape_2d.cpp
+++ b/scene/resources/circle_shape_2d.cpp
@@ -43,6 +43,7 @@ void CircleShape2D::_update_shape() {
}
void CircleShape2D::set_radius(real_t p_radius) {
+ ERR_FAIL_COND_MSG(p_radius < 0, "CircleShape2D radius cannot be negative.");
radius = p_radius;
_update_shape();
}
diff --git a/scene/resources/cylinder_shape_3d.cpp b/scene/resources/cylinder_shape_3d.cpp
index 5eeb62d17b..c4f1cba341 100644
--- a/scene/resources/cylinder_shape_3d.cpp
+++ b/scene/resources/cylinder_shape_3d.cpp
@@ -72,6 +72,7 @@ void CylinderShape3D::_update_shape() {
}
void CylinderShape3D::set_radius(float p_radius) {
+ ERR_FAIL_COND_MSG(p_radius < 0, "CylinderShape3D radius cannot be negative.");
radius = p_radius;
_update_shape();
notify_change_to_owners();
@@ -82,6 +83,7 @@ float CylinderShape3D::get_radius() const {
}
void CylinderShape3D::set_height(float p_height) {
+ ERR_FAIL_COND_MSG(p_height < 0, "CylinderShape3D height cannot be negative.");
height = p_height;
_update_shape();
notify_change_to_owners();
diff --git a/scene/resources/importer_mesh.cpp b/scene/resources/importer_mesh.cpp
index 92ab091b86..30deb5ccd5 100644
--- a/scene/resources/importer_mesh.cpp
+++ b/scene/resources/importer_mesh.cpp
@@ -275,6 +275,7 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
PackedInt32Array indices = surfaces[i].arrays[RS::ARRAY_INDEX];
Vector<Vector3> normals = surfaces[i].arrays[RS::ARRAY_NORMAL];
Vector<Vector2> uvs = surfaces[i].arrays[RS::ARRAY_TEX_UV];
+ Vector<Vector2> uv2s = surfaces[i].arrays[RS::ARRAY_TEX_UV2];
unsigned int index_count = indices.size();
unsigned int vertex_count = vertices.size();
@@ -287,7 +288,7 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
const int *indices_ptr = indices.ptr();
if (normals.is_empty()) {
- normals.resize(vertices.size());
+ normals.resize(index_count);
Vector3 *n_ptr = normals.ptrw();
for (unsigned int j = 0; j < index_count; j += 3) {
const Vector3 &v0 = vertices_ptr[indices_ptr[j + 0]];
@@ -313,6 +314,7 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
LocalVector<Vector3> merged_normals;
LocalVector<int> merged_normals_counts;
const Vector2 *uvs_ptr = uvs.ptr();
+ const Vector2 *uv2s_ptr = uv2s.ptr();
for (unsigned int j = 0; j < vertex_count; j++) {
const Vector3 &v = vertices_ptr[j];
@@ -327,8 +329,10 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
for (unsigned int k = 0; k < close_verts.size(); k++) {
const Pair<int, int> &idx = close_verts[k];
- // TODO check more attributes?
- if ((!uvs_ptr || uvs_ptr[j].distance_squared_to(uvs_ptr[idx.second]) < CMP_EPSILON2) && normals[idx.second].dot(n) > normal_merge_threshold) {
+ bool is_uvs_close = (!uvs_ptr || uvs_ptr[j].distance_squared_to(uvs_ptr[idx.second]) < CMP_EPSILON2);
+ bool is_uv2s_close = (!uv2s_ptr || uv2s_ptr[j].distance_squared_to(uv2s_ptr[idx.second]) < CMP_EPSILON2);
+ bool is_normals_close = normals[idx.second].dot(n) > normal_merge_threshold;
+ if (is_uvs_close && is_uv2s_close && is_normals_close) {
vertex_remap.push_back(idx.first);
merged_normals[idx.first] += normals[idx.second];
merged_normals_counts[idx.first]++;
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index b74f44c52f..6fb0c0468d 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -330,7 +330,7 @@ void BaseMaterial3D::init_shaders() {
shader_names->rim = "rim";
shader_names->rim_tint = "rim_tint";
shader_names->clearcoat = "clearcoat";
- shader_names->clearcoat_gloss = "clearcoat_gloss";
+ shader_names->clearcoat_roughness = "clearcoat_roughness";
shader_names->anisotropy = "anisotropy_ratio";
shader_names->heightmap_scale = "heightmap_scale";
shader_names->subsurface_scattering_strength = "subsurface_scattering_strength";
@@ -541,12 +541,6 @@ void BaseMaterial3D::_update_shader() {
case SPECULAR_SCHLICK_GGX:
code += ",specular_schlick_ggx";
break;
- case SPECULAR_BLINN:
- code += ",specular_blinn";
- break;
- case SPECULAR_PHONG:
- code += ",specular_phong";
- break;
case SPECULAR_TOON:
code += ",specular_toon";
break;
@@ -690,7 +684,7 @@ void BaseMaterial3D::_update_shader() {
}
if (features[FEATURE_CLEARCOAT]) {
code += "uniform float clearcoat : hint_range(0,1);\n";
- code += "uniform float clearcoat_gloss : hint_range(0,1);\n";
+ code += "uniform float clearcoat_roughness : hint_range(0,1);\n";
code += "uniform sampler2D texture_clearcoat : hint_white," + texfilter_str + ";\n";
}
if (features[FEATURE_ANISOTROPY]) {
@@ -1166,7 +1160,7 @@ void BaseMaterial3D::_update_shader() {
code += " vec2 clearcoat_tex = texture(texture_clearcoat,base_uv).xy;\n";
}
code += " CLEARCOAT = clearcoat*clearcoat_tex.x;";
- code += " CLEARCOAT_GLOSS = clearcoat_gloss*clearcoat_tex.y;\n";
+ code += " CLEARCOAT_ROUGHNESS = clearcoat_roughness*clearcoat_tex.y;\n";
}
if (features[FEATURE_ANISOTROPY]) {
@@ -1408,13 +1402,13 @@ float BaseMaterial3D::get_clearcoat() const {
return clearcoat;
}
-void BaseMaterial3D::set_clearcoat_gloss(float p_clearcoat_gloss) {
- clearcoat_gloss = p_clearcoat_gloss;
- RS::get_singleton()->material_set_param(_get_material(), shader_names->clearcoat_gloss, p_clearcoat_gloss);
+void BaseMaterial3D::set_clearcoat_roughness(float p_clearcoat_roughness) {
+ clearcoat_roughness = p_clearcoat_roughness;
+ RS::get_singleton()->material_set_param(_get_material(), shader_names->clearcoat_roughness, p_clearcoat_roughness);
}
-float BaseMaterial3D::get_clearcoat_gloss() const {
- return clearcoat_gloss;
+float BaseMaterial3D::get_clearcoat_roughness() const {
+ return clearcoat_roughness;
}
void BaseMaterial3D::set_anisotropy(float p_anisotropy) {
@@ -2271,8 +2265,8 @@ void BaseMaterial3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_clearcoat", "clearcoat"), &BaseMaterial3D::set_clearcoat);
ClassDB::bind_method(D_METHOD("get_clearcoat"), &BaseMaterial3D::get_clearcoat);
- ClassDB::bind_method(D_METHOD("set_clearcoat_gloss", "clearcoat_gloss"), &BaseMaterial3D::set_clearcoat_gloss);
- ClassDB::bind_method(D_METHOD("get_clearcoat_gloss"), &BaseMaterial3D::get_clearcoat_gloss);
+ ClassDB::bind_method(D_METHOD("set_clearcoat_roughness", "clearcoat_roughness"), &BaseMaterial3D::set_clearcoat_roughness);
+ ClassDB::bind_method(D_METHOD("get_clearcoat_roughness"), &BaseMaterial3D::get_clearcoat_roughness);
ClassDB::bind_method(D_METHOD("set_anisotropy", "anisotropy"), &BaseMaterial3D::set_anisotropy);
ClassDB::bind_method(D_METHOD("get_anisotropy"), &BaseMaterial3D::get_anisotropy);
@@ -2438,7 +2432,7 @@ void BaseMaterial3D::_bind_methods() {
ADD_GROUP("Shading", "");
ADD_PROPERTY(PropertyInfo(Variant::INT, "shading_mode", PROPERTY_HINT_ENUM, "Unshaded,Per-Pixel,Per-Vertex"), "set_shading_mode", "get_shading_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "diffuse_mode", PROPERTY_HINT_ENUM, "Burley,Lambert,Lambert Wrap,Toon"), "set_diffuse_mode", "get_diffuse_mode");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "specular_mode", PROPERTY_HINT_ENUM, "SchlickGGX,Blinn,Phong,Toon,Disabled"), "set_specular_mode", "get_specular_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "specular_mode", PROPERTY_HINT_ENUM, "SchlickGGX,Toon,Disabled"), "set_specular_mode", "get_specular_mode");
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "disable_ambient_light"), "set_flag", "get_flag", FLAG_DISABLE_AMBIENT_LIGHT);
ADD_GROUP("Vertex Color", "vertex_color");
@@ -2486,7 +2480,7 @@ void BaseMaterial3D::_bind_methods() {
ADD_GROUP("Clearcoat", "clearcoat_");
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "clearcoat_enabled"), "set_feature", "get_feature", FEATURE_CLEARCOAT);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "clearcoat", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_clearcoat", "get_clearcoat");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "clearcoat_gloss", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_clearcoat_gloss", "get_clearcoat_gloss");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "clearcoat_roughness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_clearcoat_roughness", "get_clearcoat_roughness");
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "clearcoat_texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_texture", "get_texture", TEXTURE_CLEARCOAT);
ADD_GROUP("Anisotropy", "anisotropy_");
@@ -2693,8 +2687,6 @@ void BaseMaterial3D::_bind_methods() {
BIND_ENUM_CONSTANT(DIFFUSE_TOON);
BIND_ENUM_CONSTANT(SPECULAR_SCHLICK_GGX);
- BIND_ENUM_CONSTANT(SPECULAR_BLINN);
- BIND_ENUM_CONSTANT(SPECULAR_PHONG);
BIND_ENUM_CONSTANT(SPECULAR_TOON);
BIND_ENUM_CONSTANT(SPECULAR_DISABLED);
@@ -2732,7 +2724,7 @@ BaseMaterial3D::BaseMaterial3D(bool p_orm) :
set_rim(1.0);
set_rim_tint(0.5);
set_clearcoat(1);
- set_clearcoat_gloss(0.5);
+ set_clearcoat_roughness(0.5);
set_anisotropy(0);
set_heightmap_scale(0.05);
set_subsurface_scattering_strength(0);
diff --git a/scene/resources/material.h b/scene/resources/material.h
index 57591bee2f..a79f072f9a 100644
--- a/scene/resources/material.h
+++ b/scene/resources/material.h
@@ -252,8 +252,6 @@ public:
enum SpecularMode {
SPECULAR_SCHLICK_GGX,
- SPECULAR_BLINN,
- SPECULAR_PHONG,
SPECULAR_TOON,
SPECULAR_DISABLED,
SPECULAR_MAX
@@ -387,7 +385,7 @@ private:
StringName rim;
StringName rim_tint;
StringName clearcoat;
- StringName clearcoat_gloss;
+ StringName clearcoat_roughness;
StringName anisotropy;
StringName heightmap_scale;
StringName subsurface_scattering_strength;
@@ -454,7 +452,7 @@ private:
float rim;
float rim_tint;
float clearcoat;
- float clearcoat_gloss;
+ float clearcoat_roughness;
float anisotropy;
float heightmap_scale;
float subsurface_scattering_strength;
@@ -572,8 +570,8 @@ public:
void set_clearcoat(float p_clearcoat);
float get_clearcoat() const;
- void set_clearcoat_gloss(float p_clearcoat_gloss);
- float get_clearcoat_gloss() const;
+ void set_clearcoat_roughness(float p_clearcoat_roughness);
+ float get_clearcoat_roughness() const;
void set_anisotropy(float p_anisotropy);
float get_anisotropy() const;
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 441e84eccc..6b44b05e02 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -1684,6 +1684,7 @@ Error ArrayMesh::lightmap_unwrap(const Transform3D &p_base_transform, float p_te
Error ArrayMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform, float p_texel_size, const Vector<uint8_t> &p_src_cache, Vector<uint8_t> &r_dst_cache, bool p_generate_cache) {
ERR_FAIL_COND_V(!array_mesh_lightmap_unwrap_callback, ERR_UNCONFIGURED);
ERR_FAIL_COND_V_MSG(blend_shapes.size() != 0, ERR_UNAVAILABLE, "Can't unwrap mesh with blend shapes.");
+ ERR_FAIL_COND_V_MSG(p_texel_size <= 0.0f, ERR_PARAMETER_RANGE_ERROR, "Texel size must be greater than 0.");
LocalVector<float> vertices;
LocalVector<float> normals;
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index f9a4eba978..9d388d465d 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -529,10 +529,6 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
if (!gi.persistent) {
continue;
}
- /*
- if (instance_state_node>=0 && instance_state->is_node_in_group(instance_state_node,gi.name))
- continue; //group was instantiated, don't add here
- */
bool skip = false;
for (const SceneState::PackState &ia : states_stack) {
diff --git a/scene/resources/rectangle_shape_2d.cpp b/scene/resources/rectangle_shape_2d.cpp
index 27659f724e..5e88c9974c 100644
--- a/scene/resources/rectangle_shape_2d.cpp
+++ b/scene/resources/rectangle_shape_2d.cpp
@@ -58,6 +58,7 @@ bool RectangleShape2D::_get(const StringName &p_name, Variant &r_property) const
#endif // DISABLE_DEPRECATED
void RectangleShape2D::set_size(const Vector2 &p_size) {
+ ERR_FAIL_COND_MSG(p_size.x < 0 || p_size.y < 0, "RectangleShape2D size cannot be negative.");
size = p_size;
_update_shape();
}
diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp
index c03faa2c2d..d9ac967699 100644
--- a/scene/resources/resource_format_text.cpp
+++ b/scene/resources/resource_format_text.cpp
@@ -153,7 +153,7 @@ Error ResourceLoaderText::_parse_ext_resource(VariantParser::Stream *p_stream, R
RES res = ResourceLoader::load_threaded_get(path);
if (res.is_null()) {
if (ResourceLoader::get_abort_on_missing_resources()) {
- error = ERR_FILE_CORRUPT;
+ error = ERR_FILE_MISSING_DEPENDENCIES;
error_text = "[ext_resource] referenced nonexistent resource at: " + path;
_printerr();
return error;
@@ -165,7 +165,7 @@ Error ResourceLoaderText::_parse_ext_resource(VariantParser::Stream *p_stream, R
r_res = res;
}
} else {
- error = ERR_FILE_CORRUPT;
+ error = ERR_FILE_MISSING_DEPENDENCIES;
error_text = "[ext_resource] referenced non-loaded resource at: " + path;
_printerr();
return error;
@@ -265,7 +265,9 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars
error = VariantParser::parse_tag_assign_eof(&stream, lines, error_text, next_tag, assign, value, &parser);
if (error) {
- if (error != ERR_FILE_EOF) {
+ if (error == ERR_FILE_MISSING_DEPENDENCIES) {
+ // Resource loading error, just skip it.
+ } else if (error != ERR_FILE_EOF) {
_printerr();
return Ref<PackedScene>();
} else {
diff --git a/scene/resources/sky.cpp b/scene/resources/sky.cpp
index 917aa40934..9cb6a16f5c 100644
--- a/scene/resources/sky.cpp
+++ b/scene/resources/sky.cpp
@@ -83,7 +83,7 @@ void Sky::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_material"), &Sky::get_material);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "sky_material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial,PanoramaSkyMaterial,ProceduralSkyMaterial,PhysicalSkyMaterial"), "set_material", "get_material");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Automatic,High Quality (Slow),High Quality Incremental (Average),Real-Time (Fast)"), "set_process_mode", "get_process_mode");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "process_mode", PROPERTY_HINT_ENUM, "Automatic,HighQuality,HighQualityIncremental,RealTime"), "set_process_mode", "get_process_mode");
ADD_PROPERTY(PropertyInfo(Variant::INT, "radiance_size", PROPERTY_HINT_ENUM, "32,64,128,256,512,1024,2048"), "set_radiance_size", "get_radiance_size");
BIND_ENUM_CONSTANT(RADIANCE_SIZE_32);
diff --git a/scene/resources/sky.h b/scene/resources/sky.h
index 3653568ac6..5e52239032 100644
--- a/scene/resources/sky.h
+++ b/scene/resources/sky.h
@@ -59,7 +59,7 @@ public:
private:
RID sky;
- ProcessMode mode = PROCESS_MODE_REALTIME;
+ ProcessMode mode = PROCESS_MODE_AUTOMATIC;
RadianceSize radiance_size = RADIANCE_SIZE_256;
Ref<Material> sky_material;
diff --git a/scene/resources/sphere_shape_3d.cpp b/scene/resources/sphere_shape_3d.cpp
index ee789362c9..8282992401 100644
--- a/scene/resources/sphere_shape_3d.cpp
+++ b/scene/resources/sphere_shape_3d.cpp
@@ -63,6 +63,7 @@ void SphereShape3D::_update_shape() {
}
void SphereShape3D::set_radius(float p_radius) {
+ ERR_FAIL_COND_MSG(p_radius < 0, "SphereShape3D radius cannot be negative.");
radius = p_radius;
_update_shape();
notify_change_to_owners();
diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp
index 52151ae846..8ff1fde2cf 100644
--- a/scene/resources/surface_tool.cpp
+++ b/scene/resources/surface_tool.cpp
@@ -150,12 +150,15 @@ uint32_t SurfaceTool::TriangleHasher::hash(const int *p_triangle) {
int t1 = p_triangle[1];
int t2 = p_triangle[2];
- if (t0 > t1)
+ if (t0 > t1) {
SWAP(t0, t1);
- if (t1 > t2)
+ }
+ if (t1 > t2) {
SWAP(t1, t2);
- if (t0 > t1)
+ }
+ if (t0 > t1) {
SWAP(t0, t1);
+ }
return (t0 * 73856093) ^ (t1 * 19349663) ^ (t2 * 83492791);
}
@@ -165,23 +168,29 @@ bool SurfaceTool::TriangleHasher::compare(const int *p_lhs, const int *p_rhs) {
int r1 = p_rhs[1];
int r2 = p_rhs[2];
- if (r0 > r1)
+ if (r0 > r1) {
SWAP(r0, r1);
- if (r1 > r2)
+ }
+ if (r1 > r2) {
SWAP(r1, r2);
- if (r0 > r1)
+ }
+ if (r0 > r1) {
SWAP(r0, r1);
+ }
int l0 = p_lhs[0];
int l1 = p_lhs[1];
int l2 = p_lhs[2];
- if (l0 > l1)
+ if (l0 > l1) {
SWAP(l0, l1);
- if (l1 > l2)
+ }
+ if (l1 > l2) {
SWAP(l1, l2);
- if (l0 > l1)
+ }
+ if (l0 > l1) {
SWAP(l0, l1);
+ }
return l0 == r0 && l1 == r1 && l2 == r2;
}
diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp
index 1e84947b87..1174117028 100644
--- a/scene/resources/tile_set.cpp
+++ b/scene/resources/tile_set.cpp
@@ -4432,6 +4432,10 @@ void TileSetAtlasSource::_update_padded_texture() {
Ref<Image> src = texture->get_image();
+ if (!src.is_valid()) {
+ return;
+ }
+
Ref<Image> image;
image.instantiate();
image->create(size.x, size.y, false, src->get_format());
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index dae61c8609..47ca643029 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -3163,7 +3163,7 @@ const VisualShaderNodeOutput::Port VisualShaderNodeOutput::ports[] = {
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "rim", "RIM" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "rim_tint", "RIM_TINT" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "clearcoat", "CLEARCOAT" },
- { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "clearcoat_gloss", "CLEARCOAT_GLOSS" },
+ { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "clearcoat_roughness", "CLEARCOAT_ROUGHNESS" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "anisotropy", "ANISOTROPY" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR_2D, "anisotropy_flow", "ANISOTROPY_FLOW" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "subsurf_scatter", "SSS_STRENGTH" },
diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp
index f2479199ee..a6aa6d8c49 100644
--- a/scene/resources/visual_shader_nodes.cpp
+++ b/scene/resources/visual_shader_nodes.cpp
@@ -2843,8 +2843,7 @@ String VisualShaderNodeColorFunc::generate_code(Shader::Mode p_mode, VisualShade
code += " vec3 c = " + p_input_vars[0] + ";\n";
code += " float max1 = max(c.r, c.g);\n";
code += " float max2 = max(max1, c.b);\n";
- code += " float max3 = max(max1, max2);\n";
- code += " " + p_output_vars[0] + " = vec3(max3, max3, max3);\n";
+ code += " " + p_output_vars[0] + " = vec3(max2, max2, max2);\n";
code += " }\n";
break;
case FUNC_SEPIA:
diff --git a/scene/resources/visual_shader_particle_nodes.cpp b/scene/resources/visual_shader_particle_nodes.cpp
index 1885211d57..398c33c452 100644
--- a/scene/resources/visual_shader_particle_nodes.cpp
+++ b/scene/resources/visual_shader_particle_nodes.cpp
@@ -1318,7 +1318,7 @@ String VisualShaderNodeParticleOutput::generate_code(Shader::Mode p_mode, Visual
code += tab + "TRANSFORM = " + p_input_vars[5] + ";\n";
}
} else {
- if (!p_input_vars[0].is_empty()) { // active (begin)
+ if (!p_input_vars[0].is_empty()) { // Active (begin).
code += tab + "ACTIVE = " + p_input_vars[0] + ";\n";
code += tab + "if(ACTIVE) {\n";
tab += " ";
@@ -1381,7 +1381,7 @@ String VisualShaderNodeParticleOutput::generate_code(Shader::Mode p_mode, Visual
code += tab + "TRANSFORM " + op + " mat4(vec4(" + p_input_vars[scale] + ", 0, 0, 0), vec4(0, " + p_input_vars[scale] + ", 0, 0), vec4(0, 0, " + p_input_vars[scale] + ", 0), vec4(0, 0, 0, 1));\n";
}
}
- if (!p_input_vars[0].is_empty()) { // active (end)
+ if (!p_input_vars[0].is_empty()) { // Active (end).
code += " }\n";
}
}
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 39060286a4..a710658bff 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -200,6 +200,7 @@ bool AudioStream::is_monophonic() const {
void AudioStream::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_length"), &AudioStream::get_length);
ClassDB::bind_method(D_METHOD("is_monophonic"), &AudioStream::is_monophonic);
+ ClassDB::bind_method(D_METHOD("instance_playback"), &AudioStream::instance_playback);
GDVIRTUAL_BIND(_instance_playback);
GDVIRTUAL_BIND(_get_stream_name);
GDVIRTUAL_BIND(_get_length);
diff --git a/servers/audio/effects/audio_effect_delay.cpp b/servers/audio/effects/audio_effect_delay.cpp
index bddd235204..1909ab6eae 100644
--- a/servers/audio/effects/audio_effect_delay.cpp
+++ b/servers/audio/effects/audio_effect_delay.cpp
@@ -54,15 +54,12 @@ void AudioEffectDelayInstance::_process_chunk(const AudioFrame *p_src_frames, Au
float tap_1_level_f = base->tap_1_active ? Math::db2linear(base->tap_1_level) : 0.0;
int tap_1_delay_frames = int((base->tap_1_delay_ms / 1000.0) * mix_rate);
- ;
float tap_2_level_f = base->tap_2_active ? Math::db2linear(base->tap_2_level) : 0.0;
int tap_2_delay_frames = int((base->tap_2_delay_ms / 1000.0) * mix_rate);
- ;
float feedback_level_f = base->feedback_active ? Math::db2linear(base->feedback_level) : 0.0;
unsigned int feedback_delay_frames = int((base->feedback_delay_ms / 1000.0) * mix_rate);
- ;
AudioFrame tap1_vol = AudioFrame(tap_1_level_f, tap_1_level_f);
diff --git a/servers/audio/effects/audio_effect_pitch_shift.cpp b/servers/audio/effects/audio_effect_pitch_shift.cpp
index ba2d257c0a..3c53887931 100644
--- a/servers/audio/effects/audio_effect_pitch_shift.cpp
+++ b/servers/audio/effects/audio_effect_pitch_shift.cpp
@@ -74,7 +74,7 @@
*
*****************************************************************************/
-void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int64_t fftFrameSize, int64_t osamp, float sampleRate, float *indata, float *outdata,int stride) {
+void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long fftFrameSize, long osamp, float sampleRate, float *indata, float *outdata,int stride) {
/*
@@ -85,32 +85,19 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
*/
double magn, phase, tmp, window, real, imag;
- double freqPerBin, expct, reciprocalFftFrameSize;
- int64_t i,k, qpd, index, inFifoLatency, stepSize, fftFrameSize2;
+ double freqPerBin, expct;
+ long i,k, qpd, index, inFifoLatency, stepSize, fftFrameSize2;
/* set up some handy variables */
fftFrameSize2 = fftFrameSize/2;
- reciprocalFftFrameSize = 1./fftFrameSize;
stepSize = fftFrameSize/osamp;
- freqPerBin = reciprocalFftFrameSize * sampleRate;
- expct = Math_TAU * reciprocalFftFrameSize * stepSize;
+ freqPerBin = sampleRate/(double)fftFrameSize;
+ expct = 2.*Math_PI*(double)stepSize/(double)fftFrameSize;
inFifoLatency = fftFrameSize-stepSize;
- if (gRover == 0) {
- gRover = inFifoLatency;
- }
+ if (gRover == 0) { gRover = inFifoLatency;
+}
- // If pitchShift changes clear arrays to prevent some artifacts and quality loss.
- if (lastPitchShift != pitchShift) {
- lastPitchShift = pitchShift;
- memset(gInFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
- memset(gOutFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
- memset(gFFTworksp, 0, 2 * MAX_FRAME_LENGTH * sizeof(double));
- memset(gLastPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(double));
- memset(gSumPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(double));
- memset(gOutputAccum, 0, 2 * MAX_FRAME_LENGTH * sizeof(double));
- memset(gAnaFreq, 0, MAX_FRAME_LENGTH * sizeof(double));
- memset(gAnaMagn, 0, MAX_FRAME_LENGTH * sizeof(double));
- }
+ /* initialize our static arrays */
/* main processing loop */
for (i = 0; i < numSampsToProcess; i++){
@@ -125,7 +112,7 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
/* do windowing and re,im interleave */
for (k = 0; k < fftFrameSize;k++) {
- window = -.5*cos(Math_TAU * reciprocalFftFrameSize * k)+.5;
+ window = -.5*cos(2.*Math_PI*(double)k/(double)fftFrameSize)+.5;
gFFTworksp[2*k] = gInFIFO[k] * window;
gFFTworksp[2*k+1] = 0.;
}
@@ -137,7 +124,6 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
/* this is the analysis step */
for (k = 0; k <= fftFrameSize2; k++) {
-
/* de-interlace FFT buffer */
real = gFFTworksp[2*k];
imag = gFFTworksp[2*k+1];
@@ -155,15 +141,13 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
/* map delta phase into +/- Pi interval */
qpd = tmp/Math_PI;
- if (qpd >= 0) {
- qpd += qpd&1;
- } else {
- qpd -= qpd&1;
- }
+ if (qpd >= 0) { qpd += qpd&1;
+ } else { qpd -= qpd&1;
+}
tmp -= Math_PI*(double)qpd;
/* get deviation from bin frequency from the +/- Pi interval */
- tmp = osamp*tmp/Math_TAU;
+ tmp = osamp*tmp/(2.*Math_PI);
/* compute the k-th partials' true frequency */
tmp = (double)k*freqPerBin + tmp*freqPerBin;
@@ -176,8 +160,8 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
/* ***************** PROCESSING ******************* */
/* this does the actual pitch shifting */
- memset(gSynMagn, 0, fftFrameSize*sizeof(double));
- memset(gSynFreq, 0, fftFrameSize*sizeof(double));
+ memset(gSynMagn, 0, fftFrameSize*sizeof(float));
+ memset(gSynFreq, 0, fftFrameSize*sizeof(float));
for (k = 0; k <= fftFrameSize2; k++) {
index = k*pitchShift;
if (index <= fftFrameSize2) {
@@ -200,7 +184,7 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
tmp /= freqPerBin;
/* take osamp into account */
- tmp = Math_TAU*tmp/osamp;
+ tmp = 2.*Math_PI*tmp/osamp;
/* add the overlap phase advance back in */
tmp += (double)k*expct;
@@ -215,35 +199,33 @@ void SMBPitchShift::PitchShift(float pitchShift, int64_t numSampsToProcess, int6
}
/* zero negative frequencies */
- for (k = fftFrameSize+2; k < 2*MAX_FRAME_LENGTH; k++) {
- gFFTworksp[k] = 0.;
- }
+ for (k = fftFrameSize+2; k < 2*fftFrameSize; k++) { gFFTworksp[k] = 0.;
+}
/* do inverse transform */
smbFft(gFFTworksp, fftFrameSize, 1);
/* do windowing and add to output accumulator */
for(k=0; k < fftFrameSize; k++) {
- window = -.5*cos(Math_TAU * reciprocalFftFrameSize * k)+.5;
+ window = -.5*cos(2.*Math_PI*(double)k/(double)fftFrameSize)+.5;
gOutputAccum[k] += 2.*window*gFFTworksp[2*k]/(fftFrameSize2*osamp);
}
- for (k = 0; k < stepSize; k++) {
- gOutFIFO[k] = gOutputAccum[k];
- }
+ for (k = 0; k < stepSize; k++) { gOutFIFO[k] = gOutputAccum[k];
+}
/* shift accumulator */
- memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameSize*sizeof(double));
+ memmove(gOutputAccum, gOutputAccum+stepSize, fftFrameSize*sizeof(float));
/* move input FIFO */
- for (k = 0; k < inFifoLatency; k++) {
- gInFIFO[k] = gInFIFO[k+stepSize];
- }
+ for (k = 0; k < inFifoLatency; k++) { gInFIFO[k] = gInFIFO[k+stepSize];
+}
}
}
}
-void SMBPitchShift::smbFft(double *fftBuffer, int64_t fftFrameSize, int64_t sign)
+
+void SMBPitchShift::smbFft(float *fftBuffer, long fftFrameSize, long sign)
/*
FFT routine, (C)1996 S.M.Bernsee. Sign = -1 is FFT, 1 is iFFT (inverse)
Fills fftBuffer[0...2*fftFrameSize-1] with the Fourier transform of the
@@ -256,16 +238,14 @@ void SMBPitchShift::smbFft(double *fftBuffer, int64_t fftFrameSize, int64_t sign
of the frequencies of interest is in fftBuffer[0...fftFrameSize].
*/
{
- double wr, wi, arg, *p1, *p2, temp;
- double tr, ti, ur, ui, *p1r, *p1i, *p2r, *p2i;
- int64_t i, bitm, j, le, le2, k, logN;
- logN = (int64_t)(log(fftFrameSize) / log(2.) + .5);
+ float wr, wi, arg, *p1, *p2, temp;
+ float tr, ti, ur, ui, *p1r, *p1i, *p2r, *p2i;
+ long i, bitm, j, le, le2, k;
for (i = 2; i < 2*fftFrameSize-2; i += 2) {
for (bitm = 2, j = 0; bitm < 2*fftFrameSize; bitm <<= 1) {
- if (i & bitm) {
- j++;
- }
+ if (i & bitm) { j++;
+}
j <<= 1;
}
if (i < j) {
@@ -275,8 +255,7 @@ void SMBPitchShift::smbFft(double *fftBuffer, int64_t fftFrameSize, int64_t sign
*p1 = *p2; *p2 = temp;
}
}
-
- for (k = 0, le = 2; k < logN; k++) {
+ for (k = 0, le = 2; k < (long)(log((double)fftFrameSize)/log(2.)+.5); k++) {
le <<= 1;
le2 = le>>1;
ur = 1.0;
@@ -309,14 +288,6 @@ void SMBPitchShift::smbFft(double *fftBuffer, int64_t fftFrameSize, int64_t sign
void AudioEffectPitchShiftInstance::process(const AudioFrame *p_src_frames, AudioFrame *p_dst_frames, int p_frame_count) {
float sample_rate = AudioServer::get_singleton()->get_mix_rate();
- // For pitch_scale 1.0 it's cheaper to just pass samples without processing them.
- if (Math::is_equal_approx(base->pitch_scale, 1.0f)) {
- for (int i = 0; i < p_frame_count; i++) {
- p_dst_frames[i] = p_src_frames[i];
- }
- return;
- }
-
float *in_l = (float *)p_src_frames;
float *in_r = in_l + 1;
@@ -390,4 +361,7 @@ AudioEffectPitchShift::AudioEffectPitchShift() {
pitch_scale = 1.0;
oversampling = 4;
fft_size = FFT_SIZE_2048;
+ wet = 0.0;
+ dry = 0.0;
+ filter = false;
}
diff --git a/servers/audio/effects/audio_effect_pitch_shift.h b/servers/audio/effects/audio_effect_pitch_shift.h
index 23da61bb32..0478d05ceb 100644
--- a/servers/audio/effects/audio_effect_pitch_shift.h
+++ b/servers/audio/effects/audio_effect_pitch_shift.h
@@ -40,33 +40,31 @@ class SMBPitchShift {
float gInFIFO[MAX_FRAME_LENGTH];
float gOutFIFO[MAX_FRAME_LENGTH];
- double gFFTworksp[2 * MAX_FRAME_LENGTH];
- double gLastPhase[MAX_FRAME_LENGTH / 2 + 1];
- double gSumPhase[MAX_FRAME_LENGTH / 2 + 1];
- double gOutputAccum[2 * MAX_FRAME_LENGTH];
- double gAnaFreq[MAX_FRAME_LENGTH];
- double gAnaMagn[MAX_FRAME_LENGTH];
- double gSynFreq[MAX_FRAME_LENGTH];
- double gSynMagn[MAX_FRAME_LENGTH];
- int64_t gRover;
- float lastPitchShift;
-
- void smbFft(double *fftBuffer, int64_t fftFrameSize, int64_t sign);
+ float gFFTworksp[2 * MAX_FRAME_LENGTH];
+ float gLastPhase[MAX_FRAME_LENGTH / 2 + 1];
+ float gSumPhase[MAX_FRAME_LENGTH / 2 + 1];
+ float gOutputAccum[2 * MAX_FRAME_LENGTH];
+ float gAnaFreq[MAX_FRAME_LENGTH];
+ float gAnaMagn[MAX_FRAME_LENGTH];
+ float gSynFreq[MAX_FRAME_LENGTH];
+ float gSynMagn[MAX_FRAME_LENGTH];
+ long gRover;
+
+ void smbFft(float *fftBuffer, long fftFrameSize, long sign);
public:
- void PitchShift(float pitchShift, int64_t numSampsToProcess, int64_t fftFrameSize, int64_t osamp, float sampleRate, float *indata, float *outdata, int stride);
+ void PitchShift(float pitchShift, long numSampsToProcess, long fftFrameSize, long osamp, float sampleRate, float *indata, float *outdata, int stride);
SMBPitchShift() {
gRover = 0;
memset(gInFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
memset(gOutFIFO, 0, MAX_FRAME_LENGTH * sizeof(float));
- memset(gFFTworksp, 0, 2 * MAX_FRAME_LENGTH * sizeof(double));
- memset(gLastPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(double));
- memset(gSumPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(double));
- memset(gOutputAccum, 0, 2 * MAX_FRAME_LENGTH * sizeof(double));
- memset(gAnaFreq, 0, MAX_FRAME_LENGTH * sizeof(double));
- memset(gAnaMagn, 0, MAX_FRAME_LENGTH * sizeof(double));
- lastPitchShift = 1.0;
+ memset(gFFTworksp, 0, 2 * MAX_FRAME_LENGTH * sizeof(float));
+ memset(gLastPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(float));
+ memset(gSumPhase, 0, (MAX_FRAME_LENGTH / 2 + 1) * sizeof(float));
+ memset(gOutputAccum, 0, 2 * MAX_FRAME_LENGTH * sizeof(float));
+ memset(gAnaFreq, 0, MAX_FRAME_LENGTH * sizeof(float));
+ memset(gAnaMagn, 0, MAX_FRAME_LENGTH * sizeof(float));
}
};
@@ -103,6 +101,9 @@ public:
float pitch_scale;
int oversampling;
FFTSize fft_size;
+ float wet;
+ float dry;
+ bool filter;
protected:
static void _bind_methods();
diff --git a/servers/audio/effects/audio_effect_stereo_enhance.cpp b/servers/audio/effects/audio_effect_stereo_enhance.cpp
index 757edd6d43..c81efc55e2 100644
--- a/servers/audio/effects/audio_effect_stereo_enhance.cpp
+++ b/servers/audio/effects/audio_effect_stereo_enhance.cpp
@@ -61,7 +61,6 @@ void AudioEffectStereoEnhanceInstance::process(const AudioFrame *p_src_frames, A
//r is delayed
r = delay_ringbuff[(ringbuff_pos - delay_frames) & ringbuff_mask];
- ;
}
p_dst_frames[i].l = l;
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index f00b8077d1..9d83e5cacc 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -1731,6 +1731,10 @@ void AudioServer::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "bus_count"), "set_bus_count", "get_bus_count");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "device"), "set_device", "get_device");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "capture_device"), "capture_set_device", "capture_get_device");
+ // The default value may be set to an empty string by the platform-specific audio driver.
+ // Override for class reference generation purposes.
+ ADD_PROPERTY_DEFAULT("capture_device", "Default");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "playback_speed_scale"), "set_playback_speed_scale", "get_playback_speed_scale");
ADD_SIGNAL(MethodInfo("bus_layout_changed"));
diff --git a/servers/display_server.cpp b/servers/display_server.cpp
index 4d7e2b4d9f..819c151087 100644
--- a/servers/display_server.cpp
+++ b/servers/display_server.cpp
@@ -399,6 +399,9 @@ void DisplayServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("delete_sub_window", "window_id"), &DisplayServer::delete_sub_window);
ClassDB::bind_method(D_METHOD("window_get_native_handle", "handle_type", "window_id"), &DisplayServer::window_get_native_handle, DEFVAL(MAIN_WINDOW_ID));
+ ClassDB::bind_method(D_METHOD("window_get_active_popup"), &DisplayServer::window_get_active_popup);
+ ClassDB::bind_method(D_METHOD("window_set_popup_safe_rect", "window", "rect"), &DisplayServer::window_set_popup_safe_rect);
+ ClassDB::bind_method(D_METHOD("window_get_popup_safe_rect", "window"), &DisplayServer::window_get_popup_safe_rect);
ClassDB::bind_method(D_METHOD("window_set_title", "title", "window_id"), &DisplayServer::window_set_title, DEFVAL(MAIN_WINDOW_ID));
ClassDB::bind_method(D_METHOD("window_set_mouse_passthrough", "region", "window_id"), &DisplayServer::window_set_mouse_passthrough, DEFVAL(MAIN_WINDOW_ID));
@@ -451,7 +454,7 @@ void DisplayServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("ime_get_selection"), &DisplayServer::ime_get_selection);
ClassDB::bind_method(D_METHOD("ime_get_text"), &DisplayServer::ime_get_text);
- ClassDB::bind_method(D_METHOD("virtual_keyboard_show", "existing_text", "position", "multiline", "max_length", "cursor_start", "cursor_end"), &DisplayServer::virtual_keyboard_show, DEFVAL(Rect2i()), DEFVAL(false), DEFVAL(-1), DEFVAL(-1), DEFVAL(-1));
+ ClassDB::bind_method(D_METHOD("virtual_keyboard_show", "existing_text", "position", "multiline", "max_length", "cursor_start", "cursor_end"), &DisplayServer::virtual_keyboard_show, DEFVAL(Rect2()), DEFVAL(false), DEFVAL(-1), DEFVAL(-1), DEFVAL(-1));
ClassDB::bind_method(D_METHOD("virtual_keyboard_hide"), &DisplayServer::virtual_keyboard_hide);
ClassDB::bind_method(D_METHOD("virtual_keyboard_get_height"), &DisplayServer::virtual_keyboard_get_height);
@@ -552,6 +555,7 @@ void DisplayServer::_bind_methods() {
BIND_ENUM_CONSTANT(WINDOW_FLAG_ALWAYS_ON_TOP);
BIND_ENUM_CONSTANT(WINDOW_FLAG_TRANSPARENT);
BIND_ENUM_CONSTANT(WINDOW_FLAG_NO_FOCUS);
+ BIND_ENUM_CONSTANT(WINDOW_FLAG_POPUP);
BIND_ENUM_CONSTANT(WINDOW_FLAG_MAX);
BIND_ENUM_CONSTANT(WINDOW_EVENT_MOUSE_ENTER);
diff --git a/servers/display_server.h b/servers/display_server.h
index 81ac551f57..67dbab0924 100644
--- a/servers/display_server.h
+++ b/servers/display_server.h
@@ -226,6 +226,7 @@ public:
WINDOW_FLAG_ALWAYS_ON_TOP,
WINDOW_FLAG_TRANSPARENT,
WINDOW_FLAG_NO_FOCUS,
+ WINDOW_FLAG_POPUP,
WINDOW_FLAG_MAX,
};
@@ -235,13 +236,18 @@ public:
WINDOW_FLAG_BORDERLESS_BIT = (1 << WINDOW_FLAG_BORDERLESS),
WINDOW_FLAG_ALWAYS_ON_TOP_BIT = (1 << WINDOW_FLAG_ALWAYS_ON_TOP),
WINDOW_FLAG_TRANSPARENT_BIT = (1 << WINDOW_FLAG_TRANSPARENT),
- WINDOW_FLAG_NO_FOCUS_BIT = (1 << WINDOW_FLAG_NO_FOCUS)
+ WINDOW_FLAG_NO_FOCUS_BIT = (1 << WINDOW_FLAG_NO_FOCUS),
+ WINDOW_FLAG_POPUP_BIT = (1 << WINDOW_FLAG_POPUP),
};
virtual WindowID create_sub_window(WindowMode p_mode, VSyncMode p_vsync_mode, uint32_t p_flags, const Rect2i &p_rect = Rect2i());
virtual void show_window(WindowID p_id);
virtual void delete_sub_window(WindowID p_id);
+ virtual WindowID window_get_active_popup() const { return INVALID_WINDOW_ID; };
+ virtual void window_set_popup_safe_rect(WindowID p_window, const Rect2i &p_rect){};
+ virtual Rect2i window_get_popup_safe_rect(WindowID p_window) const { return Rect2i(); };
+
virtual int64_t window_get_native_handle(HandleType p_handle_type, WindowID p_window = MAIN_WINDOW_ID) const;
virtual WindowID get_window_at_screen_position(const Point2i &p_position) const = 0;
diff --git a/servers/physics_2d/godot_body_pair_2d.cpp b/servers/physics_2d/godot_body_pair_2d.cpp
index 1986191cc3..2bf1e5a1d4 100644
--- a/servers/physics_2d/godot_body_pair_2d.cpp
+++ b/servers/physics_2d/godot_body_pair_2d.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "godot_body_pair_2d.h"
+
#include "godot_collision_solver_2d.h"
#include "godot_space_2d.h"
@@ -303,7 +304,7 @@ bool GodotBodyPair2D::setup(real_t p_step) {
bool valid = false;
for (int i = 0; i < contact_count; i++) {
Contact &c = contacts[i];
- if (c.normal.dot(direction) > -CMP_EPSILON) { //greater (normal inverted)
+ if (c.normal.dot(direction) > -CMP_EPSILON) { // Greater (normal inverted).
continue;
}
valid = true;
@@ -321,7 +322,7 @@ bool GodotBodyPair2D::setup(real_t p_step) {
bool valid = false;
for (int i = 0; i < contact_count; i++) {
Contact &c = contacts[i];
- if (c.normal.dot(direction) < CMP_EPSILON) { //less (normal ok)
+ if (c.normal.dot(direction) < CMP_EPSILON) { // Less (normal ok).
continue;
}
valid = true;
diff --git a/servers/physics_2d/godot_collision_solver_2d_sat.cpp b/servers/physics_2d/godot_collision_solver_2d_sat.cpp
index a965795bee..ded3ff356b 100644
--- a/servers/physics_2d/godot_collision_solver_2d_sat.cpp
+++ b/servers/physics_2d/godot_collision_solver_2d_sat.cpp
@@ -41,10 +41,6 @@ struct _CollectorCallback2D {
Vector2 *sep_axis = nullptr;
_FORCE_INLINE_ void call(const Vector2 &p_point_A, const Vector2 &p_point_B) {
- /*
- if (normal.dot(p_point_A) >= normal.dot(p_point_B))
- return;
- */
if (swap) {
callback(p_point_B, p_point_A, userdata);
} else {
diff --git a/servers/physics_2d/godot_physics_server_2d.cpp b/servers/physics_2d/godot_physics_server_2d.cpp
index 5e099e27ec..a9b499c6b5 100644
--- a/servers/physics_2d/godot_physics_server_2d.cpp
+++ b/servers/physics_2d/godot_physics_server_2d.cpp
@@ -1188,14 +1188,6 @@ void GodotPhysicsServer2D::free(RID p_rid) {
} else if (body_owner.owns(p_rid)) {
GodotBody2D *body = body_owner.get_or_null(p_rid);
- /*
- if (body->get_state_query())
- _clear_query(body->get_state_query());
-
- if (body->get_direct_state_query())
- _clear_query(body->get_direct_state_query());
- */
-
body_set_space(p_rid, RID());
while (body->get_shape_count()) {
@@ -1208,11 +1200,6 @@ void GodotPhysicsServer2D::free(RID p_rid) {
} else if (area_owner.owns(p_rid)) {
GodotArea2D *area = area_owner.get_or_null(p_rid);
- /*
- if (area->get_monitor_query())
- _clear_query(area->get_monitor_query());
- */
-
area->set_space(nullptr);
while (area->get_shape_count()) {
diff --git a/servers/physics_2d/godot_shape_2d.cpp b/servers/physics_2d/godot_shape_2d.cpp
index 1e8799a727..b5dbb8a2dd 100644
--- a/servers/physics_2d/godot_shape_2d.cpp
+++ b/servers/physics_2d/godot_shape_2d.cpp
@@ -544,12 +544,6 @@ bool GodotConvexPolygonShape2D::intersect_segment(const Vector2 &p_begin, const
bool inters = false;
for (int i = 0; i < point_count; i++) {
- //hmm.. no can do..
- /*
- if (d.dot(points[i].normal)>=0)
- continue;
- */
-
Vector2 res;
if (!Geometry2D::segment_intersects_segment(p_begin, p_end, points[i].pos, points[(i + 1) % point_count].pos, &res)) {
diff --git a/servers/physics_2d/godot_space_2d.cpp b/servers/physics_2d/godot_space_2d.cpp
index 5c2bda340b..68dac67d21 100644
--- a/servers/physics_2d/godot_space_2d.cpp
+++ b/servers/physics_2d/godot_space_2d.cpp
@@ -888,6 +888,9 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
+ body_aabb.position += p_parameters.motion * unsafe;
+ int amount = _cull_aabb_for_body(p_body, body_aabb);
+
int from_shape = best_shape != -1 ? best_shape : 0;
int to_shape = best_shape != -1 ? best_shape + 1 : p_body->get_shape_count();
@@ -899,10 +902,6 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
Transform2D body_shape_xform = ugt * p_body->get_shape_transform(j);
GodotShape2D *body_shape = p_body->get_shape(j);
- body_aabb.position += p_parameters.motion * unsafe;
-
- int amount = _cull_aabb_for_body(p_body, body_aabb);
-
for (int i = 0; i < amount; i++) {
const GodotCollisionObject2D *col_obj = intersection_query_results[i];
if (p_parameters.exclude_bodies.has(col_obj->get_self())) {
diff --git a/servers/physics_3d/gjk_epa.cpp b/servers/physics_3d/gjk_epa.cpp
index 928ffe0980..23c8079538 100644
--- a/servers/physics_3d/gjk_epa.cpp
+++ b/servers/physics_3d/gjk_epa.cpp
@@ -918,7 +918,7 @@ bool Distance( const GodotShape3D* shape0,
{
results.status = gjk_status==GJK::eStatus::Inside?
sResults::Penetrating :
- sResults::GJK_Failed ;
+ sResults::GJK_Failed;
return(false);
}
}
diff --git a/servers/physics_3d/godot_collision_solver_3d_sat.cpp b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
index 82e04a7e31..ca429040f5 100644
--- a/servers/physics_3d/godot_collision_solver_3d_sat.cpp
+++ b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
@@ -345,10 +345,6 @@ static void _generate_contacts_face_face(const Vector3 *p_points_A, int p_point_
for (int i = 0; i < clipbuf_len; i++) {
real_t d = plane_B.distance_to(clipbuf_src[i]);
- /*
- if (d>CMP_EPSILON)
- continue;
- */
Vector3 closest_B = clipbuf_src[i] - plane_B.normal * d;
diff --git a/servers/physics_3d/godot_physics_server_3d.cpp b/servers/physics_3d/godot_physics_server_3d.cpp
index 4e1680e6ac..a1912dc660 100644
--- a/servers/physics_3d/godot_physics_server_3d.cpp
+++ b/servers/physics_3d/godot_physics_server_3d.cpp
@@ -1540,14 +1540,6 @@ void GodotPhysicsServer3D::free(RID p_rid) {
} else if (body_owner.owns(p_rid)) {
GodotBody3D *body = body_owner.get_or_null(p_rid);
- /*
- if (body->get_state_query())
- _clear_query(body->get_state_query());
-
- if (body->get_direct_state_query())
- _clear_query(body->get_direct_state_query());
- */
-
body->set_space(nullptr);
while (body->get_shape_count()) {
@@ -1566,11 +1558,6 @@ void GodotPhysicsServer3D::free(RID p_rid) {
} else if (area_owner.owns(p_rid)) {
GodotArea3D *area = area_owner.get_or_null(p_rid);
- /*
- if (area->get_monitor_query())
- _clear_query(area->get_monitor_query());
- */
-
area->set_space(nullptr);
while (area->get_shape_count()) {
diff --git a/servers/physics_3d/godot_shape_3d.cpp b/servers/physics_3d/godot_shape_3d.cpp
index 666e773c1c..7762c4829e 100644
--- a/servers/physics_3d/godot_shape_3d.cpp
+++ b/servers/physics_3d/godot_shape_3d.cpp
@@ -1284,12 +1284,6 @@ Vector3 GodotConcavePolygonShape3D::get_support(const Vector3 &p_normal) const {
void GodotConcavePolygonShape3D::_cull_segment(int p_idx, _SegmentCullParams *p_params) const {
const BVH *bvh = &p_params->bvh[p_idx];
- /*
- if (p_params->dir.dot(bvh->aabb.get_support(-p_params->dir))>p_params->min_d)
- return; //test against whole AABB, which isn't very costly
- */
-
- //printf("addr: %p\n",bvh);
if (!bvh->aabb.intersects_segment(p_params->from, p_params->to)) {
return;
}
diff --git a/servers/physics_3d/godot_space_3d.cpp b/servers/physics_3d/godot_space_3d.cpp
index ed756a7f9d..2490a2f506 100644
--- a/servers/physics_3d/godot_space_3d.cpp
+++ b/servers/physics_3d/godot_space_3d.cpp
@@ -926,6 +926,9 @@ bool GodotSpace3D::test_body_motion(GodotBody3D *p_body, const PhysicsServer3D::
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
+ body_aabb.position += p_parameters.motion * unsafe;
+ int amount = _cull_aabb_for_body(p_body, body_aabb);
+
int from_shape = best_shape != -1 ? best_shape : 0;
int to_shape = best_shape != -1 ? best_shape + 1 : p_body->get_shape_count();
@@ -937,10 +940,6 @@ bool GodotSpace3D::test_body_motion(GodotBody3D *p_body, const PhysicsServer3D::
Transform3D body_shape_xform = ugt * p_body->get_shape_transform(j);
GodotShape3D *body_shape = p_body->get_shape(j);
- body_aabb.position += p_parameters.motion * unsafe;
-
- int amount = _cull_aabb_for_body(p_body, body_aabb);
-
for (int i = 0; i < amount; i++) {
const GodotCollisionObject3D *col_obj = intersection_query_results[i];
if (p_parameters.exclude_bodies.has(col_obj->get_self())) {
diff --git a/servers/physics_3d/joints/godot_hinge_joint_3d.cpp b/servers/physics_3d/joints/godot_hinge_joint_3d.cpp
index a7a7843499..1c4d5dec23 100644
--- a/servers/physics_3d/joints/godot_hinge_joint_3d.cpp
+++ b/servers/physics_3d/joints/godot_hinge_joint_3d.cpp
@@ -213,16 +213,12 @@ bool GodotHingeJoint3D::setup(real_t p_step) {
m_solveLimit = false;
m_accLimitImpulse = real_t(0.);
- //if (m_lowerLimit < m_upperLimit)
if (m_useLimit && m_lowerLimit <= m_upperLimit) {
- //if (hingeAngle <= m_lowerLimit*m_limitSoftness)
if (hingeAngle <= m_lowerLimit) {
m_correction = (m_lowerLimit - hingeAngle);
m_limitSign = 1.0f;
m_solveLimit = true;
- }
- //else if (hingeAngle >= m_upperLimit*m_limitSoftness)
- else if (hingeAngle >= m_upperLimit) {
+ } else if (hingeAngle >= m_upperLimit) {
m_correction = m_upperLimit - hingeAngle;
m_limitSign = -1.0f;
m_solveLimit = true;
diff --git a/servers/rendering/renderer_compositor.cpp b/servers/rendering/renderer_compositor.cpp
index 82e8bd6ef9..fa4d9c8b31 100644
--- a/servers/rendering/renderer_compositor.cpp
+++ b/servers/rendering/renderer_compositor.cpp
@@ -45,7 +45,7 @@ bool RendererCompositor::is_xr_enabled() const {
}
RendererCompositor::RendererCompositor() {
- xr_enabled = GLOBAL_GET("rendering/xr/enabled");
+ xr_enabled = GLOBAL_GET("xr/shaders/enabled");
}
RendererCanvasRender *RendererCanvasRender::singleton = nullptr;
diff --git a/servers/rendering/renderer_rd/effects_rd.cpp b/servers/rendering/renderer_rd/effects_rd.cpp
index 02a0b6f184..fe3863fec7 100644
--- a/servers/rendering/renderer_rd/effects_rd.cpp
+++ b/servers/rendering/renderer_rd/effects_rd.cpp
@@ -332,7 +332,7 @@ void EffectsRD::copy_to_atlas_fb(RID p_source_rd_texture, RID p_dest_framebuffer
RD::get_singleton()->draw_list_draw(draw_list, true);
}
-void EffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_alpha_to_zero, bool p_srgb, RID p_secondary) {
+void EffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y, bool p_force_luminance, bool p_alpha_to_zero, bool p_srgb, RID p_secondary, bool p_multiview) {
memset(&copy_to_fb.push_constant, 0, sizeof(CopyToFbPushConstant));
if (p_flip_y) {
@@ -348,10 +348,18 @@ void EffectsRD::copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer,
copy_to_fb.push_constant.srgb = true;
}
+ CopyToFBMode mode;
+ if (p_multiview) {
+ mode = p_secondary.is_valid() ? COPY_TO_FB_MULTIVIEW_WITH_DEPTH : COPY_TO_FB_MULTIVIEW;
+ } else {
+ mode = p_secondary.is_valid() ? COPY_TO_FB_COPY2 : COPY_TO_FB_COPY;
+ }
+
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD, Vector<Color>(), 1.0, 0, p_rect);
- RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, copy_to_fb.pipelines[p_secondary.is_valid() ? COPY_TO_FB_COPY2 : COPY_TO_FB_COPY].get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, copy_to_fb.pipelines[mode].get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_source_rd_texture), 0);
if (p_secondary.is_valid()) {
+ // TODO may need to do this differently when reading from depth buffer for multiview
RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_secondary), 1);
}
RD::get_singleton()->draw_list_bind_index_array(draw_list, index_array);
@@ -638,13 +646,13 @@ void EffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_roughness, R
ssr.push_constant.metallic_mask[3] = CLAMP(p_metallic_mask.a * 255.0, 0, 255);
store_camera(p_camera, ssr.push_constant.projection);
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssr.pipelines[(p_roughness_quality != RS::ENV_SSR_ROUGNESS_QUALITY_DISABLED) ? SCREEN_SPACE_REFLECTION_ROUGH : SCREEN_SPACE_REFLECTION_NORMAL]);
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, ssr.pipelines[(p_roughness_quality != RS::ENV_SSR_ROUGHNESS_QUALITY_DISABLED) ? SCREEN_SPACE_REFLECTION_ROUGH : SCREEN_SPACE_REFLECTION_NORMAL]);
RD::get_singleton()->compute_list_set_push_constant(compute_list, &ssr.push_constant, sizeof(ScreenSpaceReflectionPushConstant));
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_image_pair(p_output_blur, p_scale_depth), 0);
- if (p_roughness_quality != RS::ENV_SSR_ROUGNESS_QUALITY_DISABLED) {
+ if (p_roughness_quality != RS::ENV_SSR_ROUGHNESS_QUALITY_DISABLED) {
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_image_pair(p_output, p_blur_radius), 1);
} else {
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_output), 1);
@@ -655,7 +663,7 @@ void EffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_roughness, R
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.width, p_screen_size.height, 1);
}
- if (p_roughness_quality != RS::ENV_SSR_ROUGNESS_QUALITY_DISABLED) {
+ if (p_roughness_quality != RS::ENV_SSR_ROUGHNESS_QUALITY_DISABLED) {
//blur
RD::get_singleton()->compute_list_add_barrier(compute_list);
@@ -667,10 +675,10 @@ void EffectsRD::screen_space_reflection(RID p_diffuse, RID p_normal_roughness, R
ssr_filter.push_constant.proj_info[2] = (1.0f - p_camera.matrix[0][2]) / p_camera.matrix[0][0];
ssr_filter.push_constant.proj_info[3] = (1.0f + p_camera.matrix[1][2]) / p_camera.matrix[1][1];
ssr_filter.push_constant.vertical = 0;
- if (p_roughness_quality == RS::ENV_SSR_ROUGNESS_QUALITY_LOW) {
+ if (p_roughness_quality == RS::ENV_SSR_ROUGHNESS_QUALITY_LOW) {
ssr_filter.push_constant.steps = p_max_steps / 3;
ssr_filter.push_constant.increment = 3;
- } else if (p_roughness_quality == RS::ENV_SSR_ROUGNESS_QUALITY_MEDIUM) {
+ } else if (p_roughness_quality == RS::ENV_SSR_ROUGHNESS_QUALITY_MEDIUM) {
ssr_filter.push_constant.steps = p_max_steps / 2;
ssr_filter.push_constant.increment = 2;
} else {
@@ -2032,7 +2040,7 @@ void EffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, u
memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
roughness.push_constant.face_id = p_face_id > 9 ? 0 : p_face_id;
- roughness.push_constant.roughness = p_roughness;
+ roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
roughness.push_constant.sample_count = p_sample_count;
roughness.push_constant.use_direct_write = p_roughness == 0.0;
roughness.push_constant.face_size = p_size;
@@ -2040,7 +2048,7 @@ void EffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, u
RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, roughness.compute_pipeline);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_rd_texture), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_rd_texture, true), 0);
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_texture), 1);
RD::get_singleton()->compute_list_set_push_constant(compute_list, &roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
@@ -2060,7 +2068,7 @@ void EffectsRD::cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_fra
memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
roughness.push_constant.face_id = p_face_id;
- roughness.push_constant.roughness = p_roughness;
+ roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
roughness.push_constant.sample_count = p_sample_count;
roughness.push_constant.use_direct_write = p_roughness == 0.0;
roughness.push_constant.face_size = p_size;
@@ -2367,15 +2375,26 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
copy_modes.push_back("\n");
copy_modes.push_back("\n#define MODE_PANORAMA_TO_DP\n");
copy_modes.push_back("\n#define MODE_TWO_SOURCES\n");
+ copy_modes.push_back("\n#define MULTIVIEW\n");
+ copy_modes.push_back("\n#define MULTIVIEW\n#define MODE_TWO_SOURCES\n");
copy_to_fb.shader.initialize(copy_modes);
+ if (!RendererCompositorRD::singleton->is_xr_enabled()) {
+ copy_to_fb.shader.set_variant_enabled(COPY_TO_FB_MULTIVIEW, false);
+ copy_to_fb.shader.set_variant_enabled(COPY_TO_FB_MULTIVIEW_WITH_DEPTH, false);
+ }
+
copy_to_fb.shader_version = copy_to_fb.shader.version_create();
//use additive
for (int i = 0; i < COPY_TO_FB_MAX; i++) {
- copy_to_fb.pipelines[i].setup(copy_to_fb.shader.version_get_shader(copy_to_fb.shader_version, i), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
+ if (copy_to_fb.shader.is_variant_enabled(i)) {
+ copy_to_fb.pipelines[i].setup(copy_to_fb.shader.version_get_shader(copy_to_fb.shader_version, i), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
+ } else {
+ copy_to_fb.pipelines[i].clear();
+ }
}
}
diff --git a/servers/rendering/renderer_rd/effects_rd.h b/servers/rendering/renderer_rd/effects_rd.h
index f5e5b1ace7..eca5e09800 100644
--- a/servers/rendering/renderer_rd/effects_rd.h
+++ b/servers/rendering/renderer_rd/effects_rd.h
@@ -203,6 +203,9 @@ private:
COPY_TO_FB_COPY,
COPY_TO_FB_COPY_PANORAMA_TO_DP,
COPY_TO_FB_COPY2,
+
+ COPY_TO_FB_MULTIVIEW,
+ COPY_TO_FB_MULTIVIEW_WITH_DEPTH,
COPY_TO_FB_MAX,
};
@@ -893,7 +896,7 @@ public:
bool get_prefer_raster_effects();
void fsr_upscale(RID p_source_rd_texture, RID p_secondary_texture, RID p_destination_texture, const Size2i &p_internal_size, const Size2i &p_size, float p_fsr_upscale_sharpness);
- void copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_alpha_to_zero = false, bool p_srgb = false, RID p_secondary = RID());
+ void copy_to_fb_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_alpha_to_zero = false, bool p_srgb = false, RID p_secondary = RID(), bool p_multiview = false);
void copy_to_rect(RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y = false, bool p_force_luminance = false, bool p_all_source = false, bool p_8_bit_dst = false, bool p_alpha_to_one = false);
void copy_cubemap_to_panorama(RID p_source_cube, RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array);
void copy_depth_to_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false);
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
index 7987a98b0e..24be451e78 100644
--- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
@@ -557,7 +557,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.renames["RIM"] = "rim";
actions.renames["RIM_TINT"] = "rim_tint";
actions.renames["CLEARCOAT"] = "clearcoat";
- actions.renames["CLEARCOAT_GLOSS"] = "clearcoat_gloss";
+ actions.renames["CLEARCOAT_ROUGHNESS"] = "clearcoat_roughness";
actions.renames["ANISOTROPY"] = "anisotropy";
actions.renames["ANISOTROPY_FLOW"] = "anisotropy_flow";
actions.renames["SSS_STRENGTH"] = "sss_strength";
@@ -607,7 +607,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.usage_defines["RIM"] = "#define LIGHT_RIM_USED\n";
actions.usage_defines["RIM_TINT"] = "@RIM";
actions.usage_defines["CLEARCOAT"] = "#define LIGHT_CLEARCOAT_USED\n";
- actions.usage_defines["CLEARCOAT_GLOSS"] = "@CLEARCOAT";
+ actions.usage_defines["CLEARCOAT_ROUGHNESS"] = "@CLEARCOAT";
actions.usage_defines["ANISOTROPY"] = "#define LIGHT_ANISOTROPY_USED\n";
actions.usage_defines["ANISOTROPY_FLOW"] = "@ANISOTROPY";
actions.usage_defines["AO"] = "#define AO_USED\n";
@@ -663,20 +663,12 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.render_mode_defines["sss_mode_skin"] = "#define SSS_MODE_SKIN\n";
- bool force_blinn = GLOBAL_GET("rendering/shading/overrides/force_blinn_over_ggx");
-
- if (!force_blinn) {
- actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_SCHLICK_GGX\n";
- } else {
- actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_BLINN\n";
- }
+ actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_SCHLICK_GGX\n";
actions.custom_samplers["SCREEN_TEXTURE"] = "material_samplers[3]"; // linear filter with mipmaps
actions.custom_samplers["DEPTH_TEXTURE"] = "material_samplers[3]";
actions.custom_samplers["NORMAL_ROUGHNESS_TEXTURE"] = "material_samplers[1]"; // linear filter
- actions.render_mode_defines["specular_blinn"] = "#define SPECULAR_BLINN\n";
- actions.render_mode_defines["specular_phong"] = "#define SPECULAR_PHONG\n";
actions.render_mode_defines["specular_toon"] = "#define SPECULAR_TOON\n";
actions.render_mode_defines["specular_disabled"] = "#define SPECULAR_DISABLED\n";
actions.render_mode_defines["shadows_disabled"] = "#define SHADOWS_DISABLED\n";
diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
index 0b99948063..34b2fa9440 100644
--- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
@@ -545,7 +545,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.renames["RIM"] = "rim";
actions.renames["RIM_TINT"] = "rim_tint";
actions.renames["CLEARCOAT"] = "clearcoat";
- actions.renames["CLEARCOAT_GLOSS"] = "clearcoat_gloss";
+ actions.renames["CLEARCOAT_ROUGHNESS"] = "clearcoat_roughness";
actions.renames["ANISOTROPY"] = "anisotropy";
actions.renames["ANISOTROPY_FLOW"] = "anisotropy_flow";
actions.renames["SSS_STRENGTH"] = "sss_strength";
@@ -594,7 +594,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.usage_defines["RIM"] = "#define LIGHT_RIM_USED\n";
actions.usage_defines["RIM_TINT"] = "@RIM";
actions.usage_defines["CLEARCOAT"] = "#define LIGHT_CLEARCOAT_USED\n";
- actions.usage_defines["CLEARCOAT_GLOSS"] = "@CLEARCOAT";
+ actions.usage_defines["CLEARCOAT_ROUGHNESS"] = "@CLEARCOAT";
actions.usage_defines["ANISOTROPY"] = "#define LIGHT_ANISOTROPY_USED\n";
actions.usage_defines["ANISOTROPY_FLOW"] = "@ANISOTROPY";
actions.usage_defines["AO"] = "#define AO_USED\n";
@@ -649,15 +649,8 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.render_mode_defines["sss_mode_skin"] = "#define SSS_MODE_SKIN\n";
- bool force_blinn = GLOBAL_GET("rendering/shading/overrides/force_blinn_over_ggx");
- if (!force_blinn) {
- actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_SCHLICK_GGX\n";
- } else {
- actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_BLINN\n";
- }
+ actions.render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_SCHLICK_GGX\n";
- actions.render_mode_defines["specular_blinn"] = "#define SPECULAR_BLINN\n";
- actions.render_mode_defines["specular_phong"] = "#define SPECULAR_PHONG\n";
actions.render_mode_defines["specular_toon"] = "#define SPECULAR_TOON\n";
actions.render_mode_defines["specular_disabled"] = "#define SPECULAR_DISABLED\n";
actions.render_mode_defines["shadows_disabled"] = "#define SHADOWS_DISABLED\n";
diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
index 2f8ef696cd..606527ed24 100644
--- a/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_compositor_rd.cpp
@@ -39,6 +39,9 @@ void RendererCompositorRD::prepare_for_blitting_render_targets() {
void RendererCompositorRD::blit_render_targets_to_screen(DisplayServer::WindowID p_screen, const BlitToScreen *p_render_targets, int p_amount) {
RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin_for_screen(p_screen);
+ if (draw_list == RD::INVALID_ID) {
+ return; // Window is minimized and does not have valid swapchain, skip drawing without printing errors.
+ }
for (int i = 0; i < p_amount; i++) {
RID texture = storage->render_target_get_texture(p_render_targets[i].render_target);
diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
index cb07c75db4..1a84bafbd0 100644
--- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
@@ -1894,7 +1894,6 @@ void RendererSceneGIRD::SDFGI::render_static_lights(RID p_render_buffers, uint32
RD::get_singleton()->draw_command_begin_label("SDFGI Render Static Lighs");
update_cascades();
- ; //need cascades updated for this
SDFGIShader::Light lights[SDFGI::MAX_STATIC_LIGHTS];
uint32_t light_count[SDFGI::MAX_STATIC_LIGHTS];
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
index 718825d652..db8f5461cf 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
@@ -1980,7 +1980,7 @@ void RendererSceneRenderRD::_process_ssr(RID p_render_buffers, RID p_dest_frameb
rb->ssr.normal_scaled = RD::get_singleton()->texture_create(tf, RD::TextureView());
}
- if (ssr_roughness_quality != RS::ENV_SSR_ROUGNESS_QUALITY_DISABLED && !rb->ssr.blur_radius[0].is_valid()) {
+ if (ssr_roughness_quality != RS::ENV_SSR_ROUGHNESS_QUALITY_DISABLED && !rb->ssr.blur_radius[0].is_valid()) {
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R8_UNORM;
tf.width = rb->internal_width / 2;
@@ -3286,7 +3286,7 @@ void RendererSceneRenderRD::_setup_lights(const PagedArray<RID> &p_lights, const
RS::LightType type = storage->light_get_type(base);
switch (type) {
case RS::LIGHT_DIRECTIONAL: {
- if (r_directional_light_count >= cluster.max_directional_lights) {
+ if (r_directional_light_count >= cluster.max_directional_lights || storage->light_directional_is_sky_only(base)) {
continue;
}
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
index 09c828ba37..47bc0af1db 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
@@ -428,7 +428,7 @@ private:
bool glow_bicubic_upscale = false;
bool glow_high_quality = false;
- RS::EnvironmentSSRRoughnessQuality ssr_roughness_quality = RS::ENV_SSR_ROUGNESS_QUALITY_LOW;
+ RS::EnvironmentSSRRoughnessQuality ssr_roughness_quality = RS::ENV_SSR_ROUGHNESS_QUALITY_LOW;
mutable RID_Owner<RendererSceneEnvironmentRD, true> environment_owner;
diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
index 354516ae87..b44ae6cf8d 100644
--- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
@@ -473,12 +473,13 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererS
}
RD::get_singleton()->draw_command_end_label(); // Filter radiance
} else {
+ RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
}
-
+ RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
Vector<RID> views;
if (p_use_arrays) {
for (int i = 1; i < layers.size(); i++) {
@@ -489,8 +490,9 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererS
views.push_back(layers[0].views[i]);
}
}
-
+ RD::get_singleton()->draw_command_begin_label("Fast filter radiance");
effects->cubemap_filter(downsampled_radiance_cubemap, views, p_use_arrays);
+ RD::get_singleton()->draw_command_end_label(); // Filter radiance
}
}
@@ -500,12 +502,25 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
bool prefer_raster_effects = effects->get_prefer_raster_effects();
if (prefer_raster_effects) {
- // Need to ask clayjohn but p_cube_side is set to 10, looks like in the compute shader we're doing all 6 sides in one call
- // here we need to do them one by one so ignoring p_cube_side
+ if (p_base_layer == 1) {
+ RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
+ for (int k = 0; k < 6; k++) {
+ effects->cubemap_downsample_raster(radiance_base_cubemap, downsampled_layer.mipmaps[0].framebuffers[k], k, downsampled_layer.mipmaps[0].size);
+ }
+
+ for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
+ for (int k = 0; k < 6; k++) {
+ effects->cubemap_downsample_raster(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].framebuffers[k], k, downsampled_layer.mipmaps[i].size);
+ }
+ }
+ RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
+ }
+
+ RD::get_singleton()->draw_command_begin_label("High Quality filter radiance");
if (p_use_arrays) {
for (int k = 0; k < 6; k++) {
effects->cubemap_roughness_raster(
- radiance_base_cubemap,
+ downsampled_radiance_cubemap,
layers[p_base_layer].mipmaps[0].framebuffers[k],
k,
p_sky_ggx_samples_quality,
@@ -515,7 +530,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
} else {
for (int k = 0; k < 6; k++) {
effects->cubemap_roughness_raster(
- layers[0].views[p_base_layer - 1],
+ downsampled_radiance_cubemap,
layers[0].mipmaps[p_base_layer].framebuffers[k],
k,
p_sky_ggx_samples_quality,
@@ -524,12 +539,22 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
}
}
} else {
+ if (p_base_layer == 1) {
+ RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
+ effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
+
+ for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
+ effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
+ }
+ RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
+ }
+
+ RD::get_singleton()->draw_command_begin_label("High Quality filter radiance");
if (p_use_arrays) {
- //render directly to the layers
- effects->cubemap_roughness(radiance_base_cubemap, layers[p_base_layer].views[0], p_cube_side, p_sky_ggx_samples_quality, float(p_base_layer) / (layers.size() - 1.0), layers[p_base_layer].mipmaps[0].size.x);
+ effects->cubemap_roughness(downsampled_radiance_cubemap, layers[p_base_layer].views[0], p_cube_side, p_sky_ggx_samples_quality, float(p_base_layer) / (layers.size() - 1.0), layers[p_base_layer].mipmaps[0].size.x);
} else {
effects->cubemap_roughness(
- layers[0].views[p_base_layer - 1],
+ downsampled_radiance_cubemap,
layers[0].views[p_base_layer],
p_cube_side,
p_sky_ggx_samples_quality,
@@ -537,6 +562,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
layers[0].mipmaps[p_base_layer].size.x);
}
}
+ RD::get_singleton()->draw_command_end_label(); // Filter radiance
}
void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(RendererStorageRD *p_storage, int p_start, int p_end) {
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
index e3829eb5ed..1473a92a1a 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
@@ -5712,6 +5712,21 @@ void RendererStorageRD::update_particles() {
total_amount *= particles->trail_bind_poses.size();
}
+ // Affect 2D only.
+ if (particles->use_local_coords) {
+ // In local mode, particle positions are calculated locally (relative to the node position)
+ // and they're also drawn locally.
+ // It works as expected, so we just pass an identity transform.
+ store_transform(Transform3D(), copy_push_constant.inv_emission_transform);
+ } else {
+ // In global mode, particle positions are calculated globally (relative to the canvas origin)
+ // but they're drawn locally.
+ // So, we need to pass the inverse of the emission transform to bring the
+ // particles to local coordinates before drawing.
+ Transform3D inv = particles->emission_transform.affine_inverse();
+ store_transform(inv, copy_push_constant.inv_emission_transform);
+ }
+
copy_push_constant.total_particles = total_amount;
copy_push_constant.frame_remainder = particles->interpolate ? particles->frame_remainder : 0.0;
copy_push_constant.align_mode = particles->transform_align;
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.h b/servers/rendering/renderer_rd/renderer_storage_rd.h
index ee4d18210a..33a3b8e229 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.h
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.h
@@ -852,6 +852,8 @@ private:
uint32_t lifetime_split;
uint32_t lifetime_reverse;
uint32_t copy_mode_2d;
+
+ float inv_emission_transform[16];
};
enum {
diff --git a/servers/rendering/renderer_rd/shaders/copy_to_fb.glsl b/servers/rendering/renderer_rd/shaders/copy_to_fb.glsl
index 2f1f9c4765..9787c9879d 100644
--- a/servers/rendering/renderer_rd/shaders/copy_to_fb.glsl
+++ b/servers/rendering/renderer_rd/shaders/copy_to_fb.glsl
@@ -4,7 +4,20 @@
#VERSION_DEFINES
+#ifdef MULTIVIEW
+#ifdef has_VK_KHR_multiview
+#extension GL_EXT_multiview : enable
+#define ViewIndex gl_ViewIndex
+#else // has_VK_KHR_multiview
+#define ViewIndex 0
+#endif // has_VK_KHR_multiview
+#endif //MULTIVIEW
+
+#ifdef MULTIVIEW
+layout(location = 0) out vec3 uv_interp;
+#else
layout(location = 0) out vec2 uv_interp;
+#endif
layout(push_constant, std430) uniform Params {
vec4 section;
@@ -19,9 +32,11 @@ params;
void main() {
vec2 base_arr[4] = vec2[](vec2(0.0, 0.0), vec2(0.0, 1.0), vec2(1.0, 1.0), vec2(1.0, 0.0));
- uv_interp = base_arr[gl_VertexIndex];
-
- vec2 vpos = uv_interp;
+ uv_interp.xy = base_arr[gl_VertexIndex];
+#ifdef MULTIVIEW
+ uv_interp.z = ViewIndex;
+#endif
+ vec2 vpos = uv_interp.xy;
if (params.use_section) {
vpos = params.section.xy + vpos * params.section.zw;
}
@@ -39,6 +54,15 @@ void main() {
#VERSION_DEFINES
+#ifdef MULTIVIEW
+#ifdef has_VK_KHR_multiview
+#extension GL_EXT_multiview : enable
+#define ViewIndex gl_ViewIndex
+#else // has_VK_KHR_multiview
+#define ViewIndex 0
+#endif // has_VK_KHR_multiview
+#endif //MULTIVIEW
+
layout(push_constant, std430) uniform Params {
vec4 section;
vec2 pixel_size;
@@ -52,12 +76,25 @@ layout(push_constant, std430) uniform Params {
}
params;
+#ifdef MULTIVIEW
+layout(location = 0) in vec3 uv_interp;
+#else
layout(location = 0) in vec2 uv_interp;
+#endif
+#ifdef MULTIVIEW
+layout(set = 0, binding = 0) uniform sampler2DArray source_color;
+#ifdef MODE_TWO_SOURCES
+layout(set = 1, binding = 0) uniform sampler2DArray source_depth;
+layout(location = 1) out float depth;
+#endif /* MODE_TWO_SOURCES */
+#else
layout(set = 0, binding = 0) uniform sampler2D source_color;
#ifdef MODE_TWO_SOURCES
layout(set = 1, binding = 0) uniform sampler2D source_color2;
-#endif
+#endif /* MODE_TWO_SOURCES */
+#endif /* MULTIVIEW */
+
layout(location = 0) out vec4 frag_color;
vec3 linear_to_srgb(vec3 color) {
@@ -68,9 +105,14 @@ vec3 linear_to_srgb(vec3 color) {
}
void main() {
+#ifdef MULTIVIEW
+ vec3 uv = uv_interp;
+#else
vec2 uv = uv_interp;
+#endif
#ifdef MODE_PANORAMA_TO_DP
+ // Note, multiview and panorama should not be mixed at this time
//obtain normal from dual paraboloid uv
#define M_PI 3.14159265359
@@ -98,10 +140,20 @@ void main() {
uv = 1.0 - uv;
}
#endif
+
+#ifdef MULTIVIEW
+ vec4 color = textureLod(source_color, uv, 0.0);
+#ifdef MODE_TWO_SOURCES
+ // In multiview our 2nd input will be our depth map
+ depth = textureLod(source_depth, uv, 0.0).r;
+#endif /* MODE_TWO_SOURCES */
+
+#else
vec4 color = textureLod(source_color, uv, 0.0);
#ifdef MODE_TWO_SOURCES
color += textureLod(source_color2, uv, 0.0);
-#endif
+#endif /* MODE_TWO_SOURCES */
+#endif /* MULTIVIEW */
if (params.force_luminance) {
color.rgb = vec3(max(max(color.r, color.g), color.b));
}
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl b/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl
index 28f4dc59ec..1d46f59408 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl
+++ b/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl
@@ -21,24 +21,38 @@ void main() {
vec2 uv = ((vec2(id.xy) * 2.0 + 1.0) / (params.face_size) - 1.0);
vec3 N = texelCoordToVec(uv, id.z);
- //vec4 color = color_interp;
-
if (params.use_direct_write) {
imageStore(dest_cubemap, ivec3(id), vec4(texture(source_cube, N).rgb, 1.0));
} else {
vec4 sum = vec4(0.0, 0.0, 0.0, 0.0);
+ float solid_angle_texel = 4.0 * M_PI / (6.0 * params.face_size * params.face_size);
+ float roughness2 = params.roughness * params.roughness;
+ float roughness4 = roughness2 * roughness2;
+ vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
+ mat3 T;
+ T[0] = normalize(cross(UpVector, N));
+ T[1] = cross(N, T[0]);
+ T[2] = N;
+
for (uint sampleNum = 0u; sampleNum < params.sample_count; sampleNum++) {
vec2 xi = Hammersley(sampleNum, params.sample_count);
- vec3 H = ImportanceSampleGGX(xi, params.roughness, N);
- vec3 V = N;
- vec3 L = (2.0 * dot(V, H) * H - V);
+ vec3 H = T * ImportanceSampleGGX(xi, roughness4);
+ float NdotH = dot(N, H);
+ vec3 L = (2.0 * NdotH * H - N);
float ndotl = clamp(dot(N, L), 0.0, 1.0);
if (ndotl > 0.0) {
- sum.rgb += textureLod(source_cube, L, 0.0).rgb * ndotl;
+ float D = DistributionGGX(NdotH, roughness4);
+ float pdf = D * NdotH / (4.0 * NdotH) + 0.0001;
+
+ float solid_angle_sample = 1.0 / (float(params.sample_count) * pdf + 0.0001);
+
+ float mipLevel = params.roughness == 0.0 ? 0.0 : 0.5 * log2(solid_angle_sample / solid_angle_texel);
+
+ sum.rgb += textureLod(source_cube, L, mipLevel).rgb * ndotl;
sum.a += ndotl;
}
}
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl b/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl
index ce0a25e12f..1bee428a6f 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl
@@ -47,12 +47,10 @@ vec3 texelCoordToVec(vec2 uv, uint faceID) {
return normalize(result);
}
-vec3 ImportanceSampleGGX(vec2 Xi, float Roughness, vec3 N) {
- float a = Roughness * Roughness; // DISNEY'S ROUGHNESS [see Burley'12 siggraph]
-
+vec3 ImportanceSampleGGX(vec2 xi, float roughness4) {
// Compute distribution direction
- float Phi = 2.0 * M_PI * Xi.x;
- float CosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a * a - 1.0) * Xi.y));
+ float Phi = 2.0 * M_PI * xi.x;
+ float CosTheta = sqrt((1.0 - xi.y) / (1.0 + (roughness4 - 1.0) * xi.y));
float SinTheta = sqrt(1.0 - CosTheta * CosTheta);
// Convert to spherical direction
@@ -61,12 +59,15 @@ vec3 ImportanceSampleGGX(vec2 Xi, float Roughness, vec3 N) {
H.y = SinTheta * sin(Phi);
H.z = CosTheta;
- vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
- vec3 TangentX = normalize(cross(UpVector, N));
- vec3 TangentY = cross(N, TangentX);
+ return H;
+}
+
+float DistributionGGX(float NdotH, float roughness4) {
+ float NdotH2 = NdotH * NdotH;
+ float denom = (NdotH2 * (roughness4 - 1.0) + 1.0);
+ denom = M_PI * denom * denom;
- // Tangent to world space
- return TangentX * H.x + TangentY * H.y + N * H.z;
+ return roughness4 / denom;
}
// https://graphicrants.blogspot.com.au/2013/08/specular-brdf-reference.html
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl b/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl
index 2570308816..c29accd8a7 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl
+++ b/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl
@@ -42,17 +42,33 @@ void main() {
} else {
vec4 sum = vec4(0.0, 0.0, 0.0, 0.0);
+ float solid_angle_texel = 4.0 * M_PI / (6.0 * params.face_size * params.face_size);
+ float roughness2 = params.roughness * params.roughness;
+ float roughness4 = roughness2 * roughness2;
+ vec3 UpVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
+ mat3 T;
+ T[0] = normalize(cross(UpVector, N));
+ T[1] = cross(N, T[0]);
+ T[2] = N;
+
for (uint sampleNum = 0u; sampleNum < params.sample_count; sampleNum++) {
vec2 xi = Hammersley(sampleNum, params.sample_count);
- vec3 H = ImportanceSampleGGX(xi, params.roughness, N);
- vec3 V = N;
- vec3 L = (2.0 * dot(V, H) * H - V);
+ vec3 H = T * ImportanceSampleGGX(xi, roughness4);
+ float NdotH = dot(N, H);
+ vec3 L = (2.0 * NdotH * H - N);
float ndotl = clamp(dot(N, L), 0.0, 1.0);
if (ndotl > 0.0) {
- sum.rgb += textureLod(source_cube, L, 0.0).rgb * ndotl;
+ float D = DistributionGGX(NdotH, roughness4);
+ float pdf = D * NdotH / (4.0 * NdotH) + 0.0001;
+
+ float solid_angle_sample = 1.0 / (float(params.sample_count) * pdf + 0.0001);
+
+ float mipLevel = params.roughness == 0.0 ? 0.0 : 0.5 * log2(solid_angle_sample / solid_angle_texel);
+
+ sum.rgb += textureLod(source_cube, L, mipLevel).rgb * ndotl;
sum.a += ndotl;
}
}
diff --git a/servers/rendering/renderer_rd/shaders/particles_copy.glsl b/servers/rendering/renderer_rd/shaders/particles_copy.glsl
index b991880cd9..afbd5a9caa 100644
--- a/servers/rendering/renderer_rd/shaders/particles_copy.glsl
+++ b/servers/rendering/renderer_rd/shaders/particles_copy.glsl
@@ -61,6 +61,8 @@ layout(push_constant, std430) uniform Params {
uint lifetime_split;
bool lifetime_reverse;
bool copy_mode_2d;
+
+ mat4 inv_emission_transform;
}
params;
@@ -199,6 +201,12 @@ void main() {
txform = txform * trail_bind_poses.data[part_ofs];
}
+ if (params.copy_mode_2d) {
+ // In global mode, bring 2D particles to local coordinates
+ // as they will be drawn with the node position as origin.
+ txform = params.inv_emission_transform * txform;
+ }
+
txform = transpose(txform);
} else {
txform = mat4(vec4(0.0), vec4(0.0), vec4(0.0), vec4(0.0)); //zero scale, becomes invisible
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
index 97f7e0a6e6..a8648fc96a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
@@ -478,8 +478,8 @@ layout(location = 0) out vec4 frag_color;
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
-/* Make a default specular mode SPECULAR_SCHLICK_GGX. */
-#if !defined(SPECULAR_DISABLED) && !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_BLINN) && !defined(SPECULAR_PHONG) && !defined(SPECULAR_TOON)
+// Default to SPECULAR_SCHLICK_GGX.
+#if !defined(SPECULAR_DISABLED) && !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_TOON)
#define SPECULAR_SCHLICK_GGX
#endif
@@ -552,7 +552,6 @@ void cluster_get_item_range(uint p_offset, out uint item_min, out uint item_max,
uint item_min_max = cluster_buffer.data[p_offset];
item_min = item_min_max & 0xFFFF;
item_max = item_min_max >> 16;
- ;
item_from = item_min >> 5;
item_to = (item_max == 0) ? 0 : ((item_max - 1) >> 5) + 1; //side effect of how it is stored, as item_max 0 means no elements
@@ -590,7 +589,7 @@ void main() {
float rim = 0.0;
float rim_tint = 0.0;
float clearcoat = 0.0;
- float clearcoat_gloss = 0.0;
+ float clearcoat_roughness = 0.0;
float anisotropy = 0.0;
vec2 anisotropy_flow = vec2(1.0, 0.0);
vec4 fog = vec4(0.0);
@@ -913,7 +912,17 @@ void main() {
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
if (scene_data.use_reflection_cubemap) {
+#ifdef LIGHT_ANISOTROPY_USED
+ // https://google.github.io/filament/Filament.html#lighting/imagebasedlights/anisotropy
+ vec3 anisotropic_direction = anisotropy >= 0.0 ? binormal : tangent;
+ vec3 anisotropic_tangent = cross(anisotropic_direction, view);
+ vec3 anisotropic_normal = cross(anisotropic_tangent, anisotropic_direction);
+ vec3 bent_normal = normalize(mix(normal, anisotropic_normal, abs(anisotropy) * clamp(5.0 * roughness, 0.0, 1.0)));
+ vec3 ref_vec = reflect(-view, bent_normal);
+#else
vec3 ref_vec = reflect(-view, normal);
+#endif
+
float horizon = min(1.0 + dot(ref_vec, normal), 1.0);
ref_vec = scene_data.radiance_inverse_xform * ref_vec;
#ifdef USE_RADIANCE_CUBEMAP_ARRAY
@@ -955,6 +964,36 @@ void main() {
#if defined(CUSTOM_IRRADIANCE_USED)
ambient_light = mix(ambient_light, custom_irradiance.rgb, custom_irradiance.a);
#endif
+
+#ifdef LIGHT_CLEARCOAT_USED
+
+ if (scene_data.use_reflection_cubemap) {
+ vec3 n = normalize(normal_interp); // We want to use geometric normal, not normal_map
+ float NoV = max(dot(n, view), 0.0001);
+ vec3 ref_vec = reflect(-view, n);
+ // The clear coat layer assumes an IOR of 1.5 (4% reflectance)
+ float Fc = clearcoat * (0.04 + 0.96 * SchlickFresnel(NoV));
+ float attenuation = 1.0 - Fc;
+ ambient_light *= attenuation;
+ specular_light *= attenuation;
+
+ float horizon = min(1.0 + dot(ref_vec, normal), 1.0);
+ ref_vec = scene_data.radiance_inverse_xform * ref_vec;
+ float roughness_lod = mix(0.001, 0.1, clearcoat_roughness) * MAX_ROUGHNESS_LOD;
+#ifdef USE_RADIANCE_CUBEMAP_ARRAY
+
+ float lod, blend;
+ blend = modf(roughness_lod, lod);
+ vec3 clearcoat_light = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod)).rgb;
+ clearcoat_light = mix(clearcoat_light, texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod + 1)).rgb, blend);
+
+#else
+ vec3 clearcoat_light = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), ref_vec, roughness_lod).rgb;
+
+#endif //USE_RADIANCE_CUBEMAP_ARRAY
+ specular_light += clearcoat_light * horizon * horizon * Fc * scene_data.ambient_light_color_energy.a;
+ }
+#endif
#endif //!defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
//radiance
@@ -1203,8 +1242,16 @@ void main() {
if (!bool(reflections.data[reflection_index].mask & instances.data[instance_index].layer_mask)) {
continue; //not masked
}
-
- reflection_process(reflection_index, vertex, normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
+#ifdef LIGHT_ANISOTROPY_USED
+ // https://google.github.io/filament/Filament.html#lighting/imagebasedlights/anisotropy
+ vec3 anisotropic_direction = anisotropy >= 0.0 ? binormal : tangent;
+ vec3 anisotropic_tangent = cross(anisotropic_direction, view);
+ vec3 anisotropic_normal = cross(anisotropic_tangent, anisotropic_direction);
+ vec3 bent_normal = normalize(mix(normal, anisotropic_normal, abs(anisotropy) * clamp(5.0 * roughness, 0.0, 1.0)));
+#else
+ vec3 bent_normal = normal;
+#endif
+ reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
}
}
@@ -1556,10 +1603,11 @@ void main() {
rim, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
- binormal, tangent, anisotropy,
+ binormal,
+ tangent, anisotropy,
#endif
diffuse_light,
specular_light);
@@ -1627,7 +1675,7 @@ void main() {
rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
tangent, binormal, anisotropy,
@@ -1699,10 +1747,11 @@ void main() {
rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
- tangent, binormal, anisotropy,
+ tangent,
+ binormal, anisotropy,
#endif
diffuse_light, specular_light);
}
@@ -1905,7 +1954,7 @@ void main() {
frag_color = vec4(albedo, alpha);
#else
frag_color = vec4(emission + ambient_light + diffuse_light + specular_light, alpha);
- //frag_color = vec4(1.0);
+//frag_color = vec4(1.0);
#endif //USE_NO_SHADING
// Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky.
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
index 084e2a0673..3b110aded2 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
@@ -15,7 +15,7 @@
#include "cluster_data_inc.glsl"
#include "decal_data_inc.glsl"
-#if !defined(MODE_RENDER_DEPTH) || defined(MODE_RENDER_MATERIAL) || defined(MODE_RENDER_SDF) || defined(MODE_RENDER_NORMAL_ROUGHNESS) || defined(MODE_RENDER_VOXEL_GI) || defined(TANGENT_USED) || defined(NORMAL_MAP_USED)
+#if !defined(MODE_RENDER_DEPTH) || defined(MODE_RENDER_MATERIAL) || defined(MODE_RENDER_SDF) || defined(MODE_RENDER_NORMAL_ROUGHNESS) || defined(MODE_RENDER_VOXEL_GI) || defined(TANGENT_USED) || defined(NORMAL_MAP_USED) || defined(LIGHT_ANISOTROPY_USED)
#ifndef NORMAL_USED
#define NORMAL_USED
#endif
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
index 16f77fb91a..1c9b08b6d3 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
@@ -1,55 +1,29 @@
// Functions related to lighting
-// This returns the G_GGX function divided by 2 cos_theta_m, where in practice cos_theta_m is either N.L or N.V.
-// We're dividing this factor off because the overall term we'll end up looks like
-// (see, for example, the first unnumbered equation in B. Burley, "Physically Based Shading at Disney", SIGGRAPH 2012):
-//
-// F(L.V) D(N.H) G(N.L) G(N.V) / (4 N.L N.V)
-//
-// We're basically regouping this as
-//
-// F(L.V) D(N.H) [G(N.L)/(2 N.L)] [G(N.V) / (2 N.V)]
-//
-// and thus, this function implements the [G(N.m)/(2 N.m)] part with m = L or V.
-//
-// The contents of the D and G (G1) functions (GGX) are taken from
-// E. Heitz, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs", J. Comp. Graph. Tech. 3 (2) (2014).
-// Eqns 71-72 and 85-86 (see also Eqns 43 and 80).
-
-float G_GGX_2cos(float cos_theta_m, float alpha) {
- // Schlick's approximation
- // C. Schlick, "An Inexpensive BRDF Model for Physically-based Rendering", Computer Graphics Forum. 13 (3): 233 (1994)
- // Eq. (19), although see Heitz (2014) the about the problems with his derivation.
- // It nevertheless approximates GGX well with k = alpha/2.
- float k = 0.5 * alpha;
- return 0.5 / (cos_theta_m * (1.0 - k) + k);
-
- // float cos2 = cos_theta_m * cos_theta_m;
- // float sin2 = (1.0 - cos2);
- // return 1.0 / (cos_theta_m + sqrt(cos2 + alpha * alpha * sin2));
-}
-
float D_GGX(float cos_theta_m, float alpha) {
float alpha2 = alpha * alpha;
float d = 1.0 + (alpha2 - 1.0) * cos_theta_m * cos_theta_m;
return alpha2 / (M_PI * d * d);
}
-float G_GGX_anisotropic_2cos(float cos_theta_m, float alpha_x, float alpha_y, float cos_phi, float sin_phi) {
- float cos2 = cos_theta_m * cos_theta_m;
- float sin2 = (1.0 - cos2);
- float s_x = alpha_x * cos_phi;
- float s_y = alpha_y * sin_phi;
- return 1.0 / max(cos_theta_m + sqrt(cos2 + (s_x * s_x + s_y * s_y) * sin2), 0.001);
+// From Earl Hammon, Jr. "PBR Diffuse Lighting for GGX+Smith Microsurfaces" https://www.gdcvault.com/play/1024478/PBR-Diffuse-Lighting-for-GGX
+float V_GGX(float NdotL, float NdotV, float alpha) {
+ return 0.5 / mix(2.0 * NdotL * NdotV, NdotL + NdotV, alpha);
}
float D_GGX_anisotropic(float cos_theta_m, float alpha_x, float alpha_y, float cos_phi, float sin_phi) {
- float cos2 = cos_theta_m * cos_theta_m;
- float sin2 = (1.0 - cos2);
- float r_x = cos_phi / alpha_x;
- float r_y = sin_phi / alpha_y;
- float d = cos2 + sin2 * (r_x * r_x + r_y * r_y);
- return 1.0 / max(M_PI * alpha_x * alpha_y * d * d, 0.001);
+ float alpha2 = alpha_x * alpha_y;
+ highp vec3 v = vec3(alpha_y * cos_phi, alpha_x * sin_phi, alpha2 * cos_theta_m);
+ highp float v2 = dot(v, v);
+ float w2 = alpha2 / v2;
+ float D = alpha2 * w2 * w2 * (1.0 / M_PI);
+ return D;
+}
+
+float V_GGX_anisotropic(float alpha_x, float alpha_y, float TdotV, float TdotL, float BdotV, float BdotL, float NdotV, float NdotL) {
+ float Lambda_V = NdotL * length(vec3(alpha_x * TdotV, alpha_y * BdotV, NdotV));
+ float Lambda_L = NdotV * length(vec3(alpha_x * TdotL, alpha_y * BdotL, NdotL));
+ return 0.5 / (Lambda_V + Lambda_L);
}
float SchlickFresnel(float u) {
@@ -58,14 +32,6 @@ float SchlickFresnel(float u) {
return m2 * m2 * m; // pow(m,5)
}
-float GTR1(float NdotH, float a) {
- if (a >= 1.0)
- return 1.0 / M_PI;
- float a2 = a * a;
- float t = 1.0 + (a2 - 1.0) * NdotH * NdotH;
- return (a2 - 1.0) / (M_PI * log(a2) * t);
-}
-
vec3 F0(float metallic, float specular, vec3 albedo) {
float dielectric = 0.16 * specular * specular;
// use albedo * metallic as colored specular reflectance at 0 angle for metallic materials;
@@ -87,7 +53,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- float clearcoat, float clearcoat_gloss,
+ float clearcoat, float clearcoat_roughness, vec3 vertex_normal,
#endif
#ifdef LIGHT_ANISOTROPY_USED
vec3 B, vec3 T, float anisotropy,
@@ -113,13 +79,13 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
float NdotL = min(A + dot(N, L), 1.0);
float cNdotL = max(NdotL, 0.0); // clamped NdotL
float NdotV = dot(N, V);
- float cNdotV = max(NdotV, 0.0);
+ float cNdotV = max(NdotV, 1e-4);
-#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_CLEARCOAT_USED)
+#if defined(DIFFUSE_BURLEY) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_CLEARCOAT_USED)
vec3 H = normalize(V + L);
#endif
-#if defined(SPECULAR_BLINN) || defined(SPECULAR_SCHLICK_GGX) || defined(LIGHT_CLEARCOAT_USED)
+#if defined(SPECULAR_SCHLICK_GGX)
float cNdotH = clamp(A + dot(N, H), 0.0, 1.0);
#endif
@@ -203,26 +169,7 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
// D
-#if defined(SPECULAR_BLINN)
-
- //normalized blinn
- float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25;
- float blinn = pow(cNdotH, shininess);
- blinn *= (shininess + 2.0) * (1.0 / (8.0 * M_PI));
-
- specular_light += light_color * attenuation * specular_amount * blinn * f0 * orms_unpacked.w;
-
-#elif defined(SPECULAR_PHONG)
-
- vec3 R = normalize(-reflect(L, N));
- float cRdotV = clamp(A + dot(R, V), 0.0, 1.0);
- float shininess = exp2(15.0 * (1.0 - roughness) + 1.0) * 0.25;
- float phong = pow(cRdotV, shininess);
- phong *= (shininess + 1.0) * (1.0 / (8.0 * M_PI));
-
- specular_light += light_color * attenuation * specular_amount * phong * f0 * orms_unpacked.w;
-
-#elif defined(SPECULAR_TOON)
+#if defined(SPECULAR_TOON)
vec3 R = normalize(-reflect(L, N));
float RdotV = dot(R, V);
@@ -236,24 +183,21 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
#elif defined(SPECULAR_SCHLICK_GGX)
// shlick+ggx as default
-
+ float alpha_ggx = roughness * roughness;
#if defined(LIGHT_ANISOTROPY_USED)
- float alpha_ggx = roughness * roughness;
float aspect = sqrt(1.0 - anisotropy * 0.9);
float ax = alpha_ggx / aspect;
float ay = alpha_ggx * aspect;
float XdotH = dot(T, H);
float YdotH = dot(B, H);
float D = D_GGX_anisotropic(cNdotH, ax, ay, XdotH, YdotH);
- float G = G_GGX_anisotropic_2cos(cNdotL, ax, ay, XdotH, YdotH) * G_GGX_anisotropic_2cos(cNdotV, ax, ay, XdotH, YdotH);
-
-#else
- float alpha_ggx = roughness * roughness;
+ float G = V_GGX_anisotropic(ax, ay, dot(T, V), dot(T, L), dot(B, V), dot(B, L), cNdotV, cNdotL);
+#else // LIGHT_ANISOTROPY_USED
float D = D_GGX(cNdotH, alpha_ggx);
- float G = G_GGX_2cos(cNdotL, alpha_ggx) * G_GGX_2cos(cNdotV, alpha_ggx);
-#endif
- // F
+ float G = V_GGX(cNdotL, cNdotV, alpha_ggx);
+#endif // LIGHT_ANISOTROPY_USED
+ // F
float cLdotH5 = SchlickFresnel(cLdotH);
vec3 F = mix(vec3(cLdotH5), vec3(1.0), f0);
@@ -263,18 +207,23 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte
#endif
#if defined(LIGHT_CLEARCOAT_USED)
+ // Clearcoat ignores normal_map, use vertex normal instead
+ float ccNdotL = max(min(A + dot(vertex_normal, L), 1.0), 0.0);
+ float ccNdotH = clamp(A + dot(vertex_normal, H), 0.0, 1.0);
+ float ccNdotV = max(dot(vertex_normal, V), 1e-4);
#if !defined(SPECULAR_SCHLICK_GGX)
float cLdotH5 = SchlickFresnel(cLdotH);
#endif
- float Dr = GTR1(cNdotH, mix(.1, .001, clearcoat_gloss));
+ float Dr = D_GGX(ccNdotH, mix(0.001, 0.1, clearcoat_roughness));
+ float Gr = 0.25 / (cLdotH * cLdotH);
float Fr = mix(.04, 1.0, cLdotH5);
- float Gr = G_GGX_2cos(cNdotL, .25) * G_GGX_2cos(cNdotV, .25);
-
- float clearcoat_specular_brdf_NL = 0.25 * clearcoat * Gr * Fr * Dr * cNdotL;
+ float clearcoat_specular_brdf_NL = clearcoat * Gr * Fr * Dr * cNdotL;
specular_light += clearcoat_specular_brdf_NL * light_color * attenuation * specular_amount;
-#endif
+ // TODO: Clearcoat adds light to the scene right now (it is non-energy conserving), both diffuse and specular need to be scaled by (1.0 - FR)
+ // but to do so we need to rearrange this entire function
+#endif // LIGHT_CLEARCOAT_USED
}
#ifdef USE_SHADOW_TO_OPACITY
@@ -587,7 +536,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- float clearcoat, float clearcoat_gloss,
+ float clearcoat, float clearcoat_roughness, vec3 vertex_normal,
#endif
#ifdef LIGHT_ANISOTROPY_USED
vec3 binormal, vec3 tangent, float anisotropy,
@@ -711,7 +660,7 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
rim * omni_attenuation, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, vertex_normal,
#endif
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
@@ -827,7 +776,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
float rim, float rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- float clearcoat, float clearcoat_gloss,
+ float clearcoat, float clearcoat_roughness, vec3 vertex_normal,
#endif
#ifdef LIGHT_ANISOTROPY_USED
vec3 binormal, vec3 tangent, float anisotropy,
@@ -912,7 +861,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
rim * spot_attenuation, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, vertex_normal,
#endif
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
index 4d6a3b5864..a1cf1d3c04 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
@@ -511,8 +511,8 @@ layout(location = 0) out mediump vec4 frag_color;
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
-/* Make a default specular mode SPECULAR_SCHLICK_GGX. */
-#if !defined(SPECULAR_DISABLED) && !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_BLINN) && !defined(SPECULAR_PHONG) && !defined(SPECULAR_TOON)
+// Default to SPECULAR_SCHLICK_GGX.
+#if !defined(SPECULAR_DISABLED) && !defined(SPECULAR_SCHLICK_GGX) && !defined(SPECULAR_TOON)
#define SPECULAR_SCHLICK_GGX
#endif
@@ -596,7 +596,7 @@ void main() {
float rim = 0.0;
float rim_tint = 0.0;
float clearcoat = 0.0;
- float clearcoat_gloss = 0.0;
+ float clearcoat_roughness = 0.0;
float anisotropy = 0.0;
vec2 anisotropy_flow = vec2(1.0, 0.0);
vec4 fog = vec4(0.0);
@@ -874,7 +874,16 @@ void main() {
#if !defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
if (scene_data.use_reflection_cubemap) {
+#ifdef LIGHT_ANISOTROPY_USED
+ // https://google.github.io/filament/Filament.html#lighting/imagebasedlights/anisotropy
+ vec3 anisotropic_direction = anisotropy >= 0.0 ? binormal : tangent;
+ vec3 anisotropic_tangent = cross(anisotropic_direction, view);
+ vec3 anisotropic_normal = cross(anisotropic_tangent, anisotropic_direction);
+ vec3 bent_normal = normalize(mix(normal, anisotropic_normal, abs(anisotropy) * clamp(5.0 * roughness, 0.0, 1.0)));
+ vec3 ref_vec = reflect(-view, bent_normal);
+#else
vec3 ref_vec = reflect(-view, normal);
+#endif
float horizon = min(1.0 + dot(ref_vec, normal), 1.0);
ref_vec = scene_data.radiance_inverse_xform * ref_vec;
#ifdef USE_RADIANCE_CUBEMAP_ARRAY
@@ -917,7 +926,35 @@ void main() {
#if defined(CUSTOM_IRRADIANCE_USED)
ambient_light = mix(specular_light, custom_irradiance.rgb, custom_irradiance.a);
#endif // CUSTOM_IRRADIANCE_USED
+#ifdef LIGHT_CLEARCOAT_USED
+
+ if (scene_data.use_reflection_cubemap) {
+ vec3 n = normalize(normal_interp); // We want to use geometric normal, not normal_map
+ float NoV = max(dot(n, view), 0.0001);
+ vec3 ref_vec = reflect(-view, n);
+ // The clear coat layer assumes an IOR of 1.5 (4% reflectance)
+ float Fc = clearcoat * (0.04 + 0.96 * SchlickFresnel(NoV));
+ float attenuation = 1.0 - Fc;
+ ambient_light *= attenuation;
+ specular_light *= attenuation;
+ float horizon = min(1.0 + dot(ref_vec, normal), 1.0);
+ ref_vec = scene_data.radiance_inverse_xform * ref_vec;
+ float roughness_lod = mix(0.001, 0.1, clearcoat_roughness) * MAX_ROUGHNESS_LOD;
+#ifdef USE_RADIANCE_CUBEMAP_ARRAY
+
+ float lod, blend;
+ blend = modf(roughness_lod, lod);
+ vec3 clearcoat_light = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod)).rgb;
+ clearcoat_light = mix(clearcoat_light, texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod + 1)).rgb, blend);
+
+#else
+ vec3 clearcoat_light = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), ref_vec, roughness_lod).rgb;
+
+#endif //USE_RADIANCE_CUBEMAP_ARRAY
+ specular_light += clearcoat_light * horizon * horizon * Fc * scene_data.ambient_light_color_energy.a;
+ }
+#endif
#endif //!defined(MODE_RENDER_DEPTH) && !defined(MODE_UNSHADED)
//radiance
@@ -1002,8 +1039,16 @@ void main() {
if (reflection_index == 0xFF) {
break;
}
-
- reflection_process(reflection_index, vertex, normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
+#ifdef LIGHT_ANISOTROPY_USED
+ // https://google.github.io/filament/Filament.html#lighting/imagebasedlights/anisotropy
+ vec3 anisotropic_direction = anisotropy >= 0.0 ? binormal : tangent;
+ vec3 anisotropic_tangent = cross(anisotropic_direction, view);
+ vec3 anisotropic_normal = cross(anisotropic_tangent, anisotropic_direction);
+ vec3 bent_normal = normalize(mix(normal, anisotropic_normal, abs(anisotropy) * clamp(5.0 * roughness, 0.0, 1.0)));
+#else
+ vec3 bent_normal = normal;
+#endif
+ reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
}
if (reflection_accum.a > 0.0) {
@@ -1368,7 +1413,7 @@ void main() {
rim, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
binormal, tangent, anisotropy,
@@ -1415,10 +1460,11 @@ void main() {
rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
- tangent, binormal, anisotropy,
+ tangent,
+ binormal, anisotropy,
#endif
diffuse_light, specular_light);
}
@@ -1459,10 +1505,11 @@ void main() {
rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
- clearcoat, clearcoat_gloss,
+ clearcoat, clearcoat_roughness, normalize(normal_interp),
#endif
#ifdef LIGHT_ANISOTROPY_USED
- tangent, binormal, anisotropy,
+ tangent,
+ binormal, anisotropy,
#endif
diffuse_light, specular_light);
}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
index 541c0b0603..7a624c3b95 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
@@ -7,7 +7,7 @@
#include "decal_data_inc.glsl"
-#if !defined(MODE_RENDER_DEPTH) || defined(MODE_RENDER_MATERIAL) || defined(TANGENT_USED) || defined(NORMAL_MAP_USED)
+#if !defined(MODE_RENDER_DEPTH) || defined(MODE_RENDER_MATERIAL) || defined(TANGENT_USED) || defined(NORMAL_MAP_USED) || defined(LIGHT_ANISOTROPY_USED)
#ifndef NORMAL_USED
#define NORMAL_USED
#endif
diff --git a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
index 7c8d4f7f99..7a0cea421e 100644
--- a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
+++ b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
@@ -235,7 +235,6 @@ void cluster_get_item_range(uint p_offset, out uint item_min, out uint item_max,
uint item_min_max = cluster_buffer.data[p_offset];
item_min = item_min_max & 0xFFFF;
item_max = item_min_max >> 16;
- ;
item_from = item_min >> 5;
item_to = (item_max == 0) ? 0 : ((item_max - 1) >> 5) + 1; //side effect of how it is stored, as item_max 0 means no elements
diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp
index 5a84bace2d..69c017a1c8 100644
--- a/servers/rendering/renderer_viewport.cpp
+++ b/servers/rendering/renderer_viewport.cpp
@@ -548,7 +548,6 @@ void RendererViewport::draw_viewports() {
// get our xr interface in case we need it
Ref<XRInterface> xr_interface;
-
XRServer *xr_server = XRServer::get_singleton();
if (xr_server != nullptr) {
// let our XR server know we're about to render our frames so we can get our frame timing
diff --git a/servers/rendering/rendering_device.h b/servers/rendering/rendering_device.h
index 655a32a805..49d89bcadc 100644
--- a/servers/rendering/rendering_device.h
+++ b/servers/rendering/rendering_device.h
@@ -500,6 +500,7 @@ public:
virtual RID texture_create(const TextureFormat &p_format, const TextureView &p_view, const Vector<Vector<uint8_t>> &p_data = Vector<Vector<uint8_t>>()) = 0;
virtual RID texture_create_shared(const TextureView &p_view, RID p_with_texture) = 0;
+ virtual RID texture_create_from_extension(TextureType p_type, DataFormat p_format, TextureSamples p_samples, uint64_t p_flags, uint64_t p_image, uint64_t p_width, uint64_t p_height, uint64_t p_depth, uint64_t p_layers) = 0;
enum TextureSliceType {
TEXTURE_SLICE_2D,
diff --git a/servers/rendering/shader_compiler.cpp b/servers/rendering/shader_compiler.cpp
index 5b43ca4bcd..812d636a0b 100644
--- a/servers/rendering/shader_compiler.cpp
+++ b/servers/rendering/shader_compiler.cpp
@@ -609,7 +609,6 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
r_gen_code.uniforms += uniform_defines[i];
}
-#if 1
// add up
int offset = 0;
for (int i = 0; i < uniform_sizes.size(); i++) {
@@ -629,41 +628,6 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
if (r_gen_code.uniform_total_size % 16 != 0) { //UBO sizes must be multiples of 16
r_gen_code.uniform_total_size += 16 - (r_gen_code.uniform_total_size % 16);
}
-#else
- // add up
- for (int i = 0; i < uniform_sizes.size(); i++) {
- if (i > 0) {
- int align = uniform_sizes[i - 1] % uniform_alignments[i];
- if (align != 0) {
- uniform_sizes[i - 1] += uniform_alignments[i] - align;
- }
-
- uniform_sizes[i] = uniform_sizes[i] + uniform_sizes[i - 1];
- }
- }
- //offset
- r_gen_code.uniform_offsets.resize(uniform_sizes.size());
- for (int i = 0; i < uniform_sizes.size(); i++) {
- if (i > 0)
- r_gen_code.uniform_offsets[i] = uniform_sizes[i - 1];
- else
- r_gen_code.uniform_offsets[i] = 0;
- }
- /*
- for(Map<StringName,SL::ShaderNode::Uniform>::Element *E=pnode->uniforms.front();E;E=E->next()) {
- if (SL::is_sampler_type(E->get().type)) {
- continue;
- }
-
- }
-
-*/
- if (uniform_sizes.size()) {
- r_gen_code.uniform_total_size = uniform_sizes[uniform_sizes.size() - 1];
- } else {
- r_gen_code.uniform_total_size = 0;
- }
-#endif
uint32_t index = p_default_actions.base_varying_index;
@@ -1409,148 +1373,4 @@ void ShaderCompiler::initialize(DefaultIdentifierActions p_actions) {
}
ShaderCompiler::ShaderCompiler() {
-#if 0
-
- /** SPATIAL SHADER **/
-
- actions[RS::SHADER_SPATIAL].renames["WORLD_MATRIX"] = "world_transform";
- actions[RS::SHADER_SPATIAL].renames["INV_CAMERA_MATRIX"] = "camera_inverse_matrix";
- actions[RS::SHADER_SPATIAL].renames["CAMERA_MATRIX"] = "camera_matrix";
- actions[RS::SHADER_SPATIAL].renames["PROJECTION_MATRIX"] = "projection_matrix";
- actions[RS::SHADER_SPATIAL].renames["INV_PROJECTION_MATRIX"] = "inv_projection_matrix";
- actions[RS::SHADER_SPATIAL].renames["MODELVIEW_MATRIX"] = "modelview";
-
- actions[RS::SHADER_SPATIAL].renames["VERTEX"] = "vertex.xyz";
- actions[RS::SHADER_SPATIAL].renames["NORMAL"] = "normal";
- actions[RS::SHADER_SPATIAL].renames["TANGENT"] = "tangent";
- actions[RS::SHADER_SPATIAL].renames["BINORMAL"] = "binormal";
- actions[RS::SHADER_SPATIAL].renames["POSITION"] = "position";
- actions[RS::SHADER_SPATIAL].renames["UV"] = "uv_interp";
- actions[RS::SHADER_SPATIAL].renames["UV2"] = "uv2_interp";
- actions[RS::SHADER_SPATIAL].renames["COLOR"] = "color_interp";
- actions[RS::SHADER_SPATIAL].renames["POINT_SIZE"] = "gl_PointSize";
- actions[RS::SHADER_SPATIAL].renames["INSTANCE_ID"] = "gl_InstanceID";
-
- //builtins
-
- actions[RS::SHADER_SPATIAL].renames["TIME"] = "time";
- actions[RS::SHADER_SPATIAL].renames["VIEWPORT_SIZE"] = "viewport_size";
-
- actions[RS::SHADER_SPATIAL].renames["FRAGCOORD"] = "gl_FragCoord";
- actions[RS::SHADER_SPATIAL].renames["FRONT_FACING"] = "gl_FrontFacing";
- actions[RS::SHADER_SPATIAL].renames["NORMAL_MAP"] = "normal_map";
- actions[RS::SHADER_SPATIAL].renames["NORMAL_MAP_DEPTH"] = "normal_map_depth";
- actions[RS::SHADER_SPATIAL].renames["ALBEDO"] = "albedo";
- actions[RS::SHADER_SPATIAL].renames["ALPHA"] = "alpha";
- actions[RS::SHADER_SPATIAL].renames["METALLIC"] = "metallic";
- actions[RS::SHADER_SPATIAL].renames["SPECULAR"] = "specular";
- actions[RS::SHADER_SPATIAL].renames["ROUGHNESS"] = "roughness";
- actions[RS::SHADER_SPATIAL].renames["RIM"] = "rim";
- actions[RS::SHADER_SPATIAL].renames["RIM_TINT"] = "rim_tint";
- actions[RS::SHADER_SPATIAL].renames["CLEARCOAT"] = "clearcoat";
- actions[RS::SHADER_SPATIAL].renames["CLEARCOAT_GLOSS"] = "clearcoat_gloss";
- actions[RS::SHADER_SPATIAL].renames["ANISOTROPY"] = "anisotropy";
- actions[RS::SHADER_SPATIAL].renames["ANISOTROPY_FLOW"] = "anisotropy_flow";
- actions[RS::SHADER_SPATIAL].renames["SSS_STRENGTH"] = "sss_strength";
- actions[RS::SHADER_SPATIAL].renames["TRANSMISSION"] = "transmission";
- actions[RS::SHADER_SPATIAL].renames["AO"] = "ao";
- actions[RS::SHADER_SPATIAL].renames["AO_LIGHT_AFFECT"] = "ao_light_affect";
- actions[RS::SHADER_SPATIAL].renames["EMISSION"] = "emission";
- actions[RS::SHADER_SPATIAL].renames["POINT_COORD"] = "gl_PointCoord";
- actions[RS::SHADER_SPATIAL].renames["INSTANCE_CUSTOM"] = "instance_custom";
- actions[RS::SHADER_SPATIAL].renames["SCREEN_UV"] = "screen_uv";
- actions[RS::SHADER_SPATIAL].renames["SCREEN_TEXTURE"] = "screen_texture";
- actions[RS::SHADER_SPATIAL].renames["DEPTH_TEXTURE"] = "depth_buffer";
- actions[RS::SHADER_SPATIAL].renames["DEPTH"] = "gl_FragDepth";
- actions[RS::SHADER_SPATIAL].renames["ALPHA_SCISSOR"] = "alpha_scissor";
- actions[RS::SHADER_SPATIAL].renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
-
- //for light
- actions[RS::SHADER_SPATIAL].renames["VIEW"] = "view";
- actions[RS::SHADER_SPATIAL].renames["LIGHT_COLOR"] = "light_color";
- actions[RS::SHADER_SPATIAL].renames["LIGHT"] = "light";
- actions[RS::SHADER_SPATIAL].renames["ATTENUATION"] = "attenuation";
- actions[RS::SHADER_SPATIAL].renames["DIFFUSE_LIGHT"] = "diffuse_light";
- actions[RS::SHADER_SPATIAL].renames["SPECULAR_LIGHT"] = "specular_light";
-
- actions[RS::SHADER_SPATIAL].usage_defines["TANGENT"] = "#define ENABLE_TANGENT_INTERP\n";
- actions[RS::SHADER_SPATIAL].usage_defines["BINORMAL"] = "@TANGENT";
- actions[RS::SHADER_SPATIAL].usage_defines["RIM"] = "#define LIGHT_USE_RIM\n";
- actions[RS::SHADER_SPATIAL].usage_defines["RIM_TINT"] = "@RIM";
- actions[RS::SHADER_SPATIAL].usage_defines["CLEARCOAT"] = "#define LIGHT_USE_CLEARCOAT\n";
- actions[RS::SHADER_SPATIAL].usage_defines["CLEARCOAT_GLOSS"] = "@CLEARCOAT";
- actions[RS::SHADER_SPATIAL].usage_defines["ANISOTROPY"] = "#define LIGHT_USE_ANISOTROPY\n";
- actions[RS::SHADER_SPATIAL].usage_defines["ANISOTROPY_FLOW"] = "@ANISOTROPY";
- actions[RS::SHADER_SPATIAL].usage_defines["AO"] = "#define ENABLE_AO\n";
- actions[RS::SHADER_SPATIAL].usage_defines["AO_LIGHT_AFFECT"] = "#define ENABLE_AO\n";
- actions[RS::SHADER_SPATIAL].usage_defines["UV"] = "#define ENABLE_UV_INTERP\n";
- actions[RS::SHADER_SPATIAL].usage_defines["UV2"] = "#define ENABLE_UV2_INTERP\n";
- actions[RS::SHADER_SPATIAL].usage_defines["NORMAL_MAP"] = "#define ENABLE_NORMAL_MAP\n";
- actions[RS::SHADER_SPATIAL].usage_defines["NORMAL_MAP_DEPTH"] = "@NORMAL_MAP";
- actions[RS::SHADER_SPATIAL].usage_defines["COLOR"] = "#define ENABLE_COLOR_INTERP\n";
- actions[RS::SHADER_SPATIAL].usage_defines["INSTANCE_CUSTOM"] = "#define ENABLE_INSTANCE_CUSTOM\n";
- actions[RS::SHADER_SPATIAL].usage_defines["ALPHA_SCISSOR"] = "#define ALPHA_SCISSOR_USED\n";
- actions[RS::SHADER_SPATIAL].usage_defines["POSITION"] = "#define OVERRIDE_POSITION\n";
-
- actions[RS::SHADER_SPATIAL].usage_defines["SSS_STRENGTH"] = "#define ENABLE_SSS\n";
- actions[RS::SHADER_SPATIAL].usage_defines["TRANSMISSION"] = "#define TRANSMISSION_USED\n";
- actions[RS::SHADER_SPATIAL].usage_defines["SCREEN_TEXTURE"] = "#define SCREEN_TEXTURE_USED\n";
- actions[RS::SHADER_SPATIAL].usage_defines["SCREEN_UV"] = "#define SCREEN_UV_USED\n";
-
- actions[RS::SHADER_SPATIAL].usage_defines["DIFFUSE_LIGHT"] = "#define USE_LIGHT_SHADER_CODE\n";
- actions[RS::SHADER_SPATIAL].usage_defines["SPECULAR_LIGHT"] = "#define USE_LIGHT_SHADER_CODE\n";
-
- actions[RS::SHADER_SPATIAL].render_mode_defines["skip_vertex_transform"] = "#define SKIP_TRANSFORM_USED\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["world_vertex_coords"] = "#define VERTEX_WORLD_COORDS_USED\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["ensure_correct_normals"] = "#define ENSURE_CORRECT_NORMALS\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n";
-
- bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley");
-
- if (!force_lambert) {
- actions[RS::SHADER_SPATIAL].render_mode_defines["diffuse_burley"] = "#define DIFFUSE_BURLEY\n";
- }
-
- actions[RS::SHADER_SPATIAL].render_mode_defines["diffuse_lambert_wrap"] = "#define DIFFUSE_LAMBERT_WRAP\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["diffuse_toon"] = "#define DIFFUSE_TOON\n";
-
- bool force_blinn = GLOBAL_GET("rendering/shading/overrides/force_blinn_over_ggx");
-
- if (!force_blinn) {
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_SCHLICK_GGX\n";
- } else {
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_schlick_ggx"] = "#define SPECULAR_BLINN\n";
- }
-
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_blinn"] = "#define SPECULAR_BLINN\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_phong"] = "#define SPECULAR_PHONG\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_toon"] = "#define SPECULAR_TOON\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["specular_disabled"] = "#define SPECULAR_DISABLED\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["shadows_disabled"] = "#define SHADOWS_DISABLED\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["ambient_light_disabled"] = "#define AMBIENT_LIGHT_DISABLED\n";
- actions[RS::SHADER_SPATIAL].render_mode_defines["shadow_to_opacity"] = "#define USE_SHADOW_TO_OPACITY\n";
-
- /* PARTICLES SHADER */
-
- actions[RS::SHADER_PARTICLES].renames["COLOR"] = "out_color";
- actions[RS::SHADER_PARTICLES].renames["VELOCITY"] = "out_velocity_active.xyz";
- actions[RS::SHADER_PARTICLES].renames["MASS"] = "mass";
- actions[RS::SHADER_PARTICLES].renames["ACTIVE"] = "shader_active";
- actions[RS::SHADER_PARTICLES].renames["RESTART"] = "restart";
- actions[RS::SHADER_PARTICLES].renames["CUSTOM"] = "out_custom";
- actions[RS::SHADER_PARTICLES].renames["TRANSFORM"] = "xform";
- actions[RS::SHADER_PARTICLES].renames["TIME"] = "time";
- actions[RS::SHADER_PARTICLES].renames["LIFETIME"] = "lifetime";
- actions[RS::SHADER_PARTICLES].renames["DELTA"] = "local_delta";
- actions[RS::SHADER_PARTICLES].renames["NUMBER"] = "particle_number";
- actions[RS::SHADER_PARTICLES].renames["INDEX"] = "index";
- actions[RS::SHADER_PARTICLES].renames["GRAVITY"] = "current_gravity";
- actions[RS::SHADER_PARTICLES].renames["EMISSION_TRANSFORM"] = "emission_transform";
- actions[RS::SHADER_PARTICLES].renames["RANDOM_SEED"] = "random_seed";
-
- actions[RS::SHADER_PARTICLES].render_mode_defines["disable_force"] = "#define DISABLE_FORCE\n";
- actions[RS::SHADER_PARTICLES].render_mode_defines["disable_velocity"] = "#define DISABLE_VELOCITY\n";
- actions[RS::SHADER_PARTICLES].render_mode_defines["keep_data"] = "#define ENABLE_KEEP_DATA\n";
-#endif
}
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index 91201b2028..7683cf20b3 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -29,6 +29,7 @@
/*************************************************************************/
#include "shader_language.h"
+
#include "core/os/os.h"
#include "core/string/print_string.h"
#include "servers/rendering_server.h"
@@ -632,7 +633,7 @@ ShaderLanguage::Token ShaderLanguage::_get_token() {
char32_t last_char = str[str.length() - 1];
- if (hexa_found) { // Integer(hex)
+ if (hexa_found) { // Integer (hex).
if (str.size() > 11 || !str.is_valid_hex_number(true)) { // > 0xFFFFFFFF
return _make_token(TK_ERROR, "Invalid (hexadecimal) numeric constant");
}
diff --git a/servers/rendering/shader_types.cpp b/servers/rendering/shader_types.cpp
index d628cf3713..9ea98dc593 100644
--- a/servers/rendering/shader_types.cpp
+++ b/servers/rendering/shader_types.cpp
@@ -121,7 +121,7 @@ ShaderTypes::ShaderTypes() {
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["RIM"] = ShaderLanguage::TYPE_FLOAT;
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["RIM_TINT"] = ShaderLanguage::TYPE_FLOAT;
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CLEARCOAT"] = ShaderLanguage::TYPE_FLOAT;
- shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CLEARCOAT_GLOSS"] = ShaderLanguage::TYPE_FLOAT;
+ shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["CLEARCOAT_ROUGHNESS"] = ShaderLanguage::TYPE_FLOAT;
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["ANISOTROPY"] = ShaderLanguage::TYPE_FLOAT;
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["ANISOTROPY_FLOW"] = ShaderLanguage::TYPE_VEC2;
shader_modes[RS::SHADER_SPATIAL].functions["fragment"].built_ins["SSS_STRENGTH"] = ShaderLanguage::TYPE_FLOAT;
@@ -202,7 +202,7 @@ ShaderTypes::ShaderTypes() {
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "unshaded" });
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "wireframe" });
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "diffuse", "lambert", "lambert_wrap", "burley", "toon" });
- shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "specular", "schlick_ggx", "blinn", "phong", "toon", "disabled" });
+ shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "specular", "schlick_ggx", "toon", "disabled" });
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "skip_vertex_transform" });
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "world_vertex_coords" });
shader_modes[RS::SHADER_SPATIAL].modes.push_back({ "ensure_correct_normals" });
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp
index 2037268134..fe5c7dc0de 100644
--- a/servers/rendering_server.cpp
+++ b/servers/rendering_server.cpp
@@ -429,7 +429,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
memcpy(&vw[p_offsets[ai] + i * p_vertex_stride], &value, 4);
}
- } else { // if (type == Variant::PACKED_FLOAT64_ARRAY)
+ } else { // PACKED_FLOAT64_ARRAY
Vector<double> array = p_arrays[ai];
ERR_FAIL_COND_V(array.size() != p_vertex_array_len * 4, ERR_INVALID_PARAMETER);
const double *src = array.ptr();
@@ -573,7 +573,7 @@ Error RenderingServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint
memcpy(&sw[p_offsets[ai] + i * p_skin_stride], data, 2 * bone_count);
}
}
- } else { // if (type == Variant::PACKED_FLOAT64_ARRAY)
+ } else { // PACKED_FLOAT64_ARRAY
Vector<double> array = p_arrays[ai];
ERR_FAIL_COND_V(array.size() != (int32_t)(p_vertex_array_len * bone_count), ERR_INVALID_PARAMETER);
const double *src = array.ptr();
@@ -2371,10 +2371,10 @@ void RenderingServer::_bind_methods() {
BIND_ENUM_CONSTANT(ENV_TONE_MAPPER_FILMIC);
BIND_ENUM_CONSTANT(ENV_TONE_MAPPER_ACES);
- BIND_ENUM_CONSTANT(ENV_SSR_ROUGNESS_QUALITY_DISABLED);
- BIND_ENUM_CONSTANT(ENV_SSR_ROUGNESS_QUALITY_LOW);
- BIND_ENUM_CONSTANT(ENV_SSR_ROUGNESS_QUALITY_MEDIUM);
- BIND_ENUM_CONSTANT(ENV_SSR_ROUGNESS_QUALITY_HIGH);
+ BIND_ENUM_CONSTANT(ENV_SSR_ROUGHNESS_QUALITY_DISABLED);
+ BIND_ENUM_CONSTANT(ENV_SSR_ROUGHNESS_QUALITY_LOW);
+ BIND_ENUM_CONSTANT(ENV_SSR_ROUGHNESS_QUALITY_MEDIUM);
+ BIND_ENUM_CONSTANT(ENV_SSR_ROUGHNESS_QUALITY_HIGH);
BIND_ENUM_CONSTANT(ENV_SSAO_QUALITY_VERY_LOW);
BIND_ENUM_CONSTANT(ENV_SSAO_QUALITY_LOW);
@@ -2860,11 +2860,11 @@ RenderingServer::RenderingServer() {
GLOBAL_DEF("rendering/shader_compiler/shader_cache/strip_debug", false);
GLOBAL_DEF("rendering/shader_compiler/shader_cache/strip_debug.release", true);
- GLOBAL_DEF("rendering/reflections/sky_reflections/roughness_layers", 8);
+ GLOBAL_DEF_RST("rendering/reflections/sky_reflections/roughness_layers", 8); // Assumes a 256x256 cubemap
GLOBAL_DEF_RST("rendering/reflections/sky_reflections/texture_array_reflections", true);
GLOBAL_DEF("rendering/reflections/sky_reflections/texture_array_reflections.mobile", false);
- GLOBAL_DEF("rendering/reflections/sky_reflections/ggx_samples", 1024);
- GLOBAL_DEF("rendering/reflections/sky_reflections/ggx_samples.mobile", 128);
+ GLOBAL_DEF_RST("rendering/reflections/sky_reflections/ggx_samples", 32);
+ GLOBAL_DEF("rendering/reflections/sky_reflections/ggx_samples.mobile", 16);
GLOBAL_DEF("rendering/reflections/sky_reflections/fast_filter_high_quality", false);
GLOBAL_DEF("rendering/reflections/reflection_atlas/reflection_size", 256);
GLOBAL_DEF("rendering/reflections/reflection_atlas/reflection_size.mobile", 128);
@@ -2879,8 +2879,6 @@ RenderingServer::RenderingServer() {
GLOBAL_DEF("rendering/shading/overrides/force_vertex_shading.mobile", true);
GLOBAL_DEF("rendering/shading/overrides/force_lambert_over_burley", false);
GLOBAL_DEF("rendering/shading/overrides/force_lambert_over_burley.mobile", true);
- GLOBAL_DEF("rendering/shading/overrides/force_blinn_over_ggx", false);
- GLOBAL_DEF("rendering/shading/overrides/force_blinn_over_ggx.mobile", true);
GLOBAL_DEF("rendering/driver/depth_prepass/enable", true);
@@ -3001,7 +2999,7 @@ RenderingServer::RenderingServer() {
GLOBAL_DEF("rendering/limits/cluster_builder/max_clustered_elements", 512);
ProjectSettings::get_singleton()->set_custom_property_info("rendering/limits/cluster_builder/max_clustered_elements", PropertyInfo(Variant::FLOAT, "rendering/limits/cluster_builder/max_clustered_elements", PROPERTY_HINT_RANGE, "32,8192,1"));
- GLOBAL_DEF_RST("rendering/xr/enabled", false);
+ GLOBAL_DEF_RST_BASIC("xr/shaders/enabled", false);
GLOBAL_DEF_RST("rendering/2d/options/use_software_skinning", true);
GLOBAL_DEF_RST("rendering/2d/options/ninepatch_mode", 1);
diff --git a/servers/rendering_server.h b/servers/rendering_server.h
index 5e58afe718..5748d8808b 100644
--- a/servers/rendering_server.h
+++ b/servers/rendering_server.h
@@ -1009,10 +1009,10 @@ public:
virtual void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_in, float p_fade_out, float p_depth_tolerance) = 0;
enum EnvironmentSSRRoughnessQuality {
- ENV_SSR_ROUGNESS_QUALITY_DISABLED,
- ENV_SSR_ROUGNESS_QUALITY_LOW,
- ENV_SSR_ROUGNESS_QUALITY_MEDIUM,
- ENV_SSR_ROUGNESS_QUALITY_HIGH,
+ ENV_SSR_ROUGHNESS_QUALITY_DISABLED,
+ ENV_SSR_ROUGHNESS_QUALITY_LOW,
+ ENV_SSR_ROUGHNESS_QUALITY_MEDIUM,
+ ENV_SSR_ROUGHNESS_QUALITY_HIGH,
};
virtual void environment_set_ssr_roughness_quality(EnvironmentSSRRoughnessQuality p_quality) = 0;
diff --git a/servers/xr/xr_positional_tracker.cpp b/servers/xr/xr_positional_tracker.cpp
index 7b21eeba04..671eb7a111 100644
--- a/servers/xr/xr_positional_tracker.cpp
+++ b/servers/xr/xr_positional_tracker.cpp
@@ -65,10 +65,6 @@ void XRPositionalTracker::_bind_methods() {
ADD_SIGNAL(MethodInfo("button_released", PropertyInfo(Variant::STRING, "name")));
ADD_SIGNAL(MethodInfo("input_value_changed", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::FLOAT, "value")));
ADD_SIGNAL(MethodInfo("input_axis_changed", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::VECTOR2, "vector")));
-
- ClassDB::bind_method(D_METHOD("get_rumble"), &XRPositionalTracker::get_rumble);
- ClassDB::bind_method(D_METHOD("set_rumble", "rumble"), &XRPositionalTracker::set_rumble);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rumble"), "set_rumble", "get_rumble");
};
void XRPositionalTracker::set_tracker_type(XRServer::TrackerType p_type) {
@@ -206,21 +202,8 @@ void XRPositionalTracker::set_input(const StringName &p_action_name, const Varia
}
}
-real_t XRPositionalTracker::get_rumble() const {
- return rumble;
-};
-
-void XRPositionalTracker::set_rumble(real_t p_rumble) {
- if (p_rumble > 0.0) {
- rumble = p_rumble;
- } else {
- rumble = 0.0;
- };
-};
-
XRPositionalTracker::XRPositionalTracker() {
type = XRServer::TRACKER_UNKNOWN;
name = "Unknown";
hand = TRACKER_HAND_UNKNOWN;
- rumble = 0.0;
};
diff --git a/servers/xr/xr_positional_tracker.h b/servers/xr/xr_positional_tracker.h
index 2f358cbb21..ccb30bbbe6 100644
--- a/servers/xr/xr_positional_tracker.h
+++ b/servers/xr/xr_positional_tracker.h
@@ -62,10 +62,6 @@ private:
Map<StringName, Ref<XRPose>> poses;
Map<StringName, Variant> inputs;
- int joy_id; // if we also have a related joystick entity, the id of the joystick
- Ref<Mesh> mesh; // when available, a mesh that can be used to render this tracker
- real_t rumble; // rumble strength, 0.0 is off, 1.0 is maximum, note that we only record here, xr_interface is responsible for execution
-
protected:
static void _bind_methods();
@@ -87,10 +83,6 @@ public:
Variant get_input(const StringName &p_action_name) const;
void set_input(const StringName &p_action_name, const Variant &p_value);
- // TODO replace by new implementation
- real_t get_rumble() const;
- void set_rumble(real_t p_rumble);
-
XRPositionalTracker();
~XRPositionalTracker() {}
};
diff --git a/servers/xr_server.cpp b/servers/xr_server.cpp
index dbfe76a127..e32b41c7ae 100644
--- a/servers/xr_server.cpp
+++ b/servers/xr_server.cpp
@@ -348,9 +348,10 @@ PackedStringArray XRServer::get_suggested_pose_names(const StringName &p_tracker
}
void XRServer::_process() {
- /* called from renderer_viewport.draw_viewports right before we start drawing our viewports */
+ // called from our main game loop before we handle physics and game logic
+ // note that we can have multiple interfaces active if we have interfaces that purely handle tracking
- /* process all active interfaces */
+ // process all active interfaces
for (int i = 0; i < interfaces.size(); i++) {
if (!interfaces[i].is_valid()) {
// ignore, not a valid reference
diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h
index bf78298450..87016dddf6 100644
--- a/tests/core/string/test_string.h
+++ b/tests/core/string/test_string.h
@@ -39,7 +39,7 @@ namespace TestString {
int u32scmp(const char32_t *l, const char32_t *r) {
for (; *l == *r && *l && *r; l++, r++) {
- ;
+ // Continue.
}
return *l - *r;
}
diff --git a/tests/servers/test_physics_2d.cpp b/tests/servers/test_physics_2d.cpp
index 8b77458a33..138412ec09 100644
--- a/tests/servers/test_physics_2d.cpp
+++ b/tests/servers/test_physics_2d.cpp
@@ -84,6 +84,7 @@ class TestPhysics2DMainLoop : public MainLoop {
body_shape_data[PhysicsServer2D::SHAPE_SEGMENT].shape = segment_shape;
}
+
// CIRCLE
{
@@ -182,10 +183,7 @@ class TestPhysics2DMainLoop : public MainLoop {
}
void _do_ray_query() {
- /*
- PhysicsServer2D *ps = PhysicsServer2D::get_singleton();
- ps->query_intersection_segment(ray_query,ray_from,ray_to);
- */
+ // FIXME: Do something?
}
protected:
@@ -231,11 +229,10 @@ protected:
ps->body_set_continuous_collision_detection_mode(body, PhysicsServer2D::CCD_MODE_CAST_SHAPE);
ps->body_set_state(body, PhysicsServer2D::BODY_STATE_TRANSFORM, p_xform);
- //print_line("add body with xform: "+p_xform);
RID sprite = vs->canvas_item_create();
vs->canvas_item_set_parent(sprite, canvas);
vs->canvas_item_set_transform(sprite, p_xform);
- Size2 imgsize(5, 5); //vs->texture_get_width(body_shape_data[p_shape].image), vs->texture_get_height(body_shape_data[p_shape].image));
+ Size2 imgsize(5, 5);
vs->canvas_item_add_texture_rect(sprite, Rect2(-imgsize / 2.0, imgsize), body_shape_data[p_shape].image);
ps->body_set_force_integration_callback(body, callable_mp(this, &TestPhysics2DMainLoop::_body_moved), sprite);
@@ -326,21 +323,11 @@ public:
vs->viewport_set_size(vp, screen_size.x, screen_size.y);
vs->viewport_attach_to_screen(vp, Rect2(Vector2(), screen_size));
vs->viewport_set_active(vp, true);
-
- Transform2D smaller;
- //smaller.scale(Vector2(0.6,0.6));
- //smaller.elements[2]=Vector2(100,0);
-
- //view_xform = smaller;
vs->viewport_set_canvas_transform(vp, canvas, view_xform);
}
ray = vs->canvas_item_create();
vs->canvas_item_set_parent(ray, canvas);
- //ray_query = ps->query_create(this,"_ray_query_callback",Variant());
- //ps->query_intersection(ray_query,space);
-
- _create_body_shape_data();
for (int i = 0; i < 32; i++) {
PhysicsServer2D::ShapeType types[4] = {
@@ -352,17 +339,9 @@ public:
};
PhysicsServer2D::ShapeType type = types[i % 4];
- //type=PhysicsServer2D::SHAPE_SEGMENT;
_add_body(type, Transform2D(i * 0.8, Point2(152 + i * 40, 100 - 40 * i)));
- /*
- if (i==0)
- ps->body_set_mode(b,PhysicsServer2D::BODY_MODE_STATIC);
- */
}
- //RID b= _add_body(PhysicsServer2D::SHAPE_CIRCLE,Transform2D(0,Point2(101,140)));
- //ps->body_set_mode(b,PhysicsServer2D::BODY_MODE_STATIC);
-
Point2 prev;
Vector<Point2> parr;
@@ -376,9 +355,6 @@ public:
}
_add_concave(parr);
- //_add_world_boundary(Vector2(0.0,-1).normalized(),-300);
- //_add_world_boundary(Vector2(1,0).normalized(),50);
- //_add_world_boundary(Vector2(-1,0).normalized(),-600);
}
virtual bool process(double p_time) override {
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 7d2586b4dc..d591d2cbd8 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -206,7 +206,7 @@ Files extracted from upstream source:
## harfbuzz
- Upstream: https://github.com/harfbuzz/harfbuzz
-- Version: 3.3.2 (ac46c3248e8b0316235943175c4d4a11c24dd4a9, 2022)
+- Version: 4.0.0 (8d1b000a3edc90c12267b836b4ef3f81c0e53edc, 2022)
- License: MIT
Files extracted from upstream source:
@@ -454,7 +454,7 @@ Collection of single-file libraries used in Godot components.
* License: Public Domain or MIT
- `stb_rect_pack.h`
* Upstream: https://github.com/nothings/stb
- * Version: 1.00 (2bb4a0accd4003c1db4c24533981e01b1adfd656, 2019)
+ * Version: 1.01 (af1a5bc352164740c1cc1354942b1c6b72eacb8a, 2021)
* License: Public Domain or Unlicense or MIT
- `yuv2rgb.h`
* Upstream: http://wss.co.uk/pinknoise/yuv2rgb/ (to check)
@@ -474,6 +474,7 @@ Files extracted from the upstream source:
- Files in `core/` folder.
- `LICENSE.txt` and `CHANGELOG.md`
+
## oidn
- Upstream: https://github.com/OpenImageDenoise/oidn
@@ -505,6 +506,30 @@ Patch files are provided in `oidn/patches/`.
- scripts/resource_to_cpp.py (used in modules/denoise/resource_to_cpp.py)
+## openxr
+
+- Upstream: https://github.com/KhronosGroup/OpenXR-SDK
+- Version: 1.0.22 (458984d7f59d1ae6dc1b597d94b02e4f7132eaba, 2022)
+- License: Apache 2.0
+
+Files extracted from upstream source:
+
+- include/
+- src/common/
+- src/loader/
+- src/*.{c,h}
+- src/external/jsoncpp/include/
+- src/external/jsoncpp/src/lib_json/
+- LICENSE and COPYING.adoc
+
+Exclude:
+
+- src/external/android-jni-wrappers and src/external/jnipp (not used yet)
+- All CMake stuff: cmake/, CMakeLists.txt and *.cmake
+- All Gradle stuff: *gradle*, AndroidManifest.xml
+- All following files (and their .license files): *.{def,in,json,map,pom,rc}
+
+
## pcre2
- Upstream: http://www.pcre.org
@@ -665,10 +690,10 @@ Files extracted from upstream source:
SDK release: https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/master/layers/generated/vk_enum_string_helper.h
`vk_mem_alloc.h` is taken from https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
-Version: 3.0.0-development (2022-02-08), commit `a1895bc76547370564d604faa27e0b73de747df1`
+Version: 3.0.0-development (2022-02-24), commit `dc3f6bb9159df22ceed69c7765ddfb4fbb1b6ed0`
`vk_mem_alloc.cpp` is a Godot file and should be preserved on updates.
-Patches in the `patches` directory should be re-applied after updates (order must be followed among the number-prefixed ones).
+Patches in the `patches` directory should be re-applied after updates.
## wslay
diff --git a/thirdparty/harfbuzz/src/hb-algs.hh b/thirdparty/harfbuzz/src/hb-algs.hh
index 3a3ab08046..c40a55cd1f 100644
--- a/thirdparty/harfbuzz/src/hb-algs.hh
+++ b/thirdparty/harfbuzz/src/hb-algs.hh
@@ -498,7 +498,7 @@ struct hb_pair_t
template <typename Q1, typename Q2,
hb_enable_if (hb_is_convertible (T1, Q1) &&
- hb_is_convertible (T2, T2))>
+ hb_is_convertible (T2, Q2))>
operator hb_pair_t<Q1, Q2> () { return hb_pair_t<Q1, Q2> (first, second); }
hb_pair_t<T1, T2> reverse () const
diff --git a/thirdparty/harfbuzz/src/hb-buffer-verify.cc b/thirdparty/harfbuzz/src/hb-buffer-verify.cc
new file mode 100644
index 0000000000..dea2c11c35
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-buffer-verify.cc
@@ -0,0 +1,422 @@
+/*
+ * Copyright © 2022 Behdad Esfahbod
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb.hh"
+
+#ifndef HB_NO_BUFFER_VERIFY
+
+#include "hb-buffer.hh"
+
+
+#define BUFFER_VERIFY_ERROR "buffer verify error: "
+static inline void
+buffer_verify_error (hb_buffer_t *buffer,
+ hb_font_t *font,
+ const char *fmt,
+ ...) HB_PRINTF_FUNC(3, 4);
+
+static inline void
+buffer_verify_error (hb_buffer_t *buffer,
+ hb_font_t *font,
+ const char *fmt,
+ ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ if (buffer->messaging ())
+ {
+ buffer->message_impl (font, fmt, ap);
+ }
+ else
+ {
+ fprintf (stderr, "harfbuzz ");
+ vfprintf (stderr, fmt, ap);
+ fprintf (stderr, "\n");
+ }
+ va_end (ap);
+}
+
+static bool
+buffer_verify_monotone (hb_buffer_t *buffer,
+ hb_font_t *font)
+{
+ /* Check that clusters are monotone. */
+ if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES ||
+ buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ bool is_forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+
+ unsigned int num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ for (unsigned int i = 1; i < num_glyphs; i++)
+ if (info[i-1].cluster != info[i].cluster &&
+ (info[i-1].cluster < info[i].cluster) != is_forward)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "clusters are not monotone.");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static bool
+buffer_verify_unsafe_to_break (hb_buffer_t *buffer,
+ hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ if (buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES &&
+ buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ /* Cannot perform this check without monotone clusters. */
+ return true;
+ }
+
+ /* Check that breaking up shaping at safe-to-break is indeed safe. */
+
+ hb_buffer_t *fragment = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (fragment, hb_buffer_get_flags (fragment) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_t *reconstruction = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (reconstruction, hb_buffer_get_flags (reconstruction) & ~HB_BUFFER_FLAG_VERIFY);
+
+ unsigned int num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ unsigned int num_chars;
+ hb_glyph_info_t *text = hb_buffer_get_glyph_infos (text_buffer, &num_chars);
+
+ /* Chop text and shape fragments. */
+ bool forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+ unsigned int start = 0;
+ unsigned int text_start = forward ? 0 : num_chars;
+ unsigned int text_end = text_start;
+ for (unsigned int end = 1; end < num_glyphs + 1; end++)
+ {
+ if (end < num_glyphs &&
+ (info[end].cluster == info[end-1].cluster ||
+ info[end-(forward?0:1)].mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK))
+ continue;
+
+ /* Shape segment corresponding to glyphs start..end. */
+ if (end == num_glyphs)
+ {
+ if (forward)
+ text_end = num_chars;
+ else
+ text_start = 0;
+ }
+ else
+ {
+ if (forward)
+ {
+ unsigned int cluster = info[end].cluster;
+ while (text_end < num_chars && text[text_end].cluster < cluster)
+ text_end++;
+ }
+ else
+ {
+ unsigned int cluster = info[end - 1].cluster;
+ while (text_start && text[text_start - 1].cluster >= cluster)
+ text_start--;
+ }
+ }
+ assert (text_start < text_end);
+
+ if (0)
+ printf("start %d end %d text start %d end %d\n", start, end, text_start, text_end);
+
+ hb_buffer_clear_contents (fragment);
+
+ hb_buffer_flags_t flags = hb_buffer_get_flags (fragment);
+ if (0 < text_start)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_BOT);
+ if (text_end < num_chars)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_EOT);
+ hb_buffer_set_flags (fragment, flags);
+
+ hb_buffer_append (fragment, text_buffer, text_start, text_end);
+ if (!hb_shape_full (font, fragment, features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragment);
+ return false;
+ }
+ hb_buffer_append (reconstruction, fragment, 0, -1);
+
+ start = end;
+ if (forward)
+ text_start = text_end;
+ else
+ text_end = text_start;
+ }
+
+ bool ret = true;
+ hb_buffer_diff_flags_t diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
+ if (diff)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "unsafe-to-break test failed.");
+ ret = false;
+
+ /* Return the reconstructed result instead so it can be inspected. */
+ hb_buffer_set_length (buffer, 0);
+ hb_buffer_append (buffer, reconstruction, 0, -1);
+ }
+
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragment);
+
+ return ret;
+}
+
+static bool
+buffer_verify_unsafe_to_concat (hb_buffer_t *buffer,
+ hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ if (buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES &&
+ buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ /* Cannot perform this check without monotone clusters. */
+ return true;
+ }
+
+ /* Check that shuffling up text before shaping at safe-to-concat points
+ * is indeed safe. */
+
+ /* This is what we do:
+ *
+ * 1. We shape text once. Then segment the text at all the safe-to-concat
+ * points;
+ *
+ * 2. Then we create two buffers, one containing all the even segments and
+ * one all the odd segments.
+ *
+ * 3. Because all these segments were safe-to-concat at both ends, we
+ * expect that concatenating them and shaping should NOT change the
+ * shaping results of each segment. As such, we expect that after
+ * shaping the two buffers, we still get cluster boundaries at the
+ * segment boundaries, and that those all are safe-to-concat points.
+ * Moreover, that there are NOT any safe-to-concat points within the
+ * segments.
+ *
+ * 4. Finally, we reconstruct the shaping results of the original text by
+ * simply interleaving the shaping results of the segments from the two
+ * buffers, and assert that the total shaping results is the same as
+ * the one from original buffer in step 1.
+ */
+
+ hb_buffer_t *fragments[2] {hb_buffer_create_similar (buffer),
+ hb_buffer_create_similar (buffer)};
+ hb_buffer_set_flags (fragments[0], hb_buffer_get_flags (fragments[0]) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_set_flags (fragments[1], hb_buffer_get_flags (fragments[1]) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_t *reconstruction = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (reconstruction, hb_buffer_get_flags (reconstruction) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_segment_properties_t props;
+ hb_buffer_get_segment_properties (buffer, &props);
+ hb_buffer_set_segment_properties (fragments[0], &props);
+ hb_buffer_set_segment_properties (fragments[1], &props);
+ hb_buffer_set_segment_properties (reconstruction, &props);
+
+ unsigned num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ unsigned num_chars;
+ hb_glyph_info_t *text = hb_buffer_get_glyph_infos (text_buffer, &num_chars);
+
+ bool forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+
+ if (!forward)
+ hb_buffer_reverse (buffer);
+
+ /*
+ * Split text into segments and collect into to fragment streams.
+ */
+ {
+ unsigned fragment_idx = 0;
+ unsigned start = 0;
+ unsigned text_start = 0;
+ unsigned text_end = 0;
+ for (unsigned end = 1; end < num_glyphs + 1; end++)
+ {
+ if (end < num_glyphs &&
+ (info[end].cluster == info[end-1].cluster ||
+ info[end].mask & HB_GLYPH_FLAG_UNSAFE_TO_CONCAT))
+ continue;
+
+ /* Accumulate segment corresponding to glyphs start..end. */
+ if (end == num_glyphs)
+ text_end = num_chars;
+ else
+ {
+ unsigned cluster = info[end].cluster;
+ while (text_end < num_chars && text[text_end].cluster < cluster)
+ text_end++;
+ }
+ assert (text_start < text_end);
+
+ if (0)
+ printf("start %d end %d text start %d end %d\n", start, end, text_start, text_end);
+
+#if 0
+ hb_buffer_flags_t flags = hb_buffer_get_flags (fragment);
+ if (0 < text_start)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_BOT);
+ if (text_end < num_chars)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_EOT);
+ hb_buffer_set_flags (fragment, flags);
+#endif
+
+ hb_buffer_append (fragments[fragment_idx], text_buffer, text_start, text_end);
+
+ start = end;
+ text_start = text_end;
+ fragment_idx = 1 - fragment_idx;
+ }
+ }
+
+ bool ret = true;
+ hb_buffer_diff_flags_t diff;
+
+ /*
+ * Shape the two fragment streams.
+ */
+ if (!hb_shape_full (font, fragments[0], features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ ret = false;
+ goto out;
+ }
+ if (!hb_shape_full (font, fragments[1], features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ ret = false;
+ goto out;
+ }
+
+ if (!forward)
+ {
+ hb_buffer_reverse (fragments[0]);
+ hb_buffer_reverse (fragments[1]);
+ }
+
+ /*
+ * Reconstruct results.
+ */
+ {
+ unsigned fragment_idx = 0;
+ unsigned fragment_start[2] {0, 0};
+ unsigned fragment_num_glyphs[2];
+ hb_glyph_info_t *fragment_info[2];
+ for (unsigned i = 0; i < 2; i++)
+ fragment_info[i] = hb_buffer_get_glyph_infos (fragments[i], &fragment_num_glyphs[i]);
+ while (fragment_start[0] < fragment_num_glyphs[0] ||
+ fragment_start[1] < fragment_num_glyphs[1])
+ {
+ unsigned fragment_end = fragment_start[fragment_idx] + 1;
+ while (fragment_end < fragment_num_glyphs[fragment_idx] &&
+ (fragment_info[fragment_idx][fragment_end].cluster == fragment_info[fragment_idx][fragment_end - 1].cluster ||
+ fragment_info[fragment_idx][fragment_end].mask & HB_GLYPH_FLAG_UNSAFE_TO_CONCAT))
+ fragment_end++;
+
+ hb_buffer_append (reconstruction, fragments[fragment_idx], fragment_start[fragment_idx], fragment_end);
+
+ fragment_start[fragment_idx] = fragment_end;
+ fragment_idx = 1 - fragment_idx;
+ }
+ }
+
+ if (!forward)
+ {
+ hb_buffer_reverse (buffer);
+ hb_buffer_reverse (reconstruction);
+ }
+
+ /*
+ * Diff results.
+ */
+ diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
+ if (diff)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "unsafe-to-concat test failed.");
+ ret = false;
+
+ /* Return the reconstructed result instead so it can be inspected. */
+ hb_buffer_set_length (buffer, 0);
+ hb_buffer_append (buffer, reconstruction, 0, -1);
+ }
+
+
+out:
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragments[0]);
+ hb_buffer_destroy (fragments[1]);
+
+ return ret;
+}
+
+bool
+hb_buffer_t::verify (hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ bool ret = true;
+ if (!buffer_verify_monotone (this, font))
+ ret = false;
+ if (!buffer_verify_unsafe_to_break (this, text_buffer, font, features, num_features, shapers))
+ ret = false;
+ if ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) != 0 &&
+ !buffer_verify_unsafe_to_concat (this, text_buffer, font, features, num_features, shapers))
+ ret = false;
+ if (!ret)
+ {
+ unsigned len = text_buffer->len;
+ hb_vector_t<char> bytes;
+ if (likely (bytes.resize (len * 10 + 16)))
+ {
+ hb_buffer_serialize_unicode (text_buffer,
+ 0, len,
+ bytes.arrayZ, bytes.length,
+ &len,
+ HB_BUFFER_SERIALIZE_FORMAT_TEXT,
+ HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS);
+ buffer_verify_error (this, font, BUFFER_VERIFY_ERROR "text was: %s.", bytes.arrayZ);
+ }
+ }
+ return ret;
+}
+
+
+#endif
diff --git a/thirdparty/harfbuzz/src/hb-buffer.cc b/thirdparty/harfbuzz/src/hb-buffer.cc
index e50afcb203..d36fcfde39 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.cc
+++ b/thirdparty/harfbuzz/src/hb-buffer.cc
@@ -1789,7 +1789,7 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
**/
HB_EXTERN void
hb_buffer_append (hb_buffer_t *buffer,
- hb_buffer_t *source,
+ const hb_buffer_t *source,
unsigned int start,
unsigned int end)
{
diff --git a/thirdparty/harfbuzz/src/hb-buffer.h b/thirdparty/harfbuzz/src/hb-buffer.h
index 9fbd7b1ec3..ece7d2d8cf 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.h
+++ b/thirdparty/harfbuzz/src/hb-buffer.h
@@ -137,7 +137,11 @@ typedef struct hb_glyph_info_t {
* clusters.
* The #HB_GLYPH_FLAG_UNSAFE_TO_BREAK flag will
* always imply this flag.
- * Since: 3.3.0
+ * To use this flag, you must enable the buffer flag
+ * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT during
+ * shaping, otherwise the buffer flag will not be
+ * reliably produced.
+ * Since: 4.0.0
* @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.
*
* Flags for #hb_glyph_info_t.
@@ -356,7 +360,19 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
* @HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE:
* flag indicating that a dotted circle should
* not be inserted in the rendering of incorrect
- * character sequences (such at <0905 093E>). Since: 2.4
+ * character sequences (such at <0905 093E>). Since: 2.4.0
+ * @HB_BUFFER_FLAG_VERIFY:
+ * flag indicating that the hb_shape() call and its variants
+ * should perform various verification processes on the results
+ * of the shaping operation on the buffer. If the verification
+ * fails, then either a buffer message is sent, if a message
+ * handler is installed on the buffer, or a message is written
+ * to standard error. In either case, the shaping result might
+ * be modified to show the failed output. Since: 3.4.0
+ * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT:
+ * flag indicating that the @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
+ * glyph-flag should be produced by the shaper. By default
+ * it will not be produced since it incurs a cost. Since: 4.0.0
*
* Flags for #hb_buffer_t.
*
@@ -368,7 +384,9 @@ typedef enum { /*< flags >*/
HB_BUFFER_FLAG_EOT = 0x00000002u, /* End-of-text */
HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u,
HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES = 0x00000008u,
- HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE = 0x00000010u
+ HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE = 0x00000010u,
+ HB_BUFFER_FLAG_VERIFY = 0x00000020u,
+ HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT = 0x00000040u
} hb_buffer_flags_t;
HB_EXTERN void
@@ -522,7 +540,7 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
HB_EXTERN void
hb_buffer_append (hb_buffer_t *buffer,
- hb_buffer_t *source,
+ const hb_buffer_t *source,
unsigned int start,
unsigned int end);
@@ -619,24 +637,24 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
HB_EXTERN unsigned int
hb_buffer_serialize_unicode (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_buffer_serialize_format_t format,
- hb_buffer_serialize_flags_t flags);
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_buffer_serialize_format_t format,
+ hb_buffer_serialize_flags_t flags);
HB_EXTERN unsigned int
hb_buffer_serialize (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_font_t *font,
- hb_buffer_serialize_format_t format,
- hb_buffer_serialize_flags_t flags);
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_font_t *font,
+ hb_buffer_serialize_format_t format,
+ hb_buffer_serialize_flags_t flags);
HB_EXTERN hb_bool_t
hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
@@ -648,10 +666,10 @@ hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
HB_EXTERN hb_bool_t
hb_buffer_deserialize_unicode (hb_buffer_t *buffer,
- const char *buf,
- int buf_len,
- const char **end_ptr,
- hb_buffer_serialize_format_t format);
+ const char *buf,
+ int buf_len,
+ const char **end_ptr,
+ hb_buffer_serialize_format_t format);
diff --git a/thirdparty/harfbuzz/src/hb-buffer.hh b/thirdparty/harfbuzz/src/hb-buffer.hh
index ac45f090a5..bc6992905e 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer.hh
@@ -212,6 +212,20 @@ struct hb_buffer_t
HB_INTERNAL void enter ();
HB_INTERNAL void leave ();
+#ifndef HB_NO_BUFFER_VERIFY
+ HB_INTERNAL
+#endif
+ bool verify (hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+#ifndef HB_NO_BUFFER_VERIFY
+ ;
+#else
+ { return true; }
+#endif
+
unsigned int backtrack_len () const { return have_output ? out_len : idx; }
unsigned int lookahead_len () const { return len - idx; }
uint8_t next_serial () { return ++serial ? serial : ++serial; }
@@ -446,6 +460,8 @@ struct hb_buffer_t
}
void unsafe_to_concat (unsigned int start = 0, unsigned int end = -1)
{
+ if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
+ return;
_set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
start, end,
true);
@@ -458,6 +474,8 @@ struct hb_buffer_t
}
void unsafe_to_concat_from_outbuffer (unsigned int start = 0, unsigned int end = -1)
{
+ if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
+ return;
_set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
start, end,
false, true);
diff --git a/thirdparty/harfbuzz/src/hb-common.cc b/thirdparty/harfbuzz/src/hb-common.cc
index 249a8a8010..41229b9183 100644
--- a/thirdparty/harfbuzz/src/hb-common.cc
+++ b/thirdparty/harfbuzz/src/hb-common.cc
@@ -1065,7 +1065,7 @@ hb_variation_from_string (const char *str, int len,
static inline void free_static_C_locale ();
static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<hb_locale_t>,
- hb_C_locale_lazy_loader_t>
+ hb_C_locale_lazy_loader_t>
{
static hb_locale_t create ()
{
diff --git a/thirdparty/harfbuzz/src/hb-common.h b/thirdparty/harfbuzz/src/hb-common.h
index 0384117a4d..7b897a6c51 100644
--- a/thirdparty/harfbuzz/src/hb-common.h
+++ b/thirdparty/harfbuzz/src/hb-common.h
@@ -130,6 +130,16 @@ typedef union _hb_var_int_t {
int8_t i8[4];
} hb_var_int_t;
+typedef union _hb_var_num_t {
+ float f;
+ uint32_t u32;
+ int32_t i32;
+ uint16_t u16[2];
+ int16_t i16[2];
+ uint8_t u8[4];
+ int8_t i8[4];
+} hb_var_num_t;
+
/* hb_tag_t */
@@ -481,6 +491,7 @@ hb_language_get_default (void);
* @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0
* @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0
* @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0
+ * @HB_SCRIPT_MATH: `Zmth`, Since: 3.4.0
* @HB_SCRIPT_INVALID: No script set
*
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
@@ -697,6 +708,11 @@ typedef enum
HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/
HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/
+ /*
+ * Since 3.4.0
+ */
+ HB_SCRIPT_MATH = HB_TAG ('Z','m','t','h'),
+
/* No script set. */
HB_SCRIPT_INVALID = HB_TAG_NONE,
diff --git a/thirdparty/harfbuzz/src/hb-config.hh b/thirdparty/harfbuzz/src/hb-config.hh
index 7d00d9088a..4b46dea938 100644
--- a/thirdparty/harfbuzz/src/hb-config.hh
+++ b/thirdparty/harfbuzz/src/hb-config.hh
@@ -55,6 +55,7 @@
#define HB_NO_ATEXIT
#define HB_NO_BUFFER_MESSAGE
#define HB_NO_BUFFER_SERIALIZE
+#define HB_NO_BUFFER_VERIFY
#define HB_NO_BITMAP
#define HB_NO_CFF
#define HB_NO_COLOR
@@ -84,6 +85,7 @@
#ifdef HB_MINI
#define HB_NO_AAT
#define HB_NO_LEGACY
+#define HB_NO_BORING_EXPANSION
#endif
#if defined(HAVE_CONFIG_OVERRIDE_H) || defined(HB_CONFIG_OVERRIDE_H)
diff --git a/thirdparty/harfbuzz/src/hb-draw.cc b/thirdparty/harfbuzz/src/hb-draw.cc
index c0af6ce013..b31019b07e 100644
--- a/thirdparty/harfbuzz/src/hb-draw.cc
+++ b/thirdparty/harfbuzz/src/hb-draw.cc
@@ -25,237 +25,313 @@
#include "hb.hh"
#ifndef HB_NO_DRAW
-#ifdef HB_EXPERIMENTAL_API
#include "hb-draw.hh"
-#include "hb-ot.h"
-#include "hb-ot-glyf-table.hh"
-#include "hb-ot-cff1-table.hh"
-#include "hb-ot-cff2-table.hh"
/**
- * hb_draw_funcs_set_move_to_func:
- * @funcs: draw functions object
- * @move_to: move-to callback
+ * SECTION:hb-draw
+ * @title: hb-draw
+ * @short_description: Glyph drawing
+ * @include: hb.h
*
- * Sets move-to callback to the draw functions object.
- *
- * Since: EXPERIMENTAL
+ * Functions for drawing (extracting) glyph shapes.
**/
-void
-hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *funcs,
- hb_draw_move_to_func_t move_to)
+
+static void
+hb_draw_move_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_line_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_quadratic_to_nil (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->move_to = move_to;
+ dfuncs->emit_cubic_to (draw_data, *st,
+ (st->current_x + 2.f * control_x) / 3.f,
+ (st->current_y + 2.f * control_y) / 3.f,
+ (to_x + 2.f * control_x) / 3.f,
+ (to_y + 2.f * control_y) / 3.f,
+ to_x, to_y);
+}
+
+static void
+hb_draw_cubic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float control1_x HB_UNUSED, float control1_y HB_UNUSED,
+ float control2_x HB_UNUSED, float control2_y HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_close_path_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+
+#define HB_DRAW_FUNC_IMPLEMENT(name) \
+ \
+void \
+hb_draw_funcs_set_##name##_func (hb_draw_funcs_t *dfuncs, \
+ hb_draw_##name##_func_t func, \
+ void *user_data, \
+ hb_destroy_func_t destroy) \
+{ \
+ if (hb_object_is_immutable (dfuncs)) \
+ return; \
+ \
+ if (dfuncs->destroy.name) \
+ dfuncs->destroy.name (dfuncs->user_data.name); \
+ \
+ if (func) { \
+ dfuncs->func.name = func; \
+ dfuncs->user_data.name = user_data; \
+ dfuncs->destroy.name = destroy; \
+ } else { \
+ dfuncs->func.name = hb_draw_##name##_nil; \
+ dfuncs->user_data.name = nullptr; \
+ dfuncs->destroy.name = nullptr; \
+ } \
}
+HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+
/**
- * hb_draw_funcs_set_line_to_func:
- * @funcs: draw functions object
- * @line_to: line-to callback
+ * hb_draw_funcs_create: (Xconstructor)
+ *
+ * Creates a new draw callbacks object.
*
- * Sets line-to callback to the draw functions object.
+ * Return value: (transfer full):
+ * A newly allocated #hb_draw_funcs_t with a reference count of 1. The initial
+ * reference count should be released with hb_draw_funcs_destroy when you are
+ * done using the #hb_draw_funcs_t. This function never returns %NULL. If
+ * memory cannot be allocated, a special singleton #hb_draw_funcs_t object will
+ * be returned.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-void
-hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *funcs,
- hb_draw_line_to_func_t line_to)
+hb_draw_funcs_t *
+hb_draw_funcs_create ()
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->line_to = line_to;
+ hb_draw_funcs_t *dfuncs;
+ if (unlikely (!(dfuncs = hb_object_create<hb_draw_funcs_t> ())))
+ return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
+
+ dfuncs->func = Null (hb_draw_funcs_t).func;
+
+ return dfuncs;
}
+DEFINE_NULL_INSTANCE (hb_draw_funcs_t) =
+{
+ HB_OBJECT_HEADER_STATIC,
+
+ {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_nil,
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ }
+};
+
+
/**
- * hb_draw_funcs_set_quadratic_to_func:
- * @funcs: draw functions object
- * @move_to: quadratic-to callback
+ * hb_draw_funcs_reference: (skip)
+ * @dfuncs: draw functions
+ *
+ * Increases the reference count on @dfuncs by one. This prevents @buffer from
+ * being destroyed until a matching call to hb_draw_funcs_destroy() is made.
*
- * Sets quadratic-to callback to the draw functions object.
+ * Return value: (transfer full):
+ * The referenced #hb_draw_funcs_t.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-void
-hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_quadratic_to_func_t quadratic_to)
+hb_draw_funcs_t *
+hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->quadratic_to = quadratic_to;
- funcs->is_quadratic_to_set = true;
+ return hb_object_reference (dfuncs);
}
/**
- * hb_draw_funcs_set_cubic_to_func:
- * @funcs: draw functions
- * @cubic_to: cubic-to callback
+ * hb_draw_funcs_destroy: (skip)
+ * @dfuncs: draw functions
*
- * Sets cubic-to callback to the draw functions object.
+ * Deallocate the @dfuncs.
+ * Decreases the reference count on @dfuncs by one. If the result is zero, then
+ * @dfuncs and all associated resources are freed. See hb_draw_funcs_reference().
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_cubic_to_func_t cubic_to)
+hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->cubic_to = cubic_to;
+ if (!hb_object_destroy (dfuncs)) return;
+
+#define HB_DRAW_FUNC_IMPLEMENT(name) \
+ if (dfuncs->destroy.name) dfuncs->destroy.name (dfuncs->user_data.name);
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+
+
+ hb_free (dfuncs);
}
/**
- * hb_draw_funcs_set_close_path_func:
- * @funcs: draw functions object
- * @close_path: close-path callback
+ * hb_draw_funcs_make_immutable:
+ * @dfuncs: draw functions
*
- * Sets close-path callback to the draw functions object.
+ * Makes @dfuncs object immutable.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *funcs,
- hb_draw_close_path_func_t close_path)
+hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->close_path = close_path;
-}
-
-static void
-_move_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
-
-static void
-_line_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
-
-static void
-_quadratic_to_nil (hb_position_t control_x HB_UNUSED, hb_position_t control_y HB_UNUSED,
- hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
- void *user_data HB_UNUSED) {}
-
-static void
-_cubic_to_nil (hb_position_t control1_x HB_UNUSED, hb_position_t control1_y HB_UNUSED,
- hb_position_t control2_x HB_UNUSED, hb_position_t control2_y HB_UNUSED,
- hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
- void *user_data HB_UNUSED) {}
+ if (hb_object_is_immutable (dfuncs))
+ return;
-static void
-_close_path_nil (void *user_data HB_UNUSED) {}
+ hb_object_make_immutable (dfuncs);
+}
/**
- * hb_draw_funcs_create:
+ * hb_draw_funcs_is_immutable:
+ * @dfuncs: draw functions
*
- * Creates a new draw callbacks object.
+ * Checks whether @dfuncs is immutable.
+ *
+ * Return value: %true if @dfuncs is immutable, %false otherwise
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_draw_funcs_t *
-hb_draw_funcs_create ()
+hb_bool_t
+hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs)
{
- hb_draw_funcs_t *funcs;
- if (unlikely (!(funcs = hb_object_create<hb_draw_funcs_t> ())))
- return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
-
- funcs->move_to = (hb_draw_move_to_func_t) _move_to_nil;
- funcs->line_to = (hb_draw_line_to_func_t) _line_to_nil;
- funcs->quadratic_to = (hb_draw_quadratic_to_func_t) _quadratic_to_nil;
- funcs->is_quadratic_to_set = false;
- funcs->cubic_to = (hb_draw_cubic_to_func_t) _cubic_to_nil;
- funcs->close_path = (hb_draw_close_path_func_t) _close_path_nil;
- return funcs;
+ return hb_object_is_immutable (dfuncs);
}
+
/**
- * hb_draw_funcs_reference:
- * @funcs: draw functions
+ * hb_draw_move_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Add to callbacks object refcount.
+ * Perform a "move-to" draw operation.
*
- * Returns: The same object.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_draw_funcs_t *
-hb_draw_funcs_reference (hb_draw_funcs_t *funcs)
+void
+hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y)
{
- return hb_object_reference (funcs);
+ dfuncs->move_to (draw_data, *st,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_destroy:
- * @funcs: draw functions
+ * hb_draw_line_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Decreases refcount of callbacks object and deletes the object if it reaches
- * to zero.
+ * Perform a "line-to" draw operation.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_destroy (hb_draw_funcs_t *funcs)
+hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y)
{
- if (!hb_object_destroy (funcs)) return;
-
- hb_free (funcs);
+ dfuncs->line_to (draw_data, *st,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_make_immutable:
- * @funcs: draw functions
+ * hb_draw_quadratic_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @control_x: X component of control point
+ * @control_y: Y component of control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Makes funcs object immutable.
+ * Perform a "quadratic-to" draw operation.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_make_immutable (hb_draw_funcs_t *funcs)
+hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y)
{
- if (hb_object_is_immutable (funcs))
- return;
-
- hb_object_make_immutable (funcs);
+ dfuncs->quadratic_to (draw_data, *st,
+ control_x, control_y,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_is_immutable:
- * @funcs: draw functions
+ * hb_draw_cubic_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @control1_x: X component of first control point
+ * @control1_y: Y component of first control point
+ * @control2_x: X component of second control point
+ * @control2_y: Y component of second control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Checks whether funcs is immutable.
+ * Perform a "cubic-to" draw operation.
*
- * Returns: If is immutable.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_bool_t
-hb_draw_funcs_is_immutable (hb_draw_funcs_t *funcs)
+void
+hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
{
- return hb_object_is_immutable (funcs);
+ dfuncs->cubic_to (draw_data, *st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y);
}
/**
- * hb_font_draw_glyph:
- * @font: a font object
- * @glyph: a glyph id
- * @funcs: draw callbacks object
- * @user_data: parameter you like be passed to the callbacks when are called
+ * hb_draw_close_path:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
*
- * Draw a glyph.
+ * Perform a "close-path" draw operation.
*
- * Returns: Whether the font had the glyph and the operation completed successfully.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_bool_t
-hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
- const hb_draw_funcs_t *funcs,
- void *user_data)
+void
+hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st)
{
- if (unlikely (funcs == &Null (hb_draw_funcs_t) ||
- glyph >= font->face->get_num_glyphs ()))
- return false;
-
- draw_helper_t draw_helper (funcs, user_data);
- if (font->face->table.glyf->get_path (font, glyph, draw_helper)) return true;
-#ifndef HB_NO_CFF
- if (font->face->table.cff1->get_path (font, glyph, draw_helper)) return true;
- if (font->face->table.cff2->get_path (font, glyph, draw_helper)) return true;
-#endif
-
- return false;
+ dfuncs->close_path (draw_data, *st);
}
-#endif
+
#endif
diff --git a/thirdparty/harfbuzz/src/hb-draw.h b/thirdparty/harfbuzz/src/hb-draw.h
index f82cc34842..c45a53212a 100644
--- a/thirdparty/harfbuzz/src/hb-draw.h
+++ b/thirdparty/harfbuzz/src/hb-draw.h
@@ -33,65 +33,292 @@
HB_BEGIN_DECLS
-#ifdef HB_EXPERIMENTAL_API
-typedef void (*hb_draw_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_draw_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_draw_quadratic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
- hb_position_t to_x, hb_position_t to_y,
- void *user_data);
-typedef void (*hb_draw_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
- hb_position_t control2_x, hb_position_t control2_y,
- hb_position_t to_x, hb_position_t to_y,
- void *user_data);
-typedef void (*hb_draw_close_path_func_t) (void *user_data);
+
+/**
+ * hb_draw_state_t
+ * @path_open: Whether there is an open path
+ * @path_start_x: X component of the start of current path
+ * @path_start_y: Y component of the start of current path
+ * @current_x: X component of current point
+ * @current_y: Y component of current point
+ *
+ * Current drawing state.
+ *
+ * Since: 4.0.0
+ **/
+typedef struct hb_draw_state_t {
+ hb_bool_t path_open;
+
+ float path_start_x;
+ float path_start_y;
+
+ float current_x;
+ float current_y;
+
+ /*< private >*/
+ hb_var_num_t reserved1;
+ hb_var_num_t reserved2;
+ hb_var_num_t reserved3;
+ hb_var_num_t reserved4;
+ hb_var_num_t reserved5;
+ hb_var_num_t reserved6;
+ hb_var_num_t reserved7;
+} hb_draw_state_t;
+
+/**
+ * HB_DRAW_STATE_DEFAULT:
+ *
+ * The default #hb_draw_state_t at the start of glyph drawing.
+ */
+#define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}}
+
/**
* hb_draw_funcs_t:
*
* Glyph draw callbacks.
*
- * _move_to, _line_to and _cubic_to calls are necessary to be defined but we
- * translate _quadratic_to calls to _cubic_to if the callback isn't defined.
+ * #hb_draw_move_to_func_t, #hb_draw_line_to_func_t and
+ * #hb_draw_cubic_to_func_t calls are necessary to be defined but we translate
+ * #hb_draw_quadratic_to_func_t calls to #hb_draw_cubic_to_func_t if the
+ * callback isn't defined.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
+
typedef struct hb_draw_funcs_t hb_draw_funcs_t;
+
+/**
+ * hb_draw_move_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "move-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_line_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "line-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_quadratic_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @control_x: X component of control point
+ * @control_y: Y component of control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "quadratic-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_cubic_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @control1_x: X component of first control point
+ * @control1_y: Y component of first control point
+ * @control2_x: X component of second control point
+ * @control2_y: Y component of second control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "cubic-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_close_path_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "close-path" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ void *user_data);
+
+/**
+ * hb_draw_funcs_set_move_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): move-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets move-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *funcs,
- hb_draw_move_to_func_t move_to);
+hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_move_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_line_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): line-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets line-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *funcs,
- hb_draw_line_to_func_t line_to);
+hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_line_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_quadratic_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): quadratic-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets quadratic-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_quadratic_to_func_t quadratic_to);
+hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_quadratic_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_cubic_to_func:
+ * @dfuncs: draw functions
+ * @func: (closure user_data) (destroy destroy) (scope notified): cubic-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets cubic-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_cubic_to_func_t cubic_to);
+hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_cubic_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_close_path_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): close-path callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets close-path callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *funcs,
- hb_draw_close_path_func_t close_path);
+hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_close_path_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+
HB_EXTERN hb_draw_funcs_t *
hb_draw_funcs_create (void);
HB_EXTERN hb_draw_funcs_t *
-hb_draw_funcs_reference (hb_draw_funcs_t *funcs);
+hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs);
HB_EXTERN void
-hb_draw_funcs_destroy (hb_draw_funcs_t *funcs);
+hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs);
HB_EXTERN void
-hb_draw_funcs_make_immutable (hb_draw_funcs_t *funcs);
+hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs);
HB_EXTERN hb_bool_t
-hb_draw_funcs_is_immutable (hb_draw_funcs_t *funcs);
-#endif
+hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs);
+
+
+HB_EXTERN void
+hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st);
+
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-draw.hh b/thirdparty/harfbuzz/src/hb-draw.hh
index 2aa0a5b4db..28bc9218e1 100644
--- a/thirdparty/harfbuzz/src/hb-draw.hh
+++ b/thirdparty/harfbuzz/src/hb-draw.hh
@@ -27,113 +27,205 @@
#include "hb.hh"
-#ifdef HB_EXPERIMENTAL_API
-struct hb_draw_funcs_t
-{
- hb_object_header_t header;
- hb_draw_move_to_func_t move_to;
- hb_draw_line_to_func_t line_to;
- hb_draw_quadratic_to_func_t quadratic_to;
- bool is_quadratic_to_set;
- hb_draw_cubic_to_func_t cubic_to;
- hb_draw_close_path_func_t close_path;
-};
+/*
+ * hb_draw_funcs_t
+ */
+
+#define HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS \
+ HB_DRAW_FUNC_IMPLEMENT (move_to) \
+ HB_DRAW_FUNC_IMPLEMENT (line_to) \
+ HB_DRAW_FUNC_IMPLEMENT (quadratic_to) \
+ HB_DRAW_FUNC_IMPLEMENT (cubic_to) \
+ HB_DRAW_FUNC_IMPLEMENT (close_path) \
+ /* ^--- Add new callbacks here */
-struct draw_helper_t
+struct hb_draw_funcs_t
{
- draw_helper_t (const hb_draw_funcs_t *funcs_, void *user_data_)
- {
- funcs = funcs_;
- user_data = user_data_;
- path_open = false;
- path_start_x = current_x = path_start_y = current_y = 0;
- }
- ~draw_helper_t () { end_path (); }
+ hb_object_header_t header;
- void move_to (hb_position_t x, hb_position_t y)
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_func_t name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } func;
+
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) void *name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } user_data;
+
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_destroy_func_t name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } destroy;
+
+ void emit_move_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
+ { func.move_to (this, draw_data, &st,
+ to_x, to_y,
+ user_data.move_to); }
+ void emit_line_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
+ { func.line_to (this, draw_data, &st,
+ to_x, to_y,
+ user_data.line_to); }
+ void emit_quadratic_to (void *draw_data, hb_draw_state_t &st,
+ float control_x, float control_y,
+ float to_x, float to_y)
+ { func.quadratic_to (this, draw_data, &st,
+ control_x, control_y,
+ to_x, to_y,
+ user_data.quadratic_to); }
+ void emit_cubic_to (void *draw_data, hb_draw_state_t &st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
+ { func.cubic_to (this, draw_data, &st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y,
+ user_data.cubic_to); }
+ void emit_close_path (void *draw_data, hb_draw_state_t &st)
+ { func.close_path (this, draw_data, &st,
+ user_data.close_path); }
+
+
+ void move_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
{
- if (path_open) end_path ();
- current_x = path_start_x = x;
- current_y = path_start_y = y;
+ if (st.path_open) close_path (draw_data, st);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
- void line_to (hb_position_t x, hb_position_t y)
+ void line_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
{
- if (equal_to_current (x, y)) return;
- if (!path_open) start_path ();
- funcs->line_to (x, y, user_data);
- current_x = x;
- current_y = y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_line_to (draw_data, st, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
void
- quadratic_to (hb_position_t control_x, hb_position_t control_y,
- hb_position_t to_x, hb_position_t to_y)
+ quadratic_to (void *draw_data, hb_draw_state_t &st,
+ float control_x, float control_y,
+ float to_x, float to_y)
{
- if (equal_to_current (control_x, control_y) && equal_to_current (to_x, to_y))
- return;
- if (!path_open) start_path ();
- if (funcs->is_quadratic_to_set)
- funcs->quadratic_to (control_x, control_y, to_x, to_y, user_data);
- else
- funcs->cubic_to (roundf ((current_x + 2.f * control_x) / 3.f),
- roundf ((current_y + 2.f * control_y) / 3.f),
- roundf ((to_x + 2.f * control_x) / 3.f),
- roundf ((to_y + 2.f * control_y) / 3.f),
- to_x, to_y, user_data);
- current_x = to_x;
- current_y = to_y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_quadratic_to (draw_data, st, control_x, control_y, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
void
- cubic_to (hb_position_t control1_x, hb_position_t control1_y,
- hb_position_t control2_x, hb_position_t control2_y,
- hb_position_t to_x, hb_position_t to_y)
+ cubic_to (void *draw_data, hb_draw_state_t &st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
{
- if (equal_to_current (control1_x, control1_y) &&
- equal_to_current (control2_x, control2_y) &&
- equal_to_current (to_x, to_y))
- return;
- if (!path_open) start_path ();
- funcs->cubic_to (control1_x, control1_y, control2_x, control2_y, to_x, to_y, user_data);
- current_x = to_x;
- current_y = to_y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_cubic_to (draw_data, st, control1_x, control1_y, control2_x, control2_y, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
- void end_path ()
+ void
+ close_path (void *draw_data, hb_draw_state_t &st)
{
- if (path_open)
+ if (st.path_open)
{
- if ((path_start_x != current_x) || (path_start_y != current_y))
- funcs->line_to (path_start_x, path_start_y, user_data);
- funcs->close_path (user_data);
+ if ((st.path_start_x != st.current_x) || (st.path_start_y != st.current_y))
+ emit_line_to (draw_data, st, st.path_start_x, st.path_start_y);
+ emit_close_path (draw_data, st);
}
- path_open = false;
- path_start_x = current_x = path_start_y = current_y = 0;
+ st.path_open = false;
+ st.path_start_x = st.current_x = st.path_start_y = st.current_y = 0;
}
protected:
- bool equal_to_current (hb_position_t x, hb_position_t y)
- { return current_x == x && current_y == y; }
- void start_path ()
+ void start_path (void *draw_data, hb_draw_state_t &st)
{
- if (path_open) end_path ();
- path_open = true;
- funcs->move_to (path_start_x, path_start_y, user_data);
+ assert (!st.path_open);
+ emit_move_to (draw_data, st, st.current_x, st.current_y);
+ st.path_open = true;
+ st.path_start_x = st.current_x;
+ st.path_start_y = st.current_y;
}
+};
+DECLARE_NULL_INSTANCE (hb_draw_funcs_t);
- hb_position_t path_start_x;
- hb_position_t path_start_y;
+struct hb_draw_session_t
+{
+ hb_draw_session_t (hb_draw_funcs_t *funcs_, void *draw_data_, float slant_ = 0.f)
+ : slant {slant_}, not_slanted {slant == 0.f},
+ funcs {funcs_}, draw_data {draw_data_}, st HB_DRAW_STATE_DEFAULT
+ {}
- hb_position_t current_x;
- hb_position_t current_y;
+ ~hb_draw_session_t () { close_path (); }
- bool path_open;
- const hb_draw_funcs_t *funcs;
- void *user_data;
+ void move_to (float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->move_to (draw_data, st,
+ to_x, to_y);
+ else
+ funcs->move_to (draw_data, st,
+ to_x + to_y * slant, to_y);
+ }
+ void line_to (float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->line_to (draw_data, st,
+ to_x, to_y);
+ else
+ funcs->line_to (draw_data, st,
+ to_x + to_y * slant, to_y);
+ }
+ void
+ quadratic_to (float control_x, float control_y,
+ float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->quadratic_to (draw_data, st,
+ control_x, control_y,
+ to_x, to_y);
+ else
+ funcs->quadratic_to (draw_data, st,
+ control_x + control_y * slant, control_y,
+ to_x + to_y * slant, to_y);
+ }
+ void
+ cubic_to (float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->cubic_to (draw_data, st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y);
+ else
+ funcs->cubic_to (draw_data, st,
+ control1_x + control1_y * slant, control1_y,
+ control2_x + control2_y * slant, control2_y,
+ to_x + to_y * slant, to_y);
+ }
+ void close_path ()
+ {
+ funcs->close_path (draw_data, st);
+ }
+
+ protected:
+ float slant;
+ bool not_slanted;
+ hb_draw_funcs_t *funcs;
+ void *draw_data;
+ hb_draw_state_t st;
};
-#endif
#endif /* HB_DRAW_HH */
diff --git a/thirdparty/harfbuzz/src/hb-font.cc b/thirdparty/harfbuzz/src/hb-font.cc
index 350fcac139..db05f017a5 100644
--- a/thirdparty/harfbuzz/src/hb-font.cc
+++ b/thirdparty/harfbuzz/src/hb-font.cc
@@ -29,6 +29,7 @@
#include "hb.hh"
#include "hb-font.hh"
+#include "hb-draw.hh"
#include "hb-machinery.hh"
#include "hb-ot.h"
@@ -501,6 +502,136 @@ hb_font_get_glyph_from_name_default (hb_font_t *font,
return font->parent->get_glyph_from_name (name, len, glyph);
}
+static void
+hb_font_get_glyph_shape_nil (hb_font_t *font HB_UNUSED,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs,
+ void *draw_data,
+ void *user_data HB_UNUSED)
+{
+}
+
+
+typedef struct hb_font_get_glyph_shape_default_adaptor_t {
+ hb_draw_funcs_t *draw_funcs;
+ void *draw_data;
+ float x_scale;
+ float y_scale;
+} hb_font_get_glyph_shape_default_adaptor_t;
+
+static void
+hb_draw_move_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ adaptor->draw_funcs->emit_move_to (adaptor->draw_data, *st,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_line_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_line_to (adaptor->draw_data, *st,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_quadratic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_quadratic_to (adaptor->draw_data, *st,
+ x_scale * control_x, y_scale * control_y,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_cubic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_cubic_to (adaptor->draw_data, *st,
+ x_scale * control1_x, y_scale * control1_y,
+ x_scale * control2_x, y_scale * control2_y,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_close_path_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+
+ adaptor->draw_funcs->emit_close_path (adaptor->draw_data, *st);
+}
+
+static const hb_draw_funcs_t _hb_draw_funcs_default = {
+ HB_OBJECT_HEADER_STATIC,
+
+ {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_default,
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ }
+};
+
+static void
+hb_font_get_glyph_shape_default (hb_font_t *font,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs,
+ void *draw_data,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t adaptor = {
+ draw_funcs,
+ draw_data,
+ (float) font->x_scale / (float) font->parent->x_scale,
+ (float) font->y_scale / (float) font->parent->y_scale
+ };
+
+ font->parent->get_glyph_shape (glyph,
+ const_cast<hb_draw_funcs_t *> (&_hb_draw_funcs_default),
+ &adaptor);
+}
+
DEFINE_NULL_INSTANCE (hb_font_funcs_t) =
{
HB_OBJECT_HEADER_STATIC,
@@ -1168,6 +1299,26 @@ hb_font_get_glyph_from_name (hb_font_t *font,
return font->get_glyph_from_name (name, len, glyph);
}
+/**
+ * hb_font_get_glyph_shape:
+ * @font: #hb_font_t to work upon
+ * @glyph: : The glyph ID
+ * @dfuncs: #hb_draw_funcs_t to draw to
+ * @draw_data: User data to pass to draw callbacks
+ *
+ * Fetches the glyph shape that corresponds to a glyph in the specified @font.
+ * The shape is returned by way of calls to the callsbacks of the @dfuncs
+ * objects, with @draw_data passed to them.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_font_get_glyph_shape (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *dfuncs, void *draw_data)
+{
+ font->get_glyph_shape (glyph, dfuncs, draw_data);
+}
/* A bit higher-level, and with fallback */
@@ -1190,7 +1341,7 @@ hb_font_get_extents_for_direction (hb_font_t *font,
hb_direction_t direction,
hb_font_extents_t *extents)
{
- return font->get_extents_for_direction (direction, extents);
+ font->get_extents_for_direction (direction, extents);
}
/**
* hb_font_get_glyph_advance_for_direction:
@@ -1215,7 +1366,7 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
hb_position_t *x,
hb_position_t *y)
{
- return font->get_glyph_advance_for_direction (glyph, direction, x, y);
+ font->get_glyph_advance_for_direction (glyph, direction, x, y);
}
/**
* hb_font_get_glyph_advances_for_direction:
@@ -2044,12 +2195,16 @@ hb_font_get_ptem (hb_font_t *font)
* @slant: synthetic slant value.
*
* Sets the "synthetic slant" of a font. By default is zero.
- * Synthetic slant is the graphical skew that the renderer
- * applies to the font at rendering time.
+ * Synthetic slant is the graphical skew applied to the font
+ * at rendering time.
*
* HarfBuzz needs to know this value to adjust shaping results,
* metrics, and style values to match the slanted rendering.
*
+ * <note>Note: The glyph shape fetched via the
+ * hb_font_get_glyph_shape() is slanted to reflect this value
+ * as well.</note>
+ *
* <note>Note: The slant value is a ratio. For example, a
* 20% slant would be represented as a 0.2 value.</note>
*
diff --git a/thirdparty/harfbuzz/src/hb-font.h b/thirdparty/harfbuzz/src/hb-font.h
index a3bbb2e37b..9548857535 100644
--- a/thirdparty/harfbuzz/src/hb-font.h
+++ b/thirdparty/harfbuzz/src/hb-font.h
@@ -511,6 +511,25 @@ typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *
hb_codepoint_t *glyph,
void *user_data);
+/**
+ * hb_font_get_glyph_shape_func_t:
+ * @font: #hb_font_t to work upon
+ * @font_data: @font user data pointer
+ * @glyph: The glyph ID to query
+ * @draw_funcs: The draw functions to send the shape data to
+ * @draw_data: The data accompanying the draw functions
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_font_get_glyph_shape_func_t) (hb_font_t *font, void *font_data,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data);
+
/* func setters */
@@ -770,6 +789,22 @@ hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
hb_font_get_glyph_from_name_func_t func,
void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_font_funcs_set_glyph_shape_func:
+ * @ffuncs: A font-function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets the implementation function for #hb_font_get_glyph_shape_func_t.
+ *
+ * Since: 4.0.0
+ **/
+HB_EXTERN void
+hb_font_funcs_set_glyph_shape_func (hb_font_funcs_t *ffuncs,
+ hb_font_get_glyph_shape_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+
/* func dispatch */
HB_EXTERN hb_bool_t
@@ -850,6 +885,11 @@ hb_font_get_glyph_from_name (hb_font_t *font,
const char *name, int len, /* -1 means nul-terminated */
hb_codepoint_t *glyph);
+HB_EXTERN void
+hb_font_get_glyph_shape (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *dfuncs, void *draw_data);
+
/* high-level funcs, with fallback */
@@ -1056,11 +1096,6 @@ HB_EXTERN void
hb_font_set_var_named_instance (hb_font_t *font,
unsigned instance_index);
-#ifdef HB_EXPERIMENTAL_API
-HB_EXTERN hb_bool_t
-hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
- const hb_draw_funcs_t *funcs, void *user_data);
-#endif
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-font.hh b/thirdparty/harfbuzz/src/hb-font.hh
index 0d73589e8c..70311b4a85 100644
--- a/thirdparty/harfbuzz/src/hb-font.hh
+++ b/thirdparty/harfbuzz/src/hb-font.hh
@@ -57,6 +57,7 @@
HB_FONT_FUNC_IMPLEMENT (glyph_contour_point) \
HB_FONT_FUNC_IMPLEMENT (glyph_name) \
HB_FONT_FUNC_IMPLEMENT (glyph_from_name) \
+ HB_FONT_FUNC_IMPLEMENT (glyph_shape) \
/* ^--- Add new callbacks here */
struct hb_font_funcs_t
@@ -140,6 +141,8 @@ struct hb_font_t
hb_position_t em_scalef_y (float v) { return em_scalef (v, y_scale); }
float em_fscale_x (int16_t v) { return em_fscale (v, x_scale); }
float em_fscale_y (int16_t v) { return em_fscale (v, y_scale); }
+ float em_fscalef_x (float v) { return em_fscalef (v, x_scale); }
+ float em_fscalef_y (float v) { return em_fscalef (v, y_scale); }
hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
{ return em_mult (v, dir_mult (direction)); }
@@ -373,6 +376,15 @@ struct hb_font_t
klass->user_data.glyph_from_name);
}
+ void get_glyph_shape (hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data)
+ {
+ klass->get.f.glyph_shape (this, user_data,
+ glyph,
+ draw_funcs, draw_data,
+ klass->user_data.glyph_shape);
+ }
+
/* A bit higher-level, and with fallback */
@@ -625,7 +637,9 @@ struct hb_font_t
hb_position_t em_mult (int16_t v, int64_t mult)
{ return (hb_position_t) ((v * mult + 32768) >> 16); }
hb_position_t em_scalef (float v, int scale)
- { return (hb_position_t) roundf (v * scale / face->get_upem ()); }
+ { return (hb_position_t) roundf (em_fscalef (v, scale)); }
+ float em_fscalef (float v, int scale)
+ { return v * scale / face->get_upem (); }
float em_fscale (int16_t v, int scale)
{ return (float) v * scale / face->get_upem (); }
};
diff --git a/thirdparty/harfbuzz/src/hb-ft.cc b/thirdparty/harfbuzz/src/hb-ft.cc
index 67691e3ff3..40311e1b91 100644
--- a/thirdparty/harfbuzz/src/hb-ft.cc
+++ b/thirdparty/harfbuzz/src/hb-ft.cc
@@ -33,12 +33,14 @@
#include "hb-ft.h"
+#include "hb-draw.hh"
#include "hb-font.hh"
#include "hb-machinery.hh"
#include "hb-cache.hh"
#include FT_ADVANCES_H
#include FT_MULTIPLE_MASTERS_H
+#include FT_OUTLINE_H
#include FT_TRUETYPE_TABLES_H
@@ -565,6 +567,82 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
return true;
}
+#ifndef HB_NO_DRAW
+
+static int
+_hb_ft_move_to (const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->move_to (to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_line_to (const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->line_to (to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_conic_to (const FT_Vector *control,
+ const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->quadratic_to (control->x, control->y,
+ to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_cubic_to (const FT_Vector *control1,
+ const FT_Vector *control2,
+ const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->cubic_to (control1->x, control1->y,
+ control2->x, control2->y,
+ to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static void
+hb_ft_get_glyph_shape (hb_font_t *font HB_UNUSED,
+ void *font_data,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data HB_UNUSED)
+{
+ const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+ hb_lock_t lock (ft_font->lock);
+ FT_Face ft_face = ft_font->ft_face;
+
+ if (unlikely (FT_Load_Glyph (ft_face, glyph,
+ FT_LOAD_NO_BITMAP | ft_font->load_flags)))
+ return;
+
+ if (ft_face->glyph->format != FT_GLYPH_FORMAT_OUTLINE)
+ return;
+
+ const FT_Outline_Funcs outline_funcs = {
+ (FT_Outline_MoveToFunc) _hb_ft_move_to,
+ (FT_Outline_LineToFunc) _hb_ft_line_to,
+ (FT_Outline_ConicToFunc) _hb_ft_conic_to,
+ (FT_Outline_CubicToFunc) _hb_ft_cubic_to,
+ 0, /* shift */
+ 0, /* delta */
+ };
+
+ hb_draw_session_t draw_session (draw_funcs, draw_data, font->slant_xy);
+
+ FT_Outline_Decompose (&ft_face->glyph->outline,
+ &outline_funcs,
+ &draw_session);
+}
+#endif
+
+
static inline void free_static_ft_funcs ();
static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t>
@@ -596,6 +674,10 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
hb_font_funcs_set_glyph_name_func (funcs, hb_ft_get_glyph_name, nullptr, nullptr);
hb_font_funcs_set_glyph_from_name_func (funcs, hb_ft_get_glyph_from_name, nullptr, nullptr);
+#ifndef HB_NO_DRAW
+ hb_font_funcs_set_glyph_shape_func (funcs, hb_ft_get_glyph_shape, nullptr, nullptr);
+#endif
+
hb_font_funcs_make_immutable (funcs);
hb_atexit (free_static_ft_funcs);
diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.cc b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
index 540b11f911..ef13f1e966 100644
--- a/thirdparty/harfbuzz/src/hb-gobject-structs.cc
+++ b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
@@ -90,6 +90,7 @@ hb_gobject_##name##_get_type () \
HB_DEFINE_OBJECT_TYPE (buffer)
HB_DEFINE_OBJECT_TYPE (blob)
+HB_DEFINE_OBJECT_TYPE (draw_funcs)
HB_DEFINE_OBJECT_TYPE (face)
HB_DEFINE_OBJECT_TYPE (font)
HB_DEFINE_OBJECT_TYPE (font_funcs)
diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.h b/thirdparty/harfbuzz/src/hb-gobject-structs.h
index 63467f80df..3914a2431a 100644
--- a/thirdparty/harfbuzz/src/hb-gobject-structs.h
+++ b/thirdparty/harfbuzz/src/hb-gobject-structs.h
@@ -49,6 +49,10 @@ hb_gobject_buffer_get_type (void);
#define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
HB_EXTERN GType
+hb_gobject_draw_funcs_get_type (void);
+#define HB_GOBJECT_TYPE_DRAW_FUNCS (hb_gobject_draw_funcs_get_type ())
+
+HB_EXTERN GType
hb_gobject_face_get_type (void);
#define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
diff --git a/thirdparty/harfbuzz/src/hb-machinery.hh b/thirdparty/harfbuzz/src/hb-machinery.hh
index 5046ac1933..e52a6a4124 100644
--- a/thirdparty/harfbuzz/src/hb-machinery.hh
+++ b/thirdparty/harfbuzz/src/hb-machinery.hh
@@ -194,7 +194,8 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
}
const Returned * operator -> () const { return get (); }
- const Returned & operator * () const { return *get (); }
+ template <typename U = Returned, hb_enable_if (!hb_is_same (U, void))>
+ const U & operator * () const { return *get (); }
explicit operator bool () const
{ return get_stored () != Funcs::get_null (); }
template <typename C> operator const C * () const { return get (); }
@@ -272,14 +273,19 @@ struct hb_face_lazy_loader_t : hb_lazy_loader_t<T,
hb_face_lazy_loader_t<T, WheresFace>,
hb_face_t, WheresFace> {};
-template <typename T, unsigned int WheresFace>
+template <typename T, unsigned int WheresFace, bool core=false>
struct hb_table_lazy_loader_t : hb_lazy_loader_t<T,
- hb_table_lazy_loader_t<T, WheresFace>,
+ hb_table_lazy_loader_t<T, WheresFace, core>,
hb_face_t, WheresFace,
hb_blob_t>
{
static hb_blob_t *create (hb_face_t *face)
- { return hb_sanitize_context_t ().reference_table<T> (face); }
+ {
+ auto c = hb_sanitize_context_t ();
+ if (core)
+ c.set_num_glyphs (0); // So we don't recurse ad infinitum...
+ return c.reference_table<T> (face);
+ }
static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
static const hb_blob_t *get_null ()
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc b/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
index 3298fa35ae..df4554ac00 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
@@ -442,13 +442,12 @@ bool OT::cff1::accelerator_t::get_extents (hb_font_t *font, hb_codepoint_t glyph
return true;
}
-#ifdef HB_EXPERIMENTAL_API
struct cff1_path_param_t
{
cff1_path_param_t (const OT::cff1::accelerator_t *cff_, hb_font_t *font_,
- draw_helper_t &draw_helper_, point_t *delta_)
+ hb_draw_session_t &draw_session_, point_t *delta_)
{
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
cff = cff_;
font = font_;
delta = delta_;
@@ -458,14 +457,14 @@ struct cff1_path_param_t
{
point_t point = p;
if (delta) point.move (*delta);
- draw_helper->move_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
+ draw_session->move_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
}
void line_to (const point_t &p)
{
point_t point = p;
if (delta) point.move (*delta);
- draw_helper->line_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
+ draw_session->line_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
}
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
@@ -477,15 +476,15 @@ struct cff1_path_param_t
point2.move (*delta);
point3.move (*delta);
}
- draw_helper->cubic_to (font->em_scalef_x (point1.x.to_real ()), font->em_scalef_y (point1.y.to_real ()),
- font->em_scalef_x (point2.x.to_real ()), font->em_scalef_y (point2.y.to_real ()),
- font->em_scalef_x (point3.x.to_real ()), font->em_scalef_y (point3.y.to_real ()));
+ draw_session->cubic_to (font->em_fscalef_x (point1.x.to_real ()), font->em_fscalef_y (point1.y.to_real ()),
+ font->em_fscalef_x (point2.x.to_real ()), font->em_fscalef_y (point2.y.to_real ()),
+ font->em_fscalef_x (point3.x.to_real ()), font->em_fscalef_y (point3.y.to_real ()));
}
- void end_path () { draw_helper->end_path (); }
+ void end_path () { draw_session->close_path (); }
hb_font_t *font;
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
point_t *delta;
const OT::cff1::accelerator_t *cff;
@@ -513,7 +512,7 @@ struct cff1_path_procs_path_t : path_procs_t<cff1_path_procs_path_t, cff1_cs_int
};
static bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
- draw_helper_t &draw_helper, bool in_seac = false, point_t *delta = nullptr);
+ hb_draw_session_t &draw_session, bool in_seac = false, point_t *delta = nullptr);
struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_param_t, cff1_path_procs_path_t>
{
@@ -530,14 +529,14 @@ struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_pa
hb_codepoint_t accent = param.cff->std_code_to_glyph (env.argStack[n-1].to_int ());
if (unlikely (!(!env.in_seac && base && accent
- && _get_path (param.cff, param.font, base, *param.draw_helper, true)
- && _get_path (param.cff, param.font, accent, *param.draw_helper, true, &delta))))
+ && _get_path (param.cff, param.font, base, *param.draw_session, true)
+ && _get_path (param.cff, param.font, accent, *param.draw_session, true, &delta))))
env.set_error ();
}
};
bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
- draw_helper_t &draw_helper, bool in_seac, point_t *delta)
+ hb_draw_session_t &draw_session, bool in_seac, point_t *delta)
{
if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
@@ -546,7 +545,7 @@ bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoin
const byte_str_t str = (*cff->charStrings)[glyph];
interp.env.init (str, *cff, fd);
interp.env.set_in_seac (in_seac);
- cff1_path_param_t param (cff, font, draw_helper, delta);
+ cff1_path_param_t param (cff, font, draw_session, delta);
if (unlikely (!interp.interpret (param))) return false;
/* Let's end the path specially since it is called inside seac also */
@@ -555,16 +554,15 @@ bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoin
return true;
}
-bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const
+bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */
return true;
#endif
- return _get_path (this, font, glyph, draw_helper);
+ return _get_path (this, font, glyph, draw_session);
}
-#endif
struct get_seac_param_t
{
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
index 6fb59315c9..542e3f4de3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
@@ -1347,9 +1347,7 @@ struct cff1
HB_INTERNAL bool get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const;
HB_INTERNAL bool get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const;
-#ifdef HB_EXPERIMENTAL_API
- HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const;
-#endif
+ HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const;
private:
struct gname_t
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc b/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
index 879b7cdb23..817fe064ce 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
@@ -143,30 +143,29 @@ bool OT::cff2::accelerator_t::get_extents (hb_font_t *font,
return true;
}
-#ifdef HB_EXPERIMENTAL_API
struct cff2_path_param_t
{
- cff2_path_param_t (hb_font_t *font_, draw_helper_t &draw_helper_)
+ cff2_path_param_t (hb_font_t *font_, hb_draw_session_t &draw_session_)
{
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
font = font_;
}
void move_to (const point_t &p)
- { draw_helper->move_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
+ { draw_session->move_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
void line_to (const point_t &p)
- { draw_helper->line_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
+ { draw_session->line_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
{
- draw_helper->cubic_to (font->em_scalef_x (p1.x.to_real ()), font->em_scalef_y (p1.y.to_real ()),
- font->em_scalef_x (p2.x.to_real ()), font->em_scalef_y (p2.y.to_real ()),
- font->em_scalef_x (p3.x.to_real ()), font->em_scalef_y (p3.y.to_real ()));
+ draw_session->cubic_to (font->em_fscalef_x (p1.x.to_real ()), font->em_fscalef_y (p1.y.to_real ()),
+ font->em_fscalef_x (p2.x.to_real ()), font->em_fscalef_y (p2.y.to_real ()),
+ font->em_fscalef_x (p3.x.to_real ()), font->em_fscalef_y (p3.y.to_real ()));
}
protected:
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
hb_font_t *font;
};
@@ -193,7 +192,7 @@ struct cff2_path_procs_path_t : path_procs_t<cff2_path_procs_path_t, cff2_cs_int
struct cff2_cs_opset_path_t : cff2_cs_opset_t<cff2_cs_opset_path_t, cff2_path_param_t, cff2_path_procs_path_t> {};
-bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const
+bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */
@@ -206,10 +205,9 @@ bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, d
cff2_cs_interpreter_t<cff2_cs_opset_path_t, cff2_path_param_t> interp;
const byte_str_t str = (*charStrings)[glyph];
interp.env.init (str, *this, fd, font->coords, font->num_coords);
- cff2_path_param_t param (font, draw_helper);
+ cff2_path_param_t param (font, draw_session);
if (unlikely (!interp.interpret (param))) return false;
return true;
}
-#endif
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
index 6e1b01c8fe..b77e7f53fa 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
@@ -515,9 +515,7 @@ struct cff2
HB_INTERNAL bool get_extents (hb_font_t *font,
hb_codepoint_t glyph,
hb_glyph_extents_t *extents) const;
-#ifdef HB_EXPERIMENTAL_API
- HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const;
-#endif
+ HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const;
};
typedef accelerator_templ_t<cff2_private_dict_opset_subset_t, cff2_private_dict_values_subset_t> accelerator_subset_t;
diff --git a/thirdparty/harfbuzz/src/hb-ot-deprecated.h b/thirdparty/harfbuzz/src/hb-ot-deprecated.h
index ce6b6fef11..5192ff73e3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-deprecated.h
+++ b/thirdparty/harfbuzz/src/hb-ot-deprecated.h
@@ -50,6 +50,21 @@ HB_BEGIN_DECLS
*/
#define HB_MATH_GLYPH_PART_FLAG_EXTENDER HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER
+/* https://github.com/harfbuzz/harfbuzz/pull/3417 */
+/**
+ * HB_OT_MATH_SCRIPT:
+ *
+ * Use #HB_SCRIPT_MATH or #HB_OT_TAG_MATH_SCRIPT instead.
+ *
+ * <note>Previous versions of this documentation recommended passing
+ * #HB_OT_MATH_SCRIPT to hb_buffer_set_script() to enable math shaping, but this
+ * usage is no longer supported. Use #HB_SCRIPT_MATH instead.</note>
+ *
+ * Since: 1.3.3
+ * Deprecated: 3.4.0
+ */
+#define HB_OT_MATH_SCRIPT HB_OT_TAG_MATH_SCRIPT
+
/* Like hb_ot_layout_table_find_script, but takes zero-terminated array of scripts to test */
HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_table_select_script) hb_bool_t
diff --git a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
index eff09838af..c05034b3bb 100644
--- a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
@@ -32,6 +32,11 @@
#define HB_OT_FACE_TABLE_LIST_HH
#endif /* HB_OT_FACE_TABLE_LIST_HH */ /* Dummy header guards */
+#ifndef HB_OT_CORE_TABLE
+#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
+#define _HB_OT_CORE_TABLE_UNDEF
+#endif
+
#ifndef HB_OT_ACCELERATOR
#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
#define _HB_OT_ACCELERATOR_UNDEF
@@ -46,7 +51,8 @@
/* OpenType fundamentals. */
-HB_OT_TABLE (OT, head)
+HB_OT_CORE_TABLE (OT, head)
+HB_OT_CORE_TABLE (OT, maxp)
#if !defined(HB_NO_FACE_COLLECT_UNICODES) || !defined(HB_NO_OT_FONT)
HB_OT_ACCELERATOR (OT, cmap)
#endif
@@ -74,6 +80,7 @@ HB_OT_TABLE (OT, VORG)
#endif
/* TrueType outlines. */
+HB_OT_CORE_TABLE (OT, loca) // Also used to determine number of glyphs
HB_OT_ACCELERATOR (OT, glyf)
/* CFF outlines. */
@@ -138,3 +145,7 @@ HB_OT_TABLE (OT, MATH)
#ifdef _HB_OT_ACCELERATOR_UNDEF
#undef HB_OT_ACCELERATOR
#endif
+
+#ifdef _HB_OT_CORE_TABLE_UNDEF
+#undef HB_OT_CORE_TABLE
+#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-face.hh b/thirdparty/harfbuzz/src/hb-ot-face.hh
index e24d380bca..415dae8e20 100644
--- a/thirdparty/harfbuzz/src/hb-ot-face.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-face.hh
@@ -63,10 +63,13 @@ struct hb_ot_face_t
hb_face_t *face; /* MUST be JUST before the lazy loaders. */
#define HB_OT_TABLE(Namespace, Type) \
hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type)> Type;
+#define HB_OT_CORE_TABLE(Namespace, Type) \
+ hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type), true> Type;
#define HB_OT_ACCELERATOR(Namespace, Type) \
hb_face_lazy_loader_t<Namespace::Type##_accelerator_t, HB_OT_TABLE_ORDER (Namespace, Type)> Type;
#include "hb-ot-face-table-list.hh"
#undef HB_OT_ACCELERATOR
+#undef HB_OT_CORE_TABLE
#undef HB_OT_TABLE
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-font.cc b/thirdparty/harfbuzz/src/hb-ot-font.cc
index 9f0359a773..77d3f639db 100644
--- a/thirdparty/harfbuzz/src/hb-ot-font.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-font.cc
@@ -257,6 +257,23 @@ hb_ot_get_font_v_extents (hb_font_t *font,
}
#endif
+#ifndef HB_NO_DRAW
+static void
+hb_ot_get_glyph_shape (hb_font_t *font,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data)
+{
+ hb_draw_session_t draw_session (draw_funcs, draw_data, font->slant_xy);
+ if (font->face->table.glyf->get_path (font, glyph, draw_session)) return;
+#ifndef HB_NO_CFF
+ if (font->face->table.cff1->get_path (font, glyph, draw_session)) return;
+ if (font->face->table.cff2->get_path (font, glyph, draw_session)) return;
+#endif
+}
+#endif
+
static inline void free_static_ot_funcs ();
static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t>
@@ -279,6 +296,10 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
#endif
+#ifndef HB_NO_DRAW
+ hb_font_funcs_set_glyph_shape_func (funcs, hb_ot_get_glyph_shape, nullptr, nullptr);
+#endif
+
hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
//hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
diff --git a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
index 87a7d800c1..066e152da3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
@@ -936,7 +936,7 @@ struct glyf
return;
short_offset = 0 == head.indexToLocFormat;
- loca_table = hb_sanitize_context_t ().reference_table<loca> (face);
+ loca_table = face->table.loca.get_blob (); // Needs no destruct!
glyf_table = hb_sanitize_context_t ().reference_table<glyf> (face);
#ifndef HB_NO_VAR
gvar = face->table.gvar;
@@ -951,7 +951,6 @@ struct glyf
}
~accelerator_t ()
{
- loca_table.destroy ();
glyf_table.destroy ();
}
@@ -1152,11 +1151,10 @@ struct glyf
return operation_count;
}
-#ifdef HB_EXPERIMENTAL_API
struct path_builder_t
{
hb_font_t *font;
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
struct optional_point_t
{
@@ -1171,10 +1169,10 @@ struct glyf
{ return optional_point_t (x + t * (p.x - x), y + t * (p.y - y)); }
} first_oncurve, first_offcurve, last_offcurve;
- path_builder_t (hb_font_t *font_, draw_helper_t &draw_helper_)
+ path_builder_t (hb_font_t *font_, hb_draw_session_t &draw_session_)
{
font = font_;
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
}
@@ -1184,10 +1182,6 @@ struct glyf
* https://stackoverflow.com/a/20772557 */
void consume_point (const contour_point_t &point)
{
- /* Skip empty contours */
- if (unlikely (point.is_end_point && !first_oncurve.has_data && !first_offcurve.has_data))
- return;
-
bool is_on_curve = point.flag & Glyph::FLAG_ON_CURVE;
optional_point_t p (point.x, point.y);
if (!first_oncurve.has_data)
@@ -1195,7 +1189,7 @@ struct glyf
if (is_on_curve)
{
first_oncurve = p;
- draw_helper->move_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->move_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
}
else
{
@@ -1204,7 +1198,7 @@ struct glyf
optional_point_t mid = first_offcurve.lerp (p, .5f);
first_oncurve = mid;
last_offcurve = p;
- draw_helper->move_to (font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->move_to (font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
}
else
first_offcurve = p;
@@ -1216,22 +1210,22 @@ struct glyf
{
if (is_on_curve)
{
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
last_offcurve = optional_point_t ();
}
else
{
optional_point_t mid = last_offcurve.lerp (p, .5f);
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
last_offcurve = p;
}
}
else
{
if (is_on_curve)
- draw_helper->line_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->line_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
else
last_offcurve = p;
}
@@ -1242,24 +1236,30 @@ struct glyf
if (first_offcurve.has_data && last_offcurve.has_data)
{
optional_point_t mid = last_offcurve.lerp (first_offcurve, .5f);
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
last_offcurve = optional_point_t ();
/* now check the rest */
}
if (first_offcurve.has_data && first_oncurve.has_data)
- draw_helper->quadratic_to (font->em_scalef_x (first_offcurve.x), font->em_scalef_y (first_offcurve.y),
- font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->quadratic_to (font->em_fscalef_x (first_offcurve.x), font->em_fscalef_y (first_offcurve.y),
+ font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
else if (last_offcurve.has_data && first_oncurve.has_data)
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
else if (first_oncurve.has_data)
- draw_helper->line_to (font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->line_to (font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
+ else if (first_offcurve.has_data)
+ {
+ float x = font->em_fscalef_x (first_offcurve.x), y = font->em_fscalef_x (first_offcurve.y);
+ draw_session->move_to (x, y);
+ draw_session->quadratic_to (x, y, x, y);
+ }
/* Getting ready for the next contour */
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
- draw_helper->end_path ();
+ draw_session->close_path ();
}
}
void points_end () {}
@@ -1269,9 +1269,8 @@ struct glyf
};
bool
- get_path (hb_font_t *font, hb_codepoint_t gid, draw_helper_t &draw_helper) const
- { return get_points (font, gid, path_builder_t (font, draw_helper)); }
-#endif
+ get_path (hb_font_t *font, hb_codepoint_t gid, hb_draw_session_t &draw_session) const
+ { return get_points (font, gid, path_builder_t (font, draw_session)); }
#ifndef HB_NO_VAR
const gvar_accelerator_t *gvar;
diff --git a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
index 36bffa70a5..7487e40e6d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
@@ -28,6 +28,7 @@
#define HB_OT_HMTX_TABLE_HH
#include "hb-open-type.hh"
+#include "hb-ot-maxp-table.hh"
#include "hb-ot-hhea-table.hh"
#include "hb-ot-var-hvar-table.hh"
#include "hb-ot-metrics.hh"
@@ -98,12 +99,12 @@ struct hmtxvmtx
hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
Iterator it,
- unsigned num_advances)
+ unsigned num_long_metrics)
{
unsigned idx = 0;
for (auto _ : it)
{
- if (idx < num_advances)
+ if (idx < num_long_metrics)
{
LongMetric lm;
lm.advance = _.first;
@@ -128,7 +129,19 @@ struct hmtxvmtx
if (unlikely (!table_prime)) return_trace (false);
accelerator_t _mtx (c->plan->source);
- unsigned num_advances = _mtx.num_advances_for_subset (c->plan);
+ unsigned num_long_metrics;
+ {
+ /* Determine num_long_metrics to encode. */
+ auto& plan = c->plan;
+ num_long_metrics = plan->num_output_glyphs ();
+ hb_codepoint_t old_gid = 0;
+ unsigned int last_advance = plan->old_gid_for_new_gid (num_long_metrics - 1, &old_gid) ? _mtx.get_advance (old_gid) : 0;
+ while (num_long_metrics > 1 &&
+ last_advance == (plan->old_gid_for_new_gid (num_long_metrics - 2, &old_gid) ? _mtx.get_advance (old_gid) : 0))
+ {
+ num_long_metrics--;
+ }
+ }
auto it =
+ hb_range (c->plan->num_output_glyphs ())
@@ -141,13 +154,13 @@ struct hmtxvmtx
})
;
- table_prime->serialize (c->serializer, it, num_advances);
+ table_prime->serialize (c->serializer, it, num_long_metrics);
if (unlikely (c->serializer->in_error ()))
return_trace (false);
// Amend header num hmetrics
- if (unlikely (!subset_update_header (c->plan, num_advances)))
+ if (unlikely (!subset_update_header (c->plan, num_long_metrics)))
return_trace (false);
return_trace (true);
@@ -160,35 +173,46 @@ struct hmtxvmtx
accelerator_t (hb_face_t *face,
unsigned int default_advance_ = 0)
{
+ table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
+ var_table = hb_sanitize_context_t ().reference_table<HVARVVAR> (face, T::variationsTag);
+
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
- num_advances = T::is_horizontal ?
- face->table.hhea->numberOfLongMetrics :
+ /* Populate count variables and sort them out as we go */
+
+ unsigned int len = table.get_length ();
+ if (len & 1)
+ len--;
+
+ num_long_metrics = T::is_horizontal ?
+ face->table.hhea->numberOfLongMetrics :
#ifndef HB_NO_VERTICAL
- face->table.vhea->numberOfLongMetrics
+ face->table.vhea->numberOfLongMetrics
#else
- 0
+ 0
#endif
- ;
+ ;
+ if (unlikely (num_long_metrics * 4 > len))
+ num_long_metrics = len / 4;
+ len -= num_long_metrics * 4;
- table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
+ num_bearings = face->table.maxp->get_num_glyphs ();
- /* Cap num_metrics() and num_advances() based on table length. */
- unsigned int len = table.get_length ();
- if (unlikely (num_advances * 4 > len))
- num_advances = len / 4;
- num_metrics = num_advances + (len - 4 * num_advances) / 2;
+ if (unlikely (num_bearings < num_long_metrics))
+ num_bearings = num_long_metrics;
+ if (unlikely ((num_bearings - num_long_metrics) * 2 > len))
+ num_bearings = num_long_metrics + len / 2;
+ len -= (num_bearings - num_long_metrics) * 2;
- /* We MUST set num_metrics to zero if num_advances is zero.
+ /* We MUST set num_bearings to zero if num_long_metrics is zero.
* Our get_advance() depends on that. */
- if (unlikely (!num_advances))
- {
- num_metrics = num_advances = 0;
- table.destroy ();
- table = hb_blob_get_empty ();
- }
+ if (unlikely (!num_long_metrics))
+ num_bearings = num_long_metrics = 0;
- var_table = hb_sanitize_context_t ().reference_table<HVARVVAR> (face, T::variationsTag);
+ num_advances = num_bearings + len / 2;
+ num_glyphs = face->get_num_glyphs ();
+ if (num_glyphs < num_advances)
+ num_glyphs = num_advances;
}
~accelerator_t ()
{
@@ -198,14 +222,14 @@ struct hmtxvmtx
int get_side_bearing (hb_codepoint_t glyph) const
{
- if (glyph < num_advances)
+ if (glyph < num_long_metrics)
return table->longMetricZ[glyph].sb;
- if (unlikely (glyph >= num_metrics))
+ if (unlikely (glyph >= num_bearings))
return 0;
- const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_advances];
- return bearings[glyph - num_advances];
+ const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
+ return bearings[glyph - num_long_metrics];
}
int get_side_bearing (hb_font_t *font, hb_codepoint_t glyph) const
@@ -213,7 +237,7 @@ struct hmtxvmtx
int side_bearing = get_side_bearing (glyph);
#ifndef HB_NO_VAR
- if (unlikely (glyph >= num_metrics) || !font->num_coords)
+ if (unlikely (glyph >= num_bearings) || !font->num_coords)
return side_bearing;
if (var_table.get_length ())
@@ -227,18 +251,35 @@ struct hmtxvmtx
unsigned int get_advance (hb_codepoint_t glyph) const
{
- if (unlikely (glyph >= num_metrics))
- {
- /* If num_metrics is zero, it means we don't have the metrics table
- * for this direction: return default advance. Otherwise, it means that the
- * glyph index is out of bound: return zero. */
- if (num_metrics)
- return 0;
- else
- return default_advance;
- }
+ /* OpenType case. */
+ if (glyph < num_bearings)
+ return table->longMetricZ[hb_min (glyph, (uint32_t) num_long_metrics - 1)].advance;
+
+ /* If num_advances is zero, it means we don't have the metrics table
+ * for this direction: return default advance. Otherwise, there's a
+ * well-defined answer. */
+ if (unlikely (!num_advances))
+ return default_advance;
- return table->longMetricZ[hb_min (glyph, (uint32_t) num_advances - 1)].advance;
+#ifdef HB_NO_BORING_EXPANSION
+ return 0;
+#endif
+
+ if (unlikely (glyph >= num_glyphs))
+ return 0;
+
+ /* num_bearings <= glyph < num_glyphs;
+ * num_bearings <= num_advances */
+
+ /* TODO Optimize */
+
+ if (num_bearings == num_advances)
+ return get_advance (num_bearings - 1);
+
+ const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
+ const UFWORD *advances = (const UFWORD *) &bearings[num_bearings - num_long_metrics];
+
+ return advances[hb_min (glyph - num_bearings, num_advances - num_bearings - 1)];
}
unsigned int get_advance (hb_codepoint_t glyph,
@@ -247,7 +288,7 @@ struct hmtxvmtx
unsigned int advance = get_advance (glyph);
#ifndef HB_NO_VAR
- if (unlikely (glyph >= num_metrics) || !font->num_coords)
+ if (unlikely (glyph >= num_bearings) || !font->num_coords)
return advance;
if (var_table.get_length ())
@@ -259,35 +300,13 @@ struct hmtxvmtx
#endif
}
- unsigned int num_advances_for_subset (const hb_subset_plan_t *plan) const
- {
- unsigned int num_advances = plan->num_output_glyphs ();
- unsigned int last_advance = _advance_for_new_gid (plan,
- num_advances - 1);
- while (num_advances > 1 &&
- last_advance == _advance_for_new_gid (plan,
- num_advances - 2))
- {
- num_advances--;
- }
-
- return num_advances;
- }
-
- private:
- unsigned int _advance_for_new_gid (const hb_subset_plan_t *plan,
- hb_codepoint_t new_gid) const
- {
- hb_codepoint_t old_gid;
- if (!plan->old_gid_for_new_gid (new_gid, &old_gid))
- return 0;
-
- return get_advance (old_gid);
- }
-
protected:
- unsigned int num_metrics;
- unsigned int num_advances;
+ // 0 <= num_long_metrics <= num_bearings <= num_advances <= num_glyphs
+ unsigned num_long_metrics;
+ unsigned num_bearings;
+ unsigned num_advances;
+ unsigned num_glyphs;
+
unsigned int default_advance;
private:
@@ -319,6 +338,8 @@ struct hmtxvmtx
* the end. This allows a monospaced
* font to vary the side bearing
* values for each glyph. */
+/*UnsizedArrayOf<UFWORD>advancesX;*/
+ /* TODO Document. */
public:
DEFINE_SIZE_ARRAY (0, longMetricZ);
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.cc b/thirdparty/harfbuzz/src/hb-ot-layout.cc
index a599eea6e9..07bbe3bc84 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.cc
@@ -361,6 +361,13 @@ hb_ot_layout_get_attach_points (hb_face_t *face,
* Fetches a list of the caret positions defined for a ligature glyph in the GDEF
* table of the font. The list returned will begin at the offset provided.
*
+ * Note that a ligature that is formed from n characters will have n-1
+ * caret positions. The first character is not represented in the array,
+ * since its caret position is the glyph position.
+ *
+ * The positions returned by this function are 'unshaped', and will have to
+ * be fixed up for kerning that may be applied to the ligature glyph.
+ *
* Return value: Total number of ligature caret positions for @glyph.
*
**/
@@ -1960,13 +1967,84 @@ hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c,
#ifndef HB_NO_BASE
/**
+ * hb_ot_layout_get_horizontal_baseline_tag_for_script:
+ * @script: a script tag.
+ *
+ * Fetches the dominant horizontal baseline tag used by @script.
+ *
+ * Return value: dominant baseline tag for the @script.
+ *
+ * Since: 4.0.0
+ **/
+hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script)
+{
+ /* Keep in sync with hb_ot_layout_get_baseline_with_fallback */
+ switch ((int) script)
+ {
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_BENGALI:
+ case HB_SCRIPT_DEVANAGARI:
+ case HB_SCRIPT_GUJARATI:
+ case HB_SCRIPT_GURMUKHI:
+ /* Unicode-2.0 additions */
+ case HB_SCRIPT_TIBETAN:
+ /* Unicode-4.0 additions */
+ case HB_SCRIPT_LIMBU:
+ /* Unicode-4.1 additions */
+ case HB_SCRIPT_SYLOTI_NAGRI:
+ /* Unicode-5.0 additions */
+ case HB_SCRIPT_PHAGS_PA:
+ /* Unicode-5.2 additions */
+ case HB_SCRIPT_MEETEI_MAYEK:
+ /* Unicode-6.1 additions */
+ case HB_SCRIPT_SHARADA:
+ case HB_SCRIPT_TAKRI:
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MODI:
+ case HB_SCRIPT_SIDDHAM:
+ case HB_SCRIPT_TIRHUTA:
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_MARCHEN:
+ case HB_SCRIPT_NEWA:
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_SOYOMBO:
+ case HB_SCRIPT_ZANABAZAR_SQUARE:
+ /* Unicode-11.0 additions */
+ case HB_SCRIPT_DOGRA:
+ case HB_SCRIPT_GUNJALA_GONDI:
+ /* Unicode-12.0 additions */
+ case HB_SCRIPT_NANDINAGARI:
+ return HB_OT_LAYOUT_BASELINE_TAG_HANGING;
+
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_HANGUL:
+ case HB_SCRIPT_HAN:
+ case HB_SCRIPT_HIRAGANA:
+ case HB_SCRIPT_KATAKANA:
+ /* Unicode-3.0 additions */
+ case HB_SCRIPT_BOPOMOFO:
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_TANGUT:
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_NUSHU:
+ /* Unicode-13.0 additions */
+ case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
+ return HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT;
+
+ default:
+ return HB_OT_LAYOUT_BASELINE_TAG_ROMAN;
+ }
+}
+
+/**
* hb_ot_layout_get_baseline:
* @font: a font
* @baseline_tag: a baseline tag
* @direction: text direction.
* @script_tag: script tag.
* @language_tag: language tag, currently unused.
- * @coord: (out): baseline value if found.
+ * @coord: (out) (nullable): baseline value if found.
*
* Fetches a baseline value from the face.
*
@@ -1989,6 +2067,227 @@ hb_ot_layout_get_baseline (hb_font_t *font,
return result;
}
+
+/**
+ * hb_ot_layout_get_baseline_with_fallback:
+ * @font: a font
+ * @baseline_tag: a baseline tag
+ * @direction: text direction.
+ * @script_tag: script tag.
+ * @language_tag: language tag, currently unused.
+ * @coord: (out): baseline value if found.
+ *
+ * Fetches a baseline value from the face, and synthesizes
+ * it if the font does not have it.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_ot_layout_get_baseline_with_fallback (hb_font_t *font,
+ hb_ot_layout_baseline_tag_t baseline_tag,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_position_t *coord /* OUT */)
+{
+ if (hb_ot_layout_get_baseline (font,
+ baseline_tag,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ return;
+
+ /* Synthesize missing baselines.
+ * See https://www.w3.org/TR/css-inline-3/#baseline-synthesis-fonts
+ */
+ switch (baseline_tag)
+ {
+ case HB_OT_LAYOUT_BASELINE_TAG_ROMAN:
+ *coord = 0; // FIXME origin ?
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_MATH:
+ {
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+ if (HB_DIRECTION_IS_HORIZONTAL (direction) &&
+ (hb_font_get_nominal_glyph (font, 0x2212u, &glyph) ||
+ hb_font_get_nominal_glyph (font, '-', &glyph)) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ {
+ *coord = extents.y_bearing + extents.height / 2;
+ }
+ else
+ {
+ hb_position_t x_height = 0;
+ hb_ot_metrics_get_position (font, HB_OT_METRICS_TAG_X_HEIGHT, &x_height);
+ *coord = x_height / 2;
+ }
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT:
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT:
+ {
+ hb_position_t embox_top, embox_bottom;
+
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &embox_top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &embox_bottom);
+
+ if (baseline_tag == HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT)
+ *coord = embox_top + (embox_bottom - embox_top) / 10;
+ else
+ *coord = embox_bottom + (embox_top - embox_bottom) / 10;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT:
+ if (hb_ot_layout_get_baseline (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ *coord += HB_DIRECTION_IS_HORIZONTAL (direction) ? font->y_scale : font->x_scale;
+ else
+ {
+ hb_font_extents_t font_extents;
+ hb_font_get_extents_for_direction (font, direction, &font_extents);
+ *coord = font_extents.ascender;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT:
+ if (hb_ot_layout_get_baseline (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ *coord -= HB_DIRECTION_IS_HORIZONTAL (direction) ? font->y_scale : font->x_scale;
+ else
+ {
+ hb_font_extents_t font_extents;
+ hb_font_get_extents_for_direction (font, direction, &font_extents);
+ *coord = font_extents.descender;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_HANGING:
+ if (HB_DIRECTION_IS_HORIZONTAL (direction))
+ {
+ hb_codepoint_t ch;
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+
+ /* Keep in sync with hb_ot_layout_get_horizontal_baseline_for_script */
+ switch ((int) script_tag)
+ {
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_BENGALI: ch = 0x0995u; break;
+ case HB_SCRIPT_DEVANAGARI: ch = 0x0915u; break;
+ case HB_SCRIPT_GUJARATI: ch = 0x0a95u; break;
+ case HB_SCRIPT_GURMUKHI: ch = 0x0a15u; break;
+ /* Unicode-2.0 additions */
+ case HB_SCRIPT_TIBETAN: ch = 0x0f40u; break;
+ /* Unicode-4.0 additions */
+ case HB_SCRIPT_LIMBU: ch = 0x1901u; break;
+ /* Unicode-4.1 additions */
+ case HB_SCRIPT_SYLOTI_NAGRI: ch = 0xa807u; break;
+ /* Unicode-5.0 additions */
+ case HB_SCRIPT_PHAGS_PA: ch = 0xa840u; break;
+ /* Unicode-5.2 additions */
+ case HB_SCRIPT_MEETEI_MAYEK: ch = 0xabc0u; break;
+ /* Unicode-6.1 additions */
+ case HB_SCRIPT_SHARADA: ch = 0x11191u; break;
+ case HB_SCRIPT_TAKRI: ch = 0x1168cu; break;
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MODI: ch = 0x1160eu;break;
+ case HB_SCRIPT_SIDDHAM: ch = 0x11590u; break;
+ case HB_SCRIPT_TIRHUTA: ch = 0x1148fu; break;
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_MARCHEN: ch = 0x11c72u; break;
+ case HB_SCRIPT_NEWA: ch = 0x1140eu; break;
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_SOYOMBO: ch = 0x11a5cu; break;
+ case HB_SCRIPT_ZANABAZAR_SQUARE: ch = 0x11a0bu; break;
+ /* Unicode-11.0 additions */
+ case HB_SCRIPT_DOGRA: ch = 0x1180au; break;
+ case HB_SCRIPT_GUNJALA_GONDI: ch = 0x11d6cu; break;
+ /* Unicode-12.0 additions */
+ case HB_SCRIPT_NANDINAGARI: ch = 0x119b0u; break;
+ default: ch = 0; break;
+ }
+
+ if (ch &&
+ hb_font_get_nominal_glyph (font, ch, &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *coord = extents.y_bearing;
+ else
+ *coord = font->y_scale * 6 / 10; // FIXME makes assumptions about origin
+ }
+ else
+ *coord = font->x_scale * 6 / 10; // FIXME makes assumptions about origin
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL:
+ {
+ hb_position_t top, bottom;
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &bottom);
+ *coord = (top + bottom) / 2;
+
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL:
+ {
+ hb_position_t top, bottom;
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &bottom);
+ *coord = (top + bottom) / 2;
+
+ }
+ break;
+
+ case _HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE:
+ default:
+ *coord = 0;
+ break;
+ }
+}
+
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.h b/thirdparty/harfbuzz/src/hb-ot-layout.h
index d47ba0fc92..4edddd9e0d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.h
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.h
@@ -332,31 +332,6 @@ hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
hb_set_t *glyphs_after, /* OUT. May be NULL */
hb_set_t *glyphs_output /* OUT. May be NULL */);
-#ifdef HB_NOT_IMPLEMENTED
-typedef struct
-{
- const hb_codepoint_t *before,
- unsigned int before_length,
- const hb_codepoint_t *input,
- unsigned int input_length,
- const hb_codepoint_t *after,
- unsigned int after_length,
-} hb_ot_layout_glyph_sequence_t;
-
-typedef hb_bool_t
-(*hb_ot_layout_glyph_sequence_func_t) (hb_font_t *font,
- hb_tag_t table_tag,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- void *user_data);
-
-HB_EXTERN void
-Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t *face,
- hb_tag_t table_tag,
- unsigned int lookup_index,
- hb_ot_layout_glyph_sequence_func_t callback,
- void *user_data);
-#endif
/* Variations support */
@@ -411,19 +386,6 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
hb_set_t *glyphs);
-#ifdef HB_NOT_IMPLEMENTED
-/* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
-Xhb_ot_layout_lookup_substitute (hb_font_t *font,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- unsigned int out_size,
- hb_codepoint_t *glyphs_out, /* OUT */
- unsigned int *clusters_out, /* OUT */
- unsigned int *out_length /* OUT */);
-#endif
-
-
/*
* GPOS
*/
@@ -431,15 +393,6 @@ Xhb_ot_layout_lookup_substitute (hb_font_t *font,
HB_EXTERN hb_bool_t
hb_ot_layout_has_positioning (hb_face_t *face);
-#ifdef HB_NOT_IMPLEMENTED
-/* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
-Xhb_ot_layout_lookup_position (hb_font_t *font,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- hb_glyph_position_t *positions /* IN / OUT */);
-#endif
-
/* Optical 'size' feature info. Returns true if found.
* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
HB_EXTERN hb_bool_t
@@ -487,9 +440,11 @@ hb_ot_layout_feature_get_characters (hb_face_t *face,
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: Ideographic character face top or right edge,
* if the direction is horizontal or vertical, respectively.
+ * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL: The center of the ideographic character face. Since: 4.0.0
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: Ideographic em-box bottom or left edge,
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: Ideographic em-box top or right edge baseline,
+ * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: 4.0.0
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_MATH: The baseline about which mathematical characters are centered.
* In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.
@@ -503,14 +458,19 @@ typedef enum {
HB_OT_LAYOUT_BASELINE_TAG_HANGING = HB_TAG ('h','a','n','g'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT = HB_TAG ('i','c','f','b'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT = HB_TAG ('i','c','f','t'),
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL = HB_TAG ('I','c','f','c'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT = HB_TAG ('i','d','e','o'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT = HB_TAG ('i','d','t','p'),
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL = HB_TAG ('I','d','c','e'),
HB_OT_LAYOUT_BASELINE_TAG_MATH = HB_TAG ('m','a','t','h'),
/*< private >*/
_HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
} hb_ot_layout_baseline_tag_t;
+HB_EXTERN hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script);
+
HB_EXTERN hb_bool_t
hb_ot_layout_get_baseline (hb_font_t *font,
hb_ot_layout_baseline_tag_t baseline_tag,
@@ -519,6 +479,14 @@ hb_ot_layout_get_baseline (hb_font_t *font,
hb_tag_t language_tag,
hb_position_t *coord /* OUT. May be NULL. */);
+HB_EXTERN void
+hb_ot_layout_get_baseline_with_fallback (hb_font_t *font,
+ hb_ot_layout_baseline_tag_t baseline_tag,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_position_t *coord /* OUT */);
+
HB_END_DECLS
#endif /* HB_OT_LAYOUT_H */
diff --git a/thirdparty/harfbuzz/src/hb-ot-math-table.hh b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
index 8d0b4317c3..d834d94371 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
@@ -369,6 +369,37 @@ struct MathKern
return kernValue[i].get_x_value (font, this);
}
+ unsigned int get_entries (unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ {
+ const MathValueRecord* correctionHeight = mathValueRecordsZ.arrayZ;
+ const MathValueRecord* kernValue = mathValueRecordsZ.arrayZ + heightCount;
+ const unsigned int entriesCount = heightCount + 1;
+
+ if (entries_count)
+ {
+ unsigned int start = hb_min (start_offset, entriesCount);
+ unsigned int end = hb_min (start + *entries_count, entriesCount);
+ *entries_count = end - start;
+
+ for (unsigned int i = 0; i < *entries_count; i++) {
+ unsigned int j = start + i;
+
+ hb_position_t max_height;
+ if (j == heightCount) {
+ max_height = INT32_MAX;
+ } else {
+ max_height = correctionHeight[j].get_y_value (font, this);
+ }
+
+ kern_entries[i] = {max_height, kernValue[j].get_x_value (font, this)};
+ }
+ }
+ return entriesCount;
+ }
+
protected:
HBUINT16 heightCount;
UnsizedArrayOf<MathValueRecord>
@@ -423,6 +454,24 @@ struct MathKernInfoRecord
return (base+mathKern[idx]).get_value (correction_height, font);
}
+ unsigned int get_kernings (hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font,
+ const void *base) const
+ {
+ unsigned int idx = kern;
+ if (unlikely (idx >= ARRAY_LENGTH (mathKern)) || !mathKern[idx]) {
+ if (entries_count) *entries_count = 0;
+ return 0;
+ }
+ return (base+mathKern[idx]).get_entries (start_offset,
+ entries_count,
+ kern_entries,
+ font);
+ }
+
protected:
/* Offset to MathKern table for each corner -
* from the beginning of MathKernInfo table. May be NULL. */
@@ -473,6 +522,22 @@ struct MathKernInfo
return mathKernInfoRecords[index].get_kerning (kern, correction_height, font, this);
}
+ unsigned int get_kernings (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ {
+ unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
+ return mathKernInfoRecords[index].get_kernings (kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font,
+ this);
+ }
+
protected:
Offset16To<Coverage>
mathKernCoverage;
@@ -545,6 +610,19 @@ struct MathGlyphInfo
hb_font_t *font) const
{ return (this+mathKernInfo).get_kerning (glyph, kern, correction_height, font); }
+ hb_position_t get_kernings (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ { return (this+mathKernInfo).get_kernings (glyph,
+ kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font); }
+
protected:
/* Offset to MathItalicsCorrectionInfo table -
* from the beginning of MathGlyphInfo table. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-math.cc b/thirdparty/harfbuzz/src/hb-ot-math.cc
index 5781d25f2a..f44ac35849 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-math.cc
@@ -185,6 +185,51 @@ hb_ot_math_get_glyph_kerning (hb_font_t *font,
}
/**
+ * hb_ot_math_get_glyph_kernings:
+ * @font: #hb_font_t to work upon
+ * @glyph: The glyph index from which to retrieve the kernings
+ * @kern: The #hb_ot_math_kern_t from which to retrieve the kernings
+ * @start_offset: offset of the first kern entry to retrieve
+ * @entries_count: (inout) (optional): Input = the maximum number of kern entries to return;
+ * Output = the actual number of kern entries returned
+ * @kern_entries: (out caller-allocates) (array length=entries_count): array of kern entries returned
+ *
+ * Fetches the raw MathKern (cut-in) data for the specified font, glyph index,
+ * and @kern. The corresponding list of kern values and correction heights is
+ * returned as a list of #hb_ot_math_kern_entry_t structs.
+ *
+ * See also #hb_ot_math_get_glyph_kerning, which handles selecting the
+ * appropriate kern value for a given correction height.
+ *
+ * <note>For a glyph with @n defined kern values (where @n > 0), there are only
+ * @n−1 defined correction heights, as each correction height defines a boundary
+ * past which the next kern value should be selected. Therefore, only the
+ * #hb_ot_math_kern_entry_t.kern_value of the uppermost #hb_ot_math_kern_entry_t
+ * actually comes from the font; its corresponding
+ * #hb_ot_math_kern_entry_t.max_correction_height is always set to
+ * <code>INT32_MAX</code>.</note>
+ *
+ * Return value: the total number of kern values available or zero
+ *
+ * Since: 3.4.0
+ **/
+unsigned int
+hb_ot_math_get_glyph_kernings (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries /* OUT */)
+{
+ return font->face->table.MATH->get_glyph_info().get_kernings (glyph,
+ kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font);
+}
+
+/**
* hb_ot_math_get_glyph_variants:
* @font: #hb_font_t to work upon
* @glyph: The index of the glyph to stretch
diff --git a/thirdparty/harfbuzz/src/hb-ot-math.h b/thirdparty/harfbuzz/src/hb-ot-math.h
index d3ffa19d85..1378a0639a 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math.h
+++ b/thirdparty/harfbuzz/src/hb-ot-math.h
@@ -50,14 +50,18 @@ HB_BEGIN_DECLS
#define HB_OT_TAG_MATH HB_TAG('M','A','T','H')
/**
- * HB_OT_MATH_SCRIPT:
+ * HB_OT_TAG_MATH_SCRIPT:
*
- * OpenType script tag for math shaping, for use with
- * Use with hb_buffer_set_script().
+ * OpenType script tag, `math`, for features specific to math shaping.
*
- * Since: 1.3.3
+ * <note>#HB_OT_TAG_MATH_SCRIPT is not a valid #hb_script_t and should only be
+ * used with functions that accept raw OpenType script tags, such as
+ * #hb_ot_layout_collect_features. In other cases, #HB_SCRIPT_MATH should be
+ * used instead.</note>
+ *
+ * Since: 3.4.0
*/
-#define HB_OT_MATH_SCRIPT HB_TAG('m','a','t','h')
+#define HB_OT_TAG_MATH_SCRIPT HB_TAG('m','a','t','h')
/* Types */
@@ -205,6 +209,20 @@ typedef enum {
} hb_ot_math_kern_t;
/**
+ * hb_ot_math_kern_entry_t:
+ * @max_correction_height: The maximum height at which this entry should be used
+ * @kern_value: The kern value of the entry
+ *
+ * Data type to hold math kerning (cut-in) information for a glyph.
+ *
+ * Since: 3.4.0
+ */
+typedef struct {
+ hb_position_t max_correction_height;
+ hb_position_t kern_value;
+} hb_ot_math_kern_entry_t;
+
+/**
* hb_ot_math_glyph_variant_t:
* @glyph: The glyph index of the variant
* @advance: The advance width of the variant
@@ -281,6 +299,14 @@ hb_ot_math_get_glyph_kerning (hb_font_t *font,
hb_position_t correction_height);
HB_EXTERN unsigned int
+hb_ot_math_get_glyph_kernings (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries /* OUT */);
+
+HB_EXTERN unsigned int
hb_ot_math_get_glyph_variants (hb_font_t *font,
hb_codepoint_t glyph,
hb_direction_t direction,
diff --git a/thirdparty/harfbuzz/src/hb-ot-metrics.cc b/thirdparty/harfbuzz/src/hb-ot-metrics.cc
index 103808cf91..43c3cbd41f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-metrics.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-metrics.cc
@@ -238,6 +238,145 @@ hb_ot_metrics_get_position (hb_font_t *font,
}
}
+/**
+ * hb_ot_metrics_get_position_with_fallback:
+ * @font: an #hb_font_t object.
+ * @metrics_tag: tag of metrics value you like to fetch.
+ * @position: (out) (optional): result of metrics value from the font.
+ *
+ * Fetches metrics value corresponding to @metrics_tag from @font,
+ * and synthesizes a value if it the value is missing in the font.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
+ hb_ot_metrics_tag_t metrics_tag,
+ hb_position_t *position /* OUT */)
+{
+ hb_font_extents_t font_extents;
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+
+ if (hb_ot_metrics_get_position (font, metrics_tag, position))
+ {
+ if ((metrics_tag != HB_OT_METRICS_TAG_STRIKEOUT_SIZE &&
+ metrics_tag != HB_OT_METRICS_TAG_UNDERLINE_SIZE) ||
+ *position != 0)
+ return;
+ }
+
+ switch (metrics_tag)
+ {
+ case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
+ case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_ASCENDER:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER:
+ case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.descender;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_DESCENDER:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.line_gap;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.line_gap;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE:
+ *position = 1;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_X_HEIGHT:
+ if (hb_font_get_nominal_glyph (font, 'o', &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *position = extents.height + 2 * extents.y_bearing;
+ else
+ *position = font->y_scale / 2;
+ break;
+
+ case HB_OT_METRICS_TAG_CAP_HEIGHT:
+ if (hb_font_get_nominal_glyph (font, 'O', &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *position = extents.height + 2 * extents.y_bearing;
+ else
+ *position = font->y_scale * 2 / 3;
+ break;
+
+ case HB_OT_METRICS_TAG_STRIKEOUT_SIZE:
+ case HB_OT_METRICS_TAG_UNDERLINE_SIZE:
+ *position = font->y_scale / 18;
+ break;
+
+ case HB_OT_METRICS_TAG_STRIKEOUT_OFFSET:
+ {
+ hb_position_t ascender;
+ hb_ot_metrics_get_position_with_fallback (font,
+ HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER,
+ &ascender);
+ *position = ascender / 2;
+ }
+ break;
+
+ case HB_OT_METRICS_TAG_UNDERLINE_OFFSET:
+ *position = - font->y_scale / 18;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE:
+ *position = font->x_scale * 10 / 12;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE:
+ *position = font->y_scale * 10 / 12;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET:
+ *position = font->y_scale / 5;
+ break;
+
+ case _HB_OT_METRICS_TAG_MAX_VALUE:
+ default:
+ *position = 0;
+ break;
+ }
+}
+
#ifndef HB_NO_VAR
/**
* hb_ot_metrics_get_variation:
diff --git a/thirdparty/harfbuzz/src/hb-ot-metrics.h b/thirdparty/harfbuzz/src/hb-ot-metrics.h
index 5841fc8b0f..30de500088 100644
--- a/thirdparty/harfbuzz/src/hb-ot-metrics.h
+++ b/thirdparty/harfbuzz/src/hb-ot-metrics.h
@@ -110,6 +110,11 @@ hb_ot_metrics_get_position (hb_font_t *font,
hb_ot_metrics_tag_t metrics_tag,
hb_position_t *position /* OUT. May be NULL. */);
+HB_EXTERN void
+hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
+ hb_ot_metrics_tag_t metrics_tag,
+ hb_position_t *position /* OUT */);
+
HB_EXTERN float
hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag);
diff --git a/thirdparty/harfbuzz/src/hb-ot-name.cc b/thirdparty/harfbuzz/src/hb-ot-name.cc
index eff46ef227..c35ac5b3dc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-name.cc
@@ -52,7 +52,7 @@
* array is owned by the @face and should not be modified. It can be
* used as long as @face is alive.
*
- * Returns: (out) (transfer none) (array length=num_entries): Array of available name entries.
+ * Returns: (transfer none) (array length=num_entries): Array of available name entries.
* Since: 2.1.0
**/
const hb_ot_name_entry_t *
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
index 2298aa92f2..224f8b842e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
@@ -635,6 +635,11 @@ modifier_combining_marks[] =
0x06E3u, /* ARABIC SMALL LOW SEEN */
0x06E7u, /* ARABIC SMALL HIGH YEH */
0x06E8u, /* ARABIC SMALL HIGH NOON */
+ 0x08CAu, /* ARABIC SMALL HIGH FARSI YEH */
+ 0x08CBu, /* ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW */
+ 0x08CDu, /* ARABIC SMALL HIGH ZAH */
+ 0x08CEu, /* ARABIC LARGE ROUND DOT ABOVE */
+ 0x08CFu, /* ARABIC LARGE ROUND DOT BELOW */
0x08D3u, /* ARABIC SMALL LOW WAW */
0x08F3u, /* ARABIC SMALL HIGH WAW */
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
index c3920b2cc6..fb9c60cce9 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
@@ -385,7 +385,9 @@ struct machine_index_t :
typename Iter::item_t>
{
machine_index_t (const Iter& it) : it (it) {}
- machine_index_t (const machine_index_t& o) : it (o.it) {}
+ machine_index_t (const machine_index_t& o) : hb_iter_with_fallback_t<machine_index_t<Iter>,
+ typename Iter::item_t> (),
+ it (o.it) {}
static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
index 671f30327f..b2eedb027b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
@@ -497,14 +497,14 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
#endif
#ifndef HB_DISABLE_DEPRECATED
- if (!buffer->message (font, "start fallback kern"))
- return;
-
if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
!font->has_glyph_h_kerning_func () :
!font->has_glyph_v_kerning_func ())
return;
+ if (!buffer->message (font, "start fallback kern"))
+ return;
+
bool reverse = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
if (reverse)
diff --git a/thirdparty/harfbuzz/src/hb-ot-tag.cc b/thirdparty/harfbuzz/src/hb-ot-tag.cc
index 1837063af8..f50be97ad3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-tag.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-tag.cc
@@ -41,6 +41,7 @@ hb_ot_old_tag_from_script (hb_script_t script)
switch ((hb_tag_t) script)
{
case HB_SCRIPT_INVALID: return HB_OT_TAG_DEFAULT_SCRIPT;
+ case HB_SCRIPT_MATH: return HB_OT_TAG_MATH_SCRIPT;
/* KATAKANA and HIRAGANA both map to 'kana' */
case HB_SCRIPT_HIRAGANA: return HB_TAG('k','a','n','a');
@@ -63,6 +64,8 @@ hb_ot_old_tag_to_script (hb_tag_t tag)
{
if (unlikely (tag == HB_OT_TAG_DEFAULT_SCRIPT))
return HB_SCRIPT_INVALID;
+ if (unlikely (tag == HB_OT_TAG_MATH_SCRIPT))
+ return HB_SCRIPT_MATH;
/* This side of the conversion is fully algorithmic. */
diff --git a/thirdparty/harfbuzz/src/hb-shape.cc b/thirdparty/harfbuzz/src/hb-shape.cc
index c1f619c81c..3407e1af42 100644
--- a/thirdparty/harfbuzz/src/hb-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-shape.cc
@@ -126,6 +126,13 @@ hb_shape_full (hb_font_t *font,
unsigned int num_features,
const char * const *shaper_list)
{
+ hb_buffer_t *text_buffer = nullptr;
+ if (buffer->flags & HB_BUFFER_FLAG_VERIFY)
+ {
+ text_buffer = hb_buffer_create ();
+ hb_buffer_append (text_buffer, buffer, 0, -1);
+ }
+
hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached2 (font->face, &buffer->props,
features, num_features,
font->coords, font->num_coords,
@@ -133,6 +140,17 @@ hb_shape_full (hb_font_t *font,
hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
hb_shape_plan_destroy (shape_plan);
+ if (text_buffer)
+ {
+ if (res && !buffer->verify (text_buffer,
+ font,
+ features,
+ num_features,
+ shaper_list))
+ res = false;
+ hb_buffer_destroy (text_buffer);
+ }
+
return res;
}
diff --git a/thirdparty/harfbuzz/src/hb-static.cc b/thirdparty/harfbuzz/src/hb-static.cc
index ec4b241470..bd698814e8 100644
--- a/thirdparty/harfbuzz/src/hb-static.cc
+++ b/thirdparty/harfbuzz/src/hb-static.cc
@@ -33,6 +33,7 @@
#include "hb-aat-layout-feat-table.hh"
#include "hb-ot-layout-common.hh"
#include "hb-ot-cmap-table.hh"
+#include "hb-ot-glyf-table.hh"
#include "hb-ot-head-table.hh"
#include "hb-ot-maxp-table.hh"
@@ -55,17 +56,41 @@ const unsigned char _hb_Null_AAT_Lookup[2] = {0xFF, 0xFF};
/* hb_face_t */
+static inline unsigned
+load_num_glyphs_from_loca (const hb_face_t *face)
+{
+ unsigned ret = 0;
+
+ unsigned indexToLocFormat = face->table.head->indexToLocFormat;
+
+ if (indexToLocFormat <= 1)
+ {
+ bool short_offset = 0 == indexToLocFormat;
+ hb_blob_t *loca_blob = face->table.loca.get_blob ();
+ ret = hb_max (1u, loca_blob->length / (short_offset ? 2 : 4)) - 1;
+ }
+
+ return ret;
+}
+
+static inline unsigned
+load_num_glyphs_from_maxp (const hb_face_t *face)
+{
+ return face->table.maxp->get_num_glyphs ();
+}
+
unsigned int
hb_face_t::load_num_glyphs () const
{
- hb_sanitize_context_t c = hb_sanitize_context_t ();
- c.set_num_glyphs (0); /* So we don't recurse ad infinitum. */
- hb_blob_t *maxp_blob = c.reference_table<OT::maxp> (this);
- const OT::maxp *maxp_table = maxp_blob->as<OT::maxp> ();
+ unsigned ret = 0;
+
+#ifndef HB_NO_BORING_EXPANSION
+ ret = hb_max (ret, load_num_glyphs_from_loca (this));
+#endif
+
+ ret = hb_max (ret, load_num_glyphs_from_maxp (this));
- unsigned int ret = maxp_table->get_num_glyphs ();
num_glyphs.set_relaxed (ret);
- hb_blob_destroy (maxp_blob);
return ret;
}
diff --git a/thirdparty/harfbuzz/src/hb-style.cc b/thirdparty/harfbuzz/src/hb-style.cc
index c0c5c4832c..c7d7d713c2 100644
--- a/thirdparty/harfbuzz/src/hb-style.cc
+++ b/thirdparty/harfbuzz/src/hb-style.cc
@@ -46,13 +46,13 @@
static inline float
_hb_angle_to_ratio (float a)
{
- return tanf (a * float (M_PI / 180.));
+ return tanf (a * float (-M_PI / 180.));
}
static inline float
_hb_ratio_to_angle (float r)
{
- return atanf (r) * float (180. / M_PI);
+ return atanf (r) * float (-180. / M_PI);
}
/**
@@ -72,8 +72,7 @@ float
hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
{
if (unlikely (style_tag == HB_STYLE_TAG_SLANT_RATIO))
- return _hb_angle_to_ratio (hb_style_get_value (font, HB_STYLE_TAG_SLANT_ANGLE))
- + font->slant;
+ return _hb_angle_to_ratio (hb_style_get_value (font, HB_STYLE_TAG_SLANT_ANGLE));
hb_face_t *face = font->face;
diff --git a/thirdparty/harfbuzz/src/hb-style.h b/thirdparty/harfbuzz/src/hb-style.h
index 30a6f2b878..d17d2daa5f 100644
--- a/thirdparty/harfbuzz/src/hb-style.h
+++ b/thirdparty/harfbuzz/src/hb-style.h
@@ -43,8 +43,10 @@ HB_BEGIN_DECLS
* @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values
* must be greater than -90 and less than +90. Values can be interpreted as
* the angle, in counter-clockwise degrees, of oblique slant from whatever the
- * designer considers to be upright for that font design.
+ * designer considers to be upright for that font design. Typical right-leaning
+ * Italic fonts have a negative slant angle (typically around -12)
* @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.
+ * Typical right-leaning Italic fonts have a positive slant ratio (typically around 0.2)
* @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
* Non-zero. Values can be interpreted as a percentage of whatever the font
* designer considers “normal width†for that font design.
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.cc b/thirdparty/harfbuzz/src/hb-subset-plan.cc
index af4fcb8137..4481758415 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.cc
@@ -111,7 +111,7 @@ static void _collect_layout_indices (hb_face_t *face,
retain_all_features = false;
continue;
}
-
+
if (visited_features.has (tag))
continue;
@@ -249,9 +249,9 @@ static void _colr_closure (hb_face_t *face,
hb_set_t glyphset_colrv0;
for (hb_codepoint_t gid : glyphs_colred->iter ())
colr.closure_glyphs (gid, &glyphset_colrv0);
-
+
glyphs_colred->union_ (glyphset_colrv0);
-
+
//closure for COLRv1
colr.closure_forV1 (glyphs_colred, &layer_indices, &palette_indices);
} while (iteration_count++ <= HB_CLOSURE_MAX_STAGES &&
@@ -458,7 +458,7 @@ _nameid_closure (hb_face_t *face,
}
/**
- * hb_subset_plan_create:
+ * hb_subset_plan_create_or_fail:
* @face: font face to create the plan for.
* @input: a #hb_subset_input_t input.
*
@@ -467,17 +467,18 @@ _nameid_closure (hb_face_t *face,
* which tables and glyphs should be retained.
*
* Return value: (transfer full): New subset plan. Destroy with
- * hb_subset_plan_destroy().
+ * hb_subset_plan_destroy(). If there is a failure creating the plan
+ * nullptr will be returned.
*
- * Since: 1.7.5
+ * Since: 4.0.0
**/
hb_subset_plan_t *
-hb_subset_plan_create (hb_face_t *face,
- const hb_subset_input_t *input)
+hb_subset_plan_create_or_fail (hb_face_t *face,
+ const hb_subset_input_t *input)
{
hb_subset_plan_t *plan;
if (unlikely (!(plan = hb_object_create<hb_subset_plan_t> ())))
- return const_cast<hb_subset_plan_t *> (&Null (hb_subset_plan_t));
+ return nullptr;
plan->successful = true;
plan->flags = input->flags;
@@ -514,8 +515,9 @@ hb_subset_plan_create (hb_face_t *face,
plan->layout_variation_indices = hb_set_create ();
plan->layout_variation_idx_map = hb_map_create ();
- if (plan->in_error ()) {
- return plan;
+ if (unlikely (plan->in_error ())) {
+ hb_subset_plan_destroy (plan);
+ return nullptr;
}
_populate_unicodes_to_retain (input->sets.unicodes, input->sets.glyphs, plan);
@@ -532,6 +534,10 @@ hb_subset_plan_create (hb_face_t *face,
plan->reverse_glyph_map,
&plan->_num_output_glyphs);
+ if (unlikely (plan->in_error ())) {
+ hb_subset_plan_destroy (plan);
+ return nullptr;
+ }
return plan;
}
@@ -542,7 +548,7 @@ hb_subset_plan_create (hb_face_t *face,
* Decreases the reference count on @plan, and if it reaches zero, destroys
* @plan, freeing all memory.
*
- * Since: 1.7.5
+ * Since: 4.0.0
**/
void
hb_subset_plan_destroy (hb_subset_plan_t *plan)
@@ -596,3 +602,116 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_free (plan);
}
+
+/**
+ * hb_subset_plan_old_to_new_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between glyphs in the original font to glyphs in the
+ * subset that will be produced by @plan
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->glyph_map;
+}
+
+/**
+ * hb_subset_plan_new_to_old_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between glyphs in the subset that will be produced by
+ * @plan and the glyph in the original font.
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->reverse_glyph_map;
+}
+
+/**
+ * hb_subset_plan_unicode_to_old_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between codepoints in the original font and the
+ * associated glyph id in the original font.
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->codepoint_to_glyph;
+}
+
+/**
+ * hb_subset_plan_reference: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ *
+ * Increases the reference count on @plan.
+ *
+ * Return value: @plan.
+ *
+ * Since: 4.0.0
+ **/
+hb_subset_plan_t *
+hb_subset_plan_reference (hb_subset_plan_t *plan)
+{
+ return hb_object_reference (plan);
+}
+
+/**
+ * hb_subset_plan_set_user_data: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ * @key: The user-data key to set
+ * @data: A pointer to the user data
+ * @destroy: (nullable): A callback to call when @data is not needed anymore
+ * @replace: Whether to replace an existing data with the same key
+ *
+ * Attaches a user-data key/data pair to the given subset plan object.
+ *
+ * Return value: %true if success, %false otherwise
+ *
+ * Since: 4.0.0
+ **/
+hb_bool_t
+hb_subset_plan_set_user_data (hb_subset_plan_t *plan,
+ hb_user_data_key_t *key,
+ void *data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace)
+{
+ return hb_object_set_user_data (plan, key, data, destroy, replace);
+}
+
+/**
+ * hb_subset_plan_get_user_data: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ * @key: The user-data key to query
+ *
+ * Fetches the user data associated with the specified key,
+ * attached to the specified subset plan object.
+ *
+ * Return value: (transfer none): A pointer to the user data
+ *
+ * Since: 4.0.0
+ **/
+void *
+hb_subset_plan_get_user_data (const hb_subset_plan_t *plan,
+ hb_user_data_key_t *key)
+{
+ return hb_object_get_user_data (plan, key);
+}
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.hh b/thirdparty/harfbuzz/src/hb-subset-plan.hh
index b9244e5cb2..ab2c4c302c 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.hh
@@ -198,13 +198,4 @@ struct hb_subset_plan_t
}
};
-typedef struct hb_subset_plan_t hb_subset_plan_t;
-
-HB_INTERNAL hb_subset_plan_t *
-hb_subset_plan_create (hb_face_t *face,
- const hb_subset_input_t *input);
-
-HB_INTERNAL void
-hb_subset_plan_destroy (hb_subset_plan_t *plan);
-
#endif /* HB_SUBSET_PLAN_HH */
diff --git a/thirdparty/harfbuzz/src/hb-subset.cc b/thirdparty/harfbuzz/src/hb-subset.cc
index bb46e5b97f..aa8f2c6fb0 100644
--- a/thirdparty/harfbuzz/src/hb-subset.cc
+++ b/thirdparty/harfbuzz/src/hb-subset.cc
@@ -343,9 +343,33 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
{
if (unlikely (!input || !source)) return hb_face_get_empty ();
- hb_subset_plan_t *plan = hb_subset_plan_create (source, input);
- if (unlikely (plan->in_error ())) {
- hb_subset_plan_destroy (plan);
+ hb_subset_plan_t *plan = hb_subset_plan_create_or_fail (source, input);
+ if (unlikely (!plan)) {
+ return nullptr;
+ }
+
+ hb_face_t * result = hb_subset_plan_execute_or_fail (plan);
+ hb_subset_plan_destroy (plan);
+ return result;
+}
+
+
+/**
+ * hb_subset_plan_execute_or_fail:
+ * @plan: a subsetting plan.
+ *
+ * Executes the provided subsetting @plan.
+ *
+ * Return value:
+ * on success returns a reference to generated font subset. If the subsetting operation fails
+ * returns nullptr.
+ *
+ * Since: 4.0.0
+ **/
+hb_face_t *
+hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan)
+{
+ if (unlikely (!plan || plan->in_error ())) {
return nullptr;
}
@@ -353,7 +377,7 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
bool success = true;
hb_tag_t table_tags[32];
unsigned offset = 0, num_tables = ARRAY_LENGTH (table_tags);
- while ((hb_face_get_table_tags (source, offset, &num_tables, table_tags), num_tables))
+ while ((hb_face_get_table_tags (plan->source, offset, &num_tables, table_tags), num_tables))
{
for (unsigned i = 0; i < num_tables; ++i)
{
@@ -367,8 +391,5 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
}
end:
- hb_face_t *result = success ? hb_face_reference (plan->dest) : nullptr;
-
- hb_subset_plan_destroy (plan);
- return result;
+ return success ? hb_face_reference (plan->dest) : nullptr;
}
diff --git a/thirdparty/harfbuzz/src/hb-subset.h b/thirdparty/harfbuzz/src/hb-subset.h
index 1c65a4da1c..a2799d91e8 100644
--- a/thirdparty/harfbuzz/src/hb-subset.h
+++ b/thirdparty/harfbuzz/src/hb-subset.h
@@ -40,6 +40,15 @@ HB_BEGIN_DECLS
typedef struct hb_subset_input_t hb_subset_input_t;
/**
+ * hb_subset_plan_t:
+ *
+ * Contains information about how the subset operation will be executed.
+ * Such as mappings from the old glyph ids to the new ones in the subset.
+ */
+
+typedef struct hb_subset_plan_t hb_subset_plan_t;
+
+/**
* hb_subset_flags_t:
* @HB_SUBSET_FLAGS_DEFAULT: all flags at their default value of false.
* @HB_SUBSET_FLAGS_NO_HINTING: If set hinting instructions will be dropped in
@@ -124,7 +133,7 @@ hb_subset_input_set_user_data (hb_subset_input_t *input,
HB_EXTERN void *
hb_subset_input_get_user_data (const hb_subset_input_t *input,
- hb_user_data_key_t *key);
+ hb_user_data_key_t *key);
HB_EXTERN hb_set_t *
hb_subset_input_unicode_set (hb_subset_input_t *input);
@@ -145,6 +154,41 @@ hb_subset_input_set_flags (hb_subset_input_t *input,
HB_EXTERN hb_face_t *
hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input);
+HB_EXTERN hb_face_t *
+hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan);
+
+HB_EXTERN hb_subset_plan_t *
+hb_subset_plan_create_or_fail (hb_face_t *face,
+ const hb_subset_input_t *input);
+
+HB_EXTERN void
+hb_subset_plan_destroy (hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan);
+
+
+HB_EXTERN hb_subset_plan_t *
+hb_subset_plan_reference (hb_subset_plan_t *plan);
+
+HB_EXTERN hb_bool_t
+hb_subset_plan_set_user_data (hb_subset_plan_t *plan,
+ hb_user_data_key_t *key,
+ void *data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace);
+
+HB_EXTERN void *
+hb_subset_plan_get_user_data (const hb_subset_plan_t *plan,
+ hb_user_data_key_t *key);
+
+
HB_END_DECLS
#endif /* HB_SUBSET_H */
diff --git a/thirdparty/harfbuzz/src/hb-version.h b/thirdparty/harfbuzz/src/hb-version.h
index 493a09f8cf..dd2c5288cc 100644
--- a/thirdparty/harfbuzz/src/hb-version.h
+++ b/thirdparty/harfbuzz/src/hb-version.h
@@ -41,26 +41,26 @@ HB_BEGIN_DECLS
*
* The major component of the library version available at compile-time.
*/
-#define HB_VERSION_MAJOR 3
+#define HB_VERSION_MAJOR 4
/**
* HB_VERSION_MINOR:
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 3
+#define HB_VERSION_MINOR 0
/**
* HB_VERSION_MICRO:
*
* The micro component of the library version available at compile-time.
*/
-#define HB_VERSION_MICRO 2
+#define HB_VERSION_MICRO 0
/**
* HB_VERSION_STRING:
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "3.3.2"
+#define HB_VERSION_STRING "4.0.0"
/**
* HB_VERSION_ATLEAST:
diff --git a/thirdparty/misc/patches/polypartition-godot-types.patch b/thirdparty/misc/patches/polypartition-godot-types.patch
index 61737f9fd2..5d8aba3437 100644
--- a/thirdparty/misc/patches/polypartition-godot-types.patch
+++ b/thirdparty/misc/patches/polypartition-godot-types.patch
@@ -101,7 +101,7 @@ index 3a8a6efa83..8c5409bf24 100644
pointvisible = true;
- for (iter2 = polys.begin(); iter2 != polys.end(); iter2++) {
- if (iter2->IsHole()) {
-+ for (iter2 = polys.front(); iter2; iter2->next()) {
++ for (iter2 = polys.front(); iter2; iter2 = iter2->next()) {
+ if (iter2->get().IsHole()) {
continue;
}
diff --git a/thirdparty/misc/polypartition.cpp b/thirdparty/misc/polypartition.cpp
index 8c5409bf24..df144c57a6 100644
--- a/thirdparty/misc/polypartition.cpp
+++ b/thirdparty/misc/polypartition.cpp
@@ -262,7 +262,7 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
}
}
pointvisible = true;
- for (iter2 = polys.front(); iter2; iter2->next()) {
+ for (iter2 = polys.front(); iter2; iter2 = iter2->next()) {
if (iter2->get().IsHole()) {
continue;
}
diff --git a/thirdparty/misc/stb_rect_pack.h b/thirdparty/misc/stb_rect_pack.h
index 5c848de0e7..6a633ce666 100644
--- a/thirdparty/misc/stb_rect_pack.h
+++ b/thirdparty/misc/stb_rect_pack.h
@@ -1,9 +1,15 @@
-// stb_rect_pack.h - v1.00 - public domain - rectangle packing
+// stb_rect_pack.h - v1.01 - public domain - rectangle packing
// Sean Barrett 2014
//
// Useful for e.g. packing rectangular textures into an atlas.
// Does not do rotation.
//
+// Before #including,
+//
+// #define STB_RECT_PACK_IMPLEMENTATION
+//
+// in the file that you want to have the implementation.
+//
// Not necessarily the awesomest packing method, but better than
// the totally naive one in stb_truetype (which is primarily what
// this is meant to replace).
@@ -35,6 +41,7 @@
//
// Version history:
//
+// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section
// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
// 0.99 (2019-02-07) warning fixes
// 0.11 (2017-03-03) return packing success/fail result
@@ -75,11 +82,10 @@ typedef struct stbrp_context stbrp_context;
typedef struct stbrp_node stbrp_node;
typedef struct stbrp_rect stbrp_rect;
-#ifdef STBRP_LARGE_RECTS
typedef int stbrp_coord;
-#else
-typedef unsigned short stbrp_coord;
-#endif
+
+#define STBRP__MAXVAL 0x7fffffff
+// Mostly for internal use, but this is the maximum supported coordinate value.
STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
// Assign packed locations to rectangles. The rectangles are of type
@@ -209,8 +215,10 @@ struct stbrp_context
#ifdef _MSC_VER
#define STBRP__NOTUSED(v) (void)(v)
+#define STBRP__CDECL __cdecl
#else
#define STBRP__NOTUSED(v) (void)sizeof(v)
+#define STBRP__CDECL
#endif
enum
@@ -253,9 +261,6 @@ STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_ou
STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
{
int i;
-#ifndef STBRP_LARGE_RECTS
- STBRP_ASSERT(width <= 0xffff && height <= 0xffff);
-#endif
for (i=0; i < num_nodes-1; ++i)
nodes[i].next = &nodes[i+1];
@@ -274,11 +279,7 @@ STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height,
context->extra[0].y = 0;
context->extra[0].next = &context->extra[1];
context->extra[1].x = (stbrp_coord) width;
-#ifdef STBRP_LARGE_RECTS
context->extra[1].y = (1<<30);
-#else
- context->extra[1].y = 65535;
-#endif
context->extra[1].next = NULL;
}
@@ -520,7 +521,7 @@ static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, i
return res;
}
-static int rect_height_compare(const void *a, const void *b)
+static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
@@ -531,19 +532,13 @@ static int rect_height_compare(const void *a, const void *b)
return (p->w > q->w) ? -1 : (p->w < q->w);
}
-static int rect_original_order(const void *a, const void *b)
+static int STBRP__CDECL rect_original_order(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
}
-#ifdef STBRP_LARGE_RECTS
-#define STBRP__MAXVAL 0xffffffff
-#else
-#define STBRP__MAXVAL 0xffff
-#endif
-
STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
{
int i, all_rects_packed = 1;
diff --git a/thirdparty/openxr/COPYING.adoc b/thirdparty/openxr/COPYING.adoc
new file mode 100644
index 0000000000..3a31362acb
--- /dev/null
+++ b/thirdparty/openxr/COPYING.adoc
@@ -0,0 +1,123 @@
+= COPYING.adoc for the Khronos Group OpenXR projects
+
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+This document is shared across a number of OpenXR GitHub projects, as the
+set of files in those projects is partially overlapping.
+(There is a single "source of truth" internal Khronos GitLab repo these
+GitHub repositories interact with.)
+
+== Licenses
+
+The OpenXR GitHub projects use several licenses.
+In general, we work to maintain compliance with the
+https://reuse.software/spec/[REUSE 3.0 specification] with clear copyright
+holders and license identifier listed for each file, preferably in each
+file.
+Where this is not possible, or e.g. when we are using files unmodified from
+other open-source projects, license data is listed:
+
+* in an adjacent file of the same name, with the additional extension
+ "`.license`"
+* in the repository-wide "`.reuse/dep5`" copyright description
+ https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/["DEP5"
+ machine-readable copyright data] file.
+
+The https://github.com/fsfe/reuse-tool["`reuse`" command line tool] can be
+used to create a software bill of materials in SPDX format from this data.
+Note that this tool will typically exclude the generated files, so if the
+BOM is important to you, you may consider using the
+https://github.com/KhronosGroup/OpenXR-SDK[OpenXR-SDK] repository that
+contains the API headers and the loader source with all generated files
+pre-generated.
+
+The data in/adjacent to each file is the authoritative license and copyright
+data.
+However, for ease of understanding, the following general practices can be
+observed.
+(If in doubt, or if the following summary conflicts with the per-file data,
+the per-file data remains authoritative.)
+
+* The source files (in asciidoctor and other formats) for the OpenXR
+ Specification, reference pages, and supporting documentation are licensed
+ under the Creative Commons Attribution 4.0 International License (SPDX
+ license identifier "`CC-BY-4.0`").
+* Header files, scripts, programs, XML files, and other tooling used or
+ generated as part of the build process is licensed under the Apache
+ License, Version 2.0.
+* For compatibility with external developers working in GPLed projects who
+ have requested it, the main OpenXR headers, XML registry, and loader
+ source are licensed under a dual license with the SPDX license identifier
+ "`Apache-2.0 OR MIT`" .
+ Relevant files include:
+** "`specification/registry/xr.xml`"
+** "`include/openxr/openxr_platform_defines.h`"
+** The generated OpenXR headers "`openxr.h`", "`openxr_platform.h`", and
+ "`openxr_reflection.h`".
+** Source files in "`src/loader/`", and a few files in "`src/common/`".
+** Generated source files used by the loader (including pre-generated in
+ OpenXR-SDK): "`common_config.h`", "`xr_generated_loader.cpp`", and
+ "`xr_generated_loader.hpp`".
+* There are a few files adopted from other open source projects.
+ Such files continue under their original licenses, and appropriately
+ annotated in accordance with REUSE.
+* Some generated, transient files produced during the course of building the
+ specification, headers, or other targets may not have copyrights.
+ These are typically very short asciidoc fragments describing parts of the
+ OpenXR API, and are incorporated by reference into specification or
+ reference page builds.
+
+Users outside Khronos who create and post OpenXR Specifications, whether
+modified or not, should use the CC-BY-4.0 license on the output documents
+(HTML, PDF, etc.) they generate.
+
+
+== Frequently Asked Questions
+
+Q: Why are the HTML and PDF Specifications posted on Khronos' website under
+a license which is neither CC-BY-4.0 nor Apache 2.0?
+
+A: The Specifications posted by Khronos in the OpenXR Registry are licensed
+under the proprietary Khronos Specification License.
+Only these Specifications are Ratified by the Khronos Board of Promoters,
+and therefore they are the only Specifications covered by the Khronos
+Intellectual Property Rights Policy.
+
+
+Q: Does Khronos allow the creation and distribution of modified versions of
+the OpenXR Specification, such as translations to other languages?
+
+A: Yes.
+Such modified Specifications, since they are not created by Khronos, should
+be placed under the CC-BY-4.0 license.
+If you believe your modifications are of general interest, consider
+contributing them back by making a pull request (PR) on the OpenXR-Docs
+project.
+
+
+Q: Can I contribute changes to the OpenXR Specification?
+
+A: Yes, by opening an Issue or Pull Request (PR) on the
+link:https://github.com/KhronosGroup/OpenXR-Docs/[OpenXR-Docs] GitHub
+project.
+You must execute a click-through Contributor License Agreement, which brings
+your changes under the umbrella of the Khronos IP policy.
+
+
+Q: Can you change the license on your files so they're compatible with my
+license?
+
+A: We are using a dual license license on `xr.xml`, the main API headers,
+and the loader source files, to make them compatible with GPL-2.0- and
+LGPL-2.0/2.1-licensed projects.
+This replaces earlier approaches of an MIT-like license on the XML and
+Apache 2.0 on all headers, and allows use of the SPDX license identifier
+"`Apache-2.0 OR MIT`" to denote the license.
+
+If you *require* this same compatibility for use of other Apache-2.0
+licensed files in our repository, please raise an issue identifying the
+files and we will consider changing those specific files to the dual license
+as well.
+
diff --git a/thirdparty/openxr/LICENSE b/thirdparty/openxr/LICENSE
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/thirdparty/openxr/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/thirdparty/openxr/include/openxr/openxr.h b/thirdparty/openxr/include/openxr/openxr.h
new file mode 100644
index 0000000000..8798e5a6e0
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr.h
@@ -0,0 +1,3925 @@
+#ifndef OPENXR_H_
+#define OPENXR_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define XR_VERSION_1_0 1
+#include "openxr_platform_defines.h"
+#define XR_MAKE_VERSION(major, minor, patch) \
+ ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL))
+
+// OpenXR current version number.
+#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 22)
+
+#define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL)
+#define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL)
+#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL)
+
+#if !defined(XR_NULL_HANDLE)
+#if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED
+ #define XR_NULL_HANDLE nullptr
+#else
+ #define XR_NULL_HANDLE 0
+#endif
+#endif
+
+
+
+#define XR_NULL_SYSTEM_ID 0
+
+
+#define XR_NULL_PATH 0
+
+
+#define XR_SUCCEEDED(result) ((result) >= 0)
+
+
+#define XR_FAILED(result) ((result) < 0)
+
+
+#define XR_UNQUALIFIED_SUCCESS(result) ((result) == 0)
+
+
+#define XR_NO_DURATION 0
+
+
+#define XR_INFINITE_DURATION 0x7fffffffffffffffLL
+
+
+#define XR_MIN_HAPTIC_DURATION -1
+
+
+#define XR_FREQUENCY_UNSPECIFIED 0
+
+
+#define XR_MAX_EVENT_DATA_SIZE sizeof(XrEventDataBuffer)
+
+
+#if !defined(XR_MAY_ALIAS)
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4))
+#define XR_MAY_ALIAS __attribute__((__may_alias__))
+#else
+#define XR_MAY_ALIAS
+#endif
+#endif
+
+
+#if !defined(XR_DEFINE_HANDLE)
+#if (XR_PTR_SIZE == 8)
+ #define XR_DEFINE_HANDLE(object) typedef struct object##_T* object;
+#else
+ #define XR_DEFINE_HANDLE(object) typedef uint64_t object;
+#endif
+#endif
+
+
+
+#if !defined(XR_DEFINE_ATOM)
+ #define XR_DEFINE_ATOM(object) typedef uint64_t object;
+#endif
+
+
+typedef uint64_t XrVersion;
+typedef uint64_t XrFlags64;
+XR_DEFINE_ATOM(XrSystemId)
+typedef uint32_t XrBool32;
+XR_DEFINE_ATOM(XrPath)
+typedef int64_t XrTime;
+typedef int64_t XrDuration;
+XR_DEFINE_HANDLE(XrInstance)
+XR_DEFINE_HANDLE(XrSession)
+XR_DEFINE_HANDLE(XrSpace)
+XR_DEFINE_HANDLE(XrAction)
+XR_DEFINE_HANDLE(XrSwapchain)
+XR_DEFINE_HANDLE(XrActionSet)
+#define XR_TRUE 1
+#define XR_FALSE 0
+#define XR_MAX_EXTENSION_NAME_SIZE 128
+#define XR_MAX_API_LAYER_NAME_SIZE 256
+#define XR_MAX_API_LAYER_DESCRIPTION_SIZE 256
+#define XR_MAX_SYSTEM_NAME_SIZE 256
+#define XR_MAX_APPLICATION_NAME_SIZE 128
+#define XR_MAX_ENGINE_NAME_SIZE 128
+#define XR_MAX_RUNTIME_NAME_SIZE 128
+#define XR_MAX_PATH_LENGTH 256
+#define XR_MAX_STRUCTURE_NAME_SIZE 64
+#define XR_MAX_RESULT_STRING_SIZE 64
+#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16
+#define XR_MAX_ACTION_SET_NAME_SIZE 64
+#define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128
+#define XR_MAX_ACTION_NAME_SIZE 64
+#define XR_MAX_LOCALIZED_ACTION_NAME_SIZE 128
+
+typedef enum XrResult {
+ XR_SUCCESS = 0,
+ XR_TIMEOUT_EXPIRED = 1,
+ XR_SESSION_LOSS_PENDING = 3,
+ XR_EVENT_UNAVAILABLE = 4,
+ XR_SPACE_BOUNDS_UNAVAILABLE = 7,
+ XR_SESSION_NOT_FOCUSED = 8,
+ XR_FRAME_DISCARDED = 9,
+ XR_ERROR_VALIDATION_FAILURE = -1,
+ XR_ERROR_RUNTIME_FAILURE = -2,
+ XR_ERROR_OUT_OF_MEMORY = -3,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
+ XR_ERROR_INITIALIZATION_FAILED = -6,
+ XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
+ XR_ERROR_EXTENSION_NOT_PRESENT = -9,
+ XR_ERROR_LIMIT_REACHED = -10,
+ XR_ERROR_SIZE_INSUFFICIENT = -11,
+ XR_ERROR_HANDLE_INVALID = -12,
+ XR_ERROR_INSTANCE_LOST = -13,
+ XR_ERROR_SESSION_RUNNING = -14,
+ XR_ERROR_SESSION_NOT_RUNNING = -16,
+ XR_ERROR_SESSION_LOST = -17,
+ XR_ERROR_SYSTEM_INVALID = -18,
+ XR_ERROR_PATH_INVALID = -19,
+ XR_ERROR_PATH_COUNT_EXCEEDED = -20,
+ XR_ERROR_PATH_FORMAT_INVALID = -21,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
+ XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
+ XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
+ XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
+ XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
+ XR_ERROR_FILE_ACCESS_ERROR = -32,
+ XR_ERROR_FILE_CONTENTS_INVALID = -33,
+ XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34,
+ XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35,
+ XR_ERROR_API_LAYER_NOT_PRESENT = -36,
+ XR_ERROR_CALL_ORDER_INVALID = -37,
+ XR_ERROR_GRAPHICS_DEVICE_INVALID = -38,
+ XR_ERROR_POSE_INVALID = -39,
+ XR_ERROR_INDEX_OUT_OF_RANGE = -40,
+ XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
+ XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
+ XR_ERROR_NAME_DUPLICATED = -44,
+ XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
+ XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50,
+ XR_ERROR_RUNTIME_UNAVAILABLE = -51,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
+ XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001,
+ XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000,
+ XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000,
+ XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000,
+ XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000,
+ XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001,
+ XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002,
+ XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003,
+ XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004,
+ XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
+ XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
+ XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000,
+ XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001,
+ XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002,
+ XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB = -1000118003,
+ XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB = -1000118004,
+ XR_ERROR_UNKNOWN_PASSTHROUGH_FB = -1000118050,
+ XR_ERROR_RENDER_MODEL_KEY_INVALID_FB = -1000119000,
+ XR_RENDER_MODEL_UNAVAILABLE_FB = 1000119020,
+ XR_ERROR_MARKER_NOT_TRACKED_VARJO = -1000124000,
+ XR_ERROR_MARKER_ID_INVALID_VARJO = -1000124001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002,
+ XR_RESULT_MAX_ENUM = 0x7FFFFFFF
+} XrResult;
+
+typedef enum XrStructureType {
+ XR_TYPE_UNKNOWN = 0,
+ XR_TYPE_API_LAYER_PROPERTIES = 1,
+ XR_TYPE_EXTENSION_PROPERTIES = 2,
+ XR_TYPE_INSTANCE_CREATE_INFO = 3,
+ XR_TYPE_SYSTEM_GET_INFO = 4,
+ XR_TYPE_SYSTEM_PROPERTIES = 5,
+ XR_TYPE_VIEW_LOCATE_INFO = 6,
+ XR_TYPE_VIEW = 7,
+ XR_TYPE_SESSION_CREATE_INFO = 8,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO = 9,
+ XR_TYPE_SESSION_BEGIN_INFO = 10,
+ XR_TYPE_VIEW_STATE = 11,
+ XR_TYPE_FRAME_END_INFO = 12,
+ XR_TYPE_HAPTIC_VIBRATION = 13,
+ XR_TYPE_EVENT_DATA_BUFFER = 16,
+ XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17,
+ XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18,
+ XR_TYPE_ACTION_STATE_BOOLEAN = 23,
+ XR_TYPE_ACTION_STATE_FLOAT = 24,
+ XR_TYPE_ACTION_STATE_VECTOR2F = 25,
+ XR_TYPE_ACTION_STATE_POSE = 27,
+ XR_TYPE_ACTION_SET_CREATE_INFO = 28,
+ XR_TYPE_ACTION_CREATE_INFO = 29,
+ XR_TYPE_INSTANCE_PROPERTIES = 32,
+ XR_TYPE_FRAME_WAIT_INFO = 33,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35,
+ XR_TYPE_COMPOSITION_LAYER_QUAD = 36,
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37,
+ XR_TYPE_ACTION_SPACE_CREATE_INFO = 38,
+ XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW = 41,
+ XR_TYPE_SPACE_LOCATION = 42,
+ XR_TYPE_SPACE_VELOCITY = 43,
+ XR_TYPE_FRAME_STATE = 44,
+ XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45,
+ XR_TYPE_FRAME_BEGIN_INFO = 46,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48,
+ XR_TYPE_EVENT_DATA_EVENTS_LOST = 49,
+ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51,
+ XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52,
+ XR_TYPE_INTERACTION_PROFILE_STATE = 53,
+ XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55,
+ XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56,
+ XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57,
+ XR_TYPE_ACTION_STATE_GET_INFO = 58,
+ XR_TYPE_HAPTIC_ACTION_INFO = 59,
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60,
+ XR_TYPE_ACTIONS_SYNC_INFO = 61,
+ XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62,
+ XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63,
+ XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000,
+ XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000,
+ XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR = 1000014000,
+ XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT = 1000015000,
+ XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000,
+ XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000019000,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000019001,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000019002,
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT = 1000019003,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR = 1000023000,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR = 1000023001,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR = 1000023002,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR = 1000023003,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR = 1000023004,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR = 1000023005,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR = 1000024001,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR = 1000024002,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR = 1000024003,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002,
+ XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002,
+ XR_TYPE_GRAPHICS_BINDING_D3D12_KHR = 1000028000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR = 1000028001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR = 1000028002,
+ XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT = 1000030000,
+ XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT = 1000030001,
+ XR_TYPE_VISIBILITY_MASK_KHR = 1000031000,
+ XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR = 1000031001,
+ XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX = 1000033000,
+ XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX = 1000033003,
+ XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000,
+ XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000,
+ XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001,
+ XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB = 1000040000,
+ XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB = 1000041001,
+ XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000,
+ XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004,
+ XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000,
+ XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000,
+ XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001,
+ XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002,
+ XR_TYPE_HAND_JOINT_LOCATIONS_EXT = 1000051003,
+ XR_TYPE_HAND_JOINT_VELOCITIES_EXT = 1000051004,
+ XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT = 1000052000,
+ XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT = 1000052001,
+ XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT = 1000052002,
+ XR_TYPE_HAND_MESH_MSFT = 1000052003,
+ XR_TYPE_HAND_POSE_TYPE_INFO_MSFT = 1000052004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT = 1000053000,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT = 1000053001,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT = 1000053002,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT = 1000053003,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT = 1000053004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT = 1000053005,
+ XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT = 1000055000,
+ XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT = 1000055001,
+ XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT = 1000055002,
+ XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT = 1000055003,
+ XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000,
+ XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000,
+ XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT = 1000066000,
+ XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001,
+ XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000,
+ XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000,
+ XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000,
+ XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000,
+ XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000,
+ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000,
+ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001,
+ XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000,
+ XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000,
+ XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001,
+ XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002,
+ XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003,
+ XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004,
+ XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005,
+ XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006,
+ XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007,
+ XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008,
+ XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009,
+ XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010,
+ XR_TYPE_SCENE_PLANES_MSFT = 1000097011,
+ XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012,
+ XR_TYPE_SCENE_MESHES_MSFT = 1000097013,
+ XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014,
+ XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015,
+ XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016,
+ XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017,
+ XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018,
+ XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000,
+ XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001,
+ XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000,
+ XR_TYPE_VIVE_TRACKER_PATHS_HTCX = 1000103000,
+ XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX = 1000103001,
+ XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000,
+ XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001,
+ XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002,
+ XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000,
+ XR_TYPE_HAND_TRACKING_MESH_FB = 1000110001,
+ XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003,
+ XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001,
+ XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000,
+ XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001,
+ XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002,
+ XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB = 1000115000,
+ XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB = 1000116009,
+ XR_TYPE_KEYBOARD_TRACKING_QUERY_FB = 1000116004,
+ XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB = 1000116002,
+ XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB = 1000117001,
+ XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB = 1000118000,
+ XR_TYPE_PASSTHROUGH_CREATE_INFO_FB = 1000118001,
+ XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB = 1000118002,
+ XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB = 1000118003,
+ XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB = 1000118004,
+ XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB = 1000118005,
+ XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020,
+ XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021,
+ XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022,
+ XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030,
+ XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000,
+ XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001,
+ XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002,
+ XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003,
+ XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004,
+ XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
+ XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
+ XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
+ XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000,
+ XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO = 1000124000,
+ XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO = 1000124001,
+ XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002,
+ XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000,
+ XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001,
+ XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000,
+ XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB = 1000163000,
+ XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000,
+ XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001,
+ XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000,
+ XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
+ XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrStructureType;
+
+typedef enum XrFormFactor {
+ XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY = 1,
+ XR_FORM_FACTOR_HANDHELD_DISPLAY = 2,
+ XR_FORM_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} XrFormFactor;
+
+typedef enum XrViewConfigurationType {
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO = 1,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO = 2,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO = 1000037000,
+ XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT = 1000054000,
+ XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrViewConfigurationType;
+
+typedef enum XrEnvironmentBlendMode {
+ XR_ENVIRONMENT_BLEND_MODE_OPAQUE = 1,
+ XR_ENVIRONMENT_BLEND_MODE_ADDITIVE = 2,
+ XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND = 3,
+ XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM = 0x7FFFFFFF
+} XrEnvironmentBlendMode;
+
+typedef enum XrReferenceSpaceType {
+ XR_REFERENCE_SPACE_TYPE_VIEW = 1,
+ XR_REFERENCE_SPACE_TYPE_LOCAL = 2,
+ XR_REFERENCE_SPACE_TYPE_STAGE = 3,
+ XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000,
+ XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000,
+ XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrReferenceSpaceType;
+
+typedef enum XrActionType {
+ XR_ACTION_TYPE_BOOLEAN_INPUT = 1,
+ XR_ACTION_TYPE_FLOAT_INPUT = 2,
+ XR_ACTION_TYPE_VECTOR2F_INPUT = 3,
+ XR_ACTION_TYPE_POSE_INPUT = 4,
+ XR_ACTION_TYPE_VIBRATION_OUTPUT = 100,
+ XR_ACTION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrActionType;
+
+typedef enum XrEyeVisibility {
+ XR_EYE_VISIBILITY_BOTH = 0,
+ XR_EYE_VISIBILITY_LEFT = 1,
+ XR_EYE_VISIBILITY_RIGHT = 2,
+ XR_EYE_VISIBILITY_MAX_ENUM = 0x7FFFFFFF
+} XrEyeVisibility;
+
+typedef enum XrSessionState {
+ XR_SESSION_STATE_UNKNOWN = 0,
+ XR_SESSION_STATE_IDLE = 1,
+ XR_SESSION_STATE_READY = 2,
+ XR_SESSION_STATE_SYNCHRONIZED = 3,
+ XR_SESSION_STATE_VISIBLE = 4,
+ XR_SESSION_STATE_FOCUSED = 5,
+ XR_SESSION_STATE_STOPPING = 6,
+ XR_SESSION_STATE_LOSS_PENDING = 7,
+ XR_SESSION_STATE_EXITING = 8,
+ XR_SESSION_STATE_MAX_ENUM = 0x7FFFFFFF
+} XrSessionState;
+
+typedef enum XrObjectType {
+ XR_OBJECT_TYPE_UNKNOWN = 0,
+ XR_OBJECT_TYPE_INSTANCE = 1,
+ XR_OBJECT_TYPE_SESSION = 2,
+ XR_OBJECT_TYPE_SWAPCHAIN = 3,
+ XR_OBJECT_TYPE_SPACE = 4,
+ XR_OBJECT_TYPE_ACTION_SET = 5,
+ XR_OBJECT_TYPE_ACTION = 6,
+ XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000,
+ XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000,
+ XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000,
+ XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000,
+ XR_OBJECT_TYPE_SCENE_MSFT = 1000097001,
+ XR_OBJECT_TYPE_FACIAL_TRACKER_HTC = 1000104000,
+ XR_OBJECT_TYPE_FOVEATION_PROFILE_FB = 1000114000,
+ XR_OBJECT_TYPE_TRIANGLE_MESH_FB = 1000117000,
+ XR_OBJECT_TYPE_PASSTHROUGH_FB = 1000118000,
+ XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB = 1000118002,
+ XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB = 1000118004,
+ XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT = 1000142000,
+ XR_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrObjectType;
+typedef XrFlags64 XrInstanceCreateFlags;
+
+// Flag bits for XrInstanceCreateFlags
+
+typedef XrFlags64 XrSessionCreateFlags;
+
+// Flag bits for XrSessionCreateFlags
+
+typedef XrFlags64 XrSpaceVelocityFlags;
+
+// Flag bits for XrSpaceVelocityFlags
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_LINEAR_VALID_BIT = 0x00000001;
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_ANGULAR_VALID_BIT = 0x00000002;
+
+typedef XrFlags64 XrSpaceLocationFlags;
+
+// Flag bits for XrSpaceLocationFlags
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008;
+
+typedef XrFlags64 XrSwapchainCreateFlags;
+
+// Flag bits for XrSwapchainCreateFlags
+static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT = 0x00000001;
+static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT = 0x00000002;
+
+typedef XrFlags64 XrSwapchainUsageFlags;
+
+// Flag bits for XrSwapchainUsageFlags
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT = 0x00000001;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000002;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT = 0x00000004;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT = 0x00000008;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT = 0x00000010;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_SAMPLED_BIT = 0x00000020;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT = 0x00000040;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND = 0x00000080;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR = 0x00000080; // alias of XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND
+
+typedef XrFlags64 XrCompositionLayerFlags;
+
+// Flag bits for XrCompositionLayerFlags
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT = 0x00000001;
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT = 0x00000002;
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT = 0x00000004;
+
+typedef XrFlags64 XrViewStateFlags;
+
+// Flag bits for XrViewStateFlags
+static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_VALID_BIT = 0x00000001;
+static const XrViewStateFlags XR_VIEW_STATE_POSITION_VALID_BIT = 0x00000002;
+static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_TRACKED_BIT = 0x00000004;
+static const XrViewStateFlags XR_VIEW_STATE_POSITION_TRACKED_BIT = 0x00000008;
+
+typedef XrFlags64 XrInputSourceLocalizedNameFlags;
+
+// Flag bits for XrInputSourceLocalizedNameFlags
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT = 0x00000001;
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT = 0x00000002;
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT = 0x00000004;
+
+typedef void (XRAPI_PTR *PFN_xrVoidFunction)(void);
+typedef struct XrApiLayerProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char layerName[XR_MAX_API_LAYER_NAME_SIZE];
+ XrVersion specVersion;
+ uint32_t layerVersion;
+ char description[XR_MAX_API_LAYER_DESCRIPTION_SIZE];
+} XrApiLayerProperties;
+
+typedef struct XrExtensionProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char extensionName[XR_MAX_EXTENSION_NAME_SIZE];
+ uint32_t extensionVersion;
+} XrExtensionProperties;
+
+typedef struct XrApplicationInfo {
+ char applicationName[XR_MAX_APPLICATION_NAME_SIZE];
+ uint32_t applicationVersion;
+ char engineName[XR_MAX_ENGINE_NAME_SIZE];
+ uint32_t engineVersion;
+ XrVersion apiVersion;
+} XrApplicationInfo;
+
+typedef struct XrInstanceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrInstanceCreateFlags createFlags;
+ XrApplicationInfo applicationInfo;
+ uint32_t enabledApiLayerCount;
+ const char* const* enabledApiLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* enabledExtensionNames;
+} XrInstanceCreateInfo;
+
+typedef struct XrInstanceProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion runtimeVersion;
+ char runtimeName[XR_MAX_RUNTIME_NAME_SIZE];
+} XrInstanceProperties;
+
+typedef struct XrEventDataBuffer {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint8_t varying[4000];
+} XrEventDataBuffer;
+
+typedef struct XrSystemGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFormFactor formFactor;
+} XrSystemGetInfo;
+
+typedef struct XrSystemGraphicsProperties {
+ uint32_t maxSwapchainImageHeight;
+ uint32_t maxSwapchainImageWidth;
+ uint32_t maxLayerCount;
+} XrSystemGraphicsProperties;
+
+typedef struct XrSystemTrackingProperties {
+ XrBool32 orientationTracking;
+ XrBool32 positionTracking;
+} XrSystemTrackingProperties;
+
+typedef struct XrSystemProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ uint32_t vendorId;
+ char systemName[XR_MAX_SYSTEM_NAME_SIZE];
+ XrSystemGraphicsProperties graphicsProperties;
+ XrSystemTrackingProperties trackingProperties;
+} XrSystemProperties;
+
+typedef struct XrSessionCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSessionCreateFlags createFlags;
+ XrSystemId systemId;
+} XrSessionCreateInfo;
+
+typedef struct XrVector3f {
+ float x;
+ float y;
+ float z;
+} XrVector3f;
+
+// XrSpaceVelocity extends XrSpaceLocation
+typedef struct XrSpaceVelocity {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSpaceVelocityFlags velocityFlags;
+ XrVector3f linearVelocity;
+ XrVector3f angularVelocity;
+} XrSpaceVelocity;
+
+typedef struct XrQuaternionf {
+ float x;
+ float y;
+ float z;
+ float w;
+} XrQuaternionf;
+
+typedef struct XrPosef {
+ XrQuaternionf orientation;
+ XrVector3f position;
+} XrPosef;
+
+typedef struct XrReferenceSpaceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrReferenceSpaceType referenceSpaceType;
+ XrPosef poseInReferenceSpace;
+} XrReferenceSpaceCreateInfo;
+
+typedef struct XrExtent2Df {
+ float width;
+ float height;
+} XrExtent2Df;
+
+typedef struct XrActionSpaceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+ XrPosef poseInActionSpace;
+} XrActionSpaceCreateInfo;
+
+typedef struct XrSpaceLocation {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSpaceLocationFlags locationFlags;
+ XrPosef pose;
+} XrSpaceLocation;
+
+typedef struct XrViewConfigurationProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrBool32 fovMutable;
+} XrViewConfigurationProperties;
+
+typedef struct XrViewConfigurationView {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t recommendedImageRectWidth;
+ uint32_t maxImageRectWidth;
+ uint32_t recommendedImageRectHeight;
+ uint32_t maxImageRectHeight;
+ uint32_t recommendedSwapchainSampleCount;
+ uint32_t maxSwapchainSampleCount;
+} XrViewConfigurationView;
+
+typedef struct XrSwapchainCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSwapchainCreateFlags createFlags;
+ XrSwapchainUsageFlags usageFlags;
+ int64_t format;
+ uint32_t sampleCount;
+ uint32_t width;
+ uint32_t height;
+ uint32_t faceCount;
+ uint32_t arraySize;
+ uint32_t mipCount;
+} XrSwapchainCreateInfo;
+
+typedef struct XR_MAY_ALIAS XrSwapchainImageBaseHeader {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSwapchainImageBaseHeader;
+
+typedef struct XrSwapchainImageAcquireInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSwapchainImageAcquireInfo;
+
+typedef struct XrSwapchainImageWaitInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDuration timeout;
+} XrSwapchainImageWaitInfo;
+
+typedef struct XrSwapchainImageReleaseInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSwapchainImageReleaseInfo;
+
+typedef struct XrSessionBeginInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType primaryViewConfigurationType;
+} XrSessionBeginInfo;
+
+typedef struct XrFrameWaitInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrFrameWaitInfo;
+
+typedef struct XrFrameState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrTime predictedDisplayTime;
+ XrDuration predictedDisplayPeriod;
+ XrBool32 shouldRender;
+} XrFrameState;
+
+typedef struct XrFrameBeginInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrFrameBeginInfo;
+
+typedef struct XR_MAY_ALIAS XrCompositionLayerBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+} XrCompositionLayerBaseHeader;
+
+typedef struct XrFrameEndInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime displayTime;
+ XrEnvironmentBlendMode environmentBlendMode;
+ uint32_t layerCount;
+ const XrCompositionLayerBaseHeader* const* layers;
+} XrFrameEndInfo;
+
+typedef struct XrViewLocateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrTime displayTime;
+ XrSpace space;
+} XrViewLocateInfo;
+
+typedef struct XrViewState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewStateFlags viewStateFlags;
+} XrViewState;
+
+typedef struct XrFovf {
+ float angleLeft;
+ float angleRight;
+ float angleUp;
+ float angleDown;
+} XrFovf;
+
+typedef struct XrView {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPosef pose;
+ XrFovf fov;
+} XrView;
+
+typedef struct XrActionSetCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ char actionSetName[XR_MAX_ACTION_SET_NAME_SIZE];
+ char localizedActionSetName[XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE];
+ uint32_t priority;
+} XrActionSetCreateInfo;
+
+typedef struct XrActionCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ char actionName[XR_MAX_ACTION_NAME_SIZE];
+ XrActionType actionType;
+ uint32_t countSubactionPaths;
+ const XrPath* subactionPaths;
+ char localizedActionName[XR_MAX_LOCALIZED_ACTION_NAME_SIZE];
+} XrActionCreateInfo;
+
+typedef struct XrActionSuggestedBinding {
+ XrAction action;
+ XrPath binding;
+} XrActionSuggestedBinding;
+
+typedef struct XrInteractionProfileSuggestedBinding {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPath interactionProfile;
+ uint32_t countSuggestedBindings;
+ const XrActionSuggestedBinding* suggestedBindings;
+} XrInteractionProfileSuggestedBinding;
+
+typedef struct XrSessionActionSetsAttachInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t countActionSets;
+ const XrActionSet* actionSets;
+} XrSessionActionSetsAttachInfo;
+
+typedef struct XrInteractionProfileState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath interactionProfile;
+} XrInteractionProfileState;
+
+typedef struct XrActionStateGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+} XrActionStateGetInfo;
+
+typedef struct XrActionStateBoolean {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateBoolean;
+
+typedef struct XrActionStateFloat {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateFloat;
+
+typedef struct XrVector2f {
+ float x;
+ float y;
+} XrVector2f;
+
+typedef struct XrActionStateVector2f {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVector2f currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateVector2f;
+
+typedef struct XrActionStatePose {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+} XrActionStatePose;
+
+typedef struct XrActiveActionSet {
+ XrActionSet actionSet;
+ XrPath subactionPath;
+} XrActiveActionSet;
+
+typedef struct XrActionsSyncInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t countActiveActionSets;
+ const XrActiveActionSet* activeActionSets;
+} XrActionsSyncInfo;
+
+typedef struct XrBoundSourcesForActionEnumerateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+} XrBoundSourcesForActionEnumerateInfo;
+
+typedef struct XrInputSourceLocalizedNameGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPath sourcePath;
+ XrInputSourceLocalizedNameFlags whichComponents;
+} XrInputSourceLocalizedNameGetInfo;
+
+typedef struct XrHapticActionInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+} XrHapticActionInfo;
+
+typedef struct XR_MAY_ALIAS XrHapticBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrHapticBaseHeader;
+
+typedef struct XR_MAY_ALIAS XrBaseInStructure {
+ XrStructureType type;
+ const struct XrBaseInStructure* next;
+} XrBaseInStructure;
+
+typedef struct XR_MAY_ALIAS XrBaseOutStructure {
+ XrStructureType type;
+ struct XrBaseOutStructure* next;
+} XrBaseOutStructure;
+
+typedef struct XrOffset2Di {
+ int32_t x;
+ int32_t y;
+} XrOffset2Di;
+
+typedef struct XrExtent2Di {
+ int32_t width;
+ int32_t height;
+} XrExtent2Di;
+
+typedef struct XrRect2Di {
+ XrOffset2Di offset;
+ XrExtent2Di extent;
+} XrRect2Di;
+
+typedef struct XrSwapchainSubImage {
+ XrSwapchain swapchain;
+ XrRect2Di imageRect;
+ uint32_t imageArrayIndex;
+} XrSwapchainSubImage;
+
+typedef struct XrCompositionLayerProjectionView {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPosef pose;
+ XrFovf fov;
+ XrSwapchainSubImage subImage;
+} XrCompositionLayerProjectionView;
+
+typedef struct XrCompositionLayerProjection {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ uint32_t viewCount;
+ const XrCompositionLayerProjectionView* views;
+} XrCompositionLayerProjection;
+
+typedef struct XrCompositionLayerQuad {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ XrExtent2Df size;
+} XrCompositionLayerQuad;
+
+typedef struct XR_MAY_ALIAS XrEventDataBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrEventDataBaseHeader;
+
+typedef struct XrEventDataEventsLost {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t lostEventCount;
+} XrEventDataEventsLost;
+
+typedef struct XrEventDataInstanceLossPending {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime lossTime;
+} XrEventDataInstanceLossPending;
+
+typedef struct XrEventDataSessionStateChanged {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrSessionState state;
+ XrTime time;
+} XrEventDataSessionStateChanged;
+
+typedef struct XrEventDataReferenceSpaceChangePending {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrReferenceSpaceType referenceSpaceType;
+ XrTime changeTime;
+ XrBool32 poseValid;
+ XrPosef poseInPreviousSpace;
+} XrEventDataReferenceSpaceChangePending;
+
+typedef struct XrEventDataInteractionProfileChanged {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+} XrEventDataInteractionProfileChanged;
+
+typedef struct XrHapticVibration {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDuration duration;
+ float frequency;
+ float amplitude;
+} XrHapticVibration;
+
+typedef struct XrOffset2Df {
+ float x;
+ float y;
+} XrOffset2Df;
+
+typedef struct XrRect2Df {
+ XrOffset2Df offset;
+ XrExtent2Df extent;
+} XrRect2Df;
+
+typedef struct XrVector4f {
+ float x;
+ float y;
+ float z;
+ float w;
+} XrVector4f;
+
+typedef struct XrColor4f {
+ float r;
+ float g;
+ float b;
+ float a;
+} XrColor4f;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProcAddr)(XrInstance instance, const char* name, PFN_xrVoidFunction* function);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateApiLayerProperties)(uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrApiLayerProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateInstanceExtensionProperties)(const char* layerName, uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrExtensionProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateInstance)(const XrInstanceCreateInfo* createInfo, XrInstance* instance);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyInstance)(XrInstance instance);
+typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProperties)(XrInstance instance, XrInstanceProperties* instanceProperties);
+typedef XrResult (XRAPI_PTR *PFN_xrPollEvent)(XrInstance instance, XrEventDataBuffer* eventData);
+typedef XrResult (XRAPI_PTR *PFN_xrResultToString)(XrInstance instance, XrResult value, char buffer[XR_MAX_RESULT_STRING_SIZE]);
+typedef XrResult (XRAPI_PTR *PFN_xrStructureTypeToString)(XrInstance instance, XrStructureType value, char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSystem)(XrInstance instance, const XrSystemGetInfo* getInfo, XrSystemId* systemId);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSystemProperties)(XrInstance instance, XrSystemId systemId, XrSystemProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateEnvironmentBlendModes)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t environmentBlendModeCapacityInput, uint32_t* environmentBlendModeCountOutput, XrEnvironmentBlendMode* environmentBlendModes);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSession)(XrInstance instance, const XrSessionCreateInfo* createInfo, XrSession* session);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReferenceSpaces)(XrSession session, uint32_t spaceCapacityInput, uint32_t* spaceCountOutput, XrReferenceSpaceType* spaces);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateReferenceSpace)(XrSession session, const XrReferenceSpaceCreateInfo* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrGetReferenceSpaceBoundsRect)(XrSession session, XrReferenceSpaceType referenceSpaceType, XrExtent2Df* bounds);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSpace)(XrSession session, const XrActionSpaceCreateInfo* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateSpace)(XrSpace space, XrSpace baseSpace, XrTime time, XrSpaceLocation* location);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpace)(XrSpace space);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurations)(XrInstance instance, XrSystemId systemId, uint32_t viewConfigurationTypeCapacityInput, uint32_t* viewConfigurationTypeCountOutput, XrViewConfigurationType* viewConfigurationTypes);
+typedef XrResult (XRAPI_PTR *PFN_xrGetViewConfigurationProperties)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, XrViewConfigurationProperties* configurationProperties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurationViews)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrViewConfigurationView* views);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainFormats)(XrSession session, uint32_t formatCapacityInput, uint32_t* formatCountOutput, int64_t* formats);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchain)(XrSession session, const XrSwapchainCreateInfo* createInfo, XrSwapchain* swapchain);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySwapchain)(XrSwapchain swapchain);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainImages)(XrSwapchain swapchain, uint32_t imageCapacityInput, uint32_t* imageCountOutput, XrSwapchainImageBaseHeader* images);
+typedef XrResult (XRAPI_PTR *PFN_xrAcquireSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageAcquireInfo* acquireInfo, uint32_t* index);
+typedef XrResult (XRAPI_PTR *PFN_xrWaitSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageWaitInfo* waitInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrReleaseSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo* releaseInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrBeginSession)(XrSession session, const XrSessionBeginInfo* beginInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEndSession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrRequestExitSession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrWaitFrame)(XrSession session, const XrFrameWaitInfo* frameWaitInfo, XrFrameState* frameState);
+typedef XrResult (XRAPI_PTR *PFN_xrBeginFrame)(XrSession session, const XrFrameBeginInfo* frameBeginInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEndFrame)(XrSession session, const XrFrameEndInfo* frameEndInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateViews)(XrSession session, const XrViewLocateInfo* viewLocateInfo, XrViewState* viewState, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrView* views);
+typedef XrResult (XRAPI_PTR *PFN_xrStringToPath)(XrInstance instance, const char* pathString, XrPath* path);
+typedef XrResult (XRAPI_PTR *PFN_xrPathToString)(XrInstance instance, XrPath path, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSet)(XrInstance instance, const XrActionSetCreateInfo* createInfo, XrActionSet* actionSet);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyActionSet)(XrActionSet actionSet);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateAction)(XrActionSet actionSet, const XrActionCreateInfo* createInfo, XrAction* action);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyAction)(XrAction action);
+typedef XrResult (XRAPI_PTR *PFN_xrSuggestInteractionProfileBindings)(XrInstance instance, const XrInteractionProfileSuggestedBinding* suggestedBindings);
+typedef XrResult (XRAPI_PTR *PFN_xrAttachSessionActionSets)(XrSession session, const XrSessionActionSetsAttachInfo* attachInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetCurrentInteractionProfile)(XrSession session, XrPath topLevelUserPath, XrInteractionProfileState* interactionProfile);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateBoolean)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateBoolean* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateFloat)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateFloat* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateVector2f)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateVector2f* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStatePose)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStatePose* state);
+typedef XrResult (XRAPI_PTR *PFN_xrSyncActions)(XrSession session, const XrActionsSyncInfo* syncInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateBoundSourcesForAction)(XrSession session, const XrBoundSourcesForActionEnumerateInfo* enumerateInfo, uint32_t sourceCapacityInput, uint32_t* sourceCountOutput, XrPath* sources);
+typedef XrResult (XRAPI_PTR *PFN_xrGetInputSourceLocalizedName)(XrSession session, const XrInputSourceLocalizedNameGetInfo* getInfo, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrApplyHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo, const XrHapticBaseHeader* hapticFeedback);
+typedef XrResult (XRAPI_PTR *PFN_xrStopHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo);
+
+#ifndef XR_NO_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProcAddr(
+ XrInstance instance,
+ const char* name,
+ PFN_xrVoidFunction* function);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateApiLayerProperties(
+ uint32_t propertyCapacityInput,
+ uint32_t* propertyCountOutput,
+ XrApiLayerProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateInstanceExtensionProperties(
+ const char* layerName,
+ uint32_t propertyCapacityInput,
+ uint32_t* propertyCountOutput,
+ XrExtensionProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateInstance(
+ const XrInstanceCreateInfo* createInfo,
+ XrInstance* instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyInstance(
+ XrInstance instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo);
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_cube 1
+#define XR_KHR_composition_layer_cube_SPEC_VERSION 8
+#define XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME "XR_KHR_composition_layer_cube"
+typedef struct XrCompositionLayerCubeKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchain swapchain;
+ uint32_t imageArrayIndex;
+ XrQuaternionf orientation;
+} XrCompositionLayerCubeKHR;
+
+
+
+#define XR_KHR_composition_layer_depth 1
+#define XR_KHR_composition_layer_depth_SPEC_VERSION 5
+#define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth"
+// XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView
+typedef struct XrCompositionLayerDepthInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSwapchainSubImage subImage;
+ float minDepth;
+ float maxDepth;
+ float nearZ;
+ float farZ;
+} XrCompositionLayerDepthInfoKHR;
+
+
+
+#define XR_KHR_composition_layer_cylinder 1
+#define XR_KHR_composition_layer_cylinder_SPEC_VERSION 4
+#define XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME "XR_KHR_composition_layer_cylinder"
+typedef struct XrCompositionLayerCylinderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ float centralAngle;
+ float aspectRatio;
+} XrCompositionLayerCylinderKHR;
+
+
+
+#define XR_KHR_composition_layer_equirect 1
+#define XR_KHR_composition_layer_equirect_SPEC_VERSION 3
+#define XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME "XR_KHR_composition_layer_equirect"
+typedef struct XrCompositionLayerEquirectKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ XrVector2f scale;
+ XrVector2f bias;
+} XrCompositionLayerEquirectKHR;
+
+
+
+#define XR_KHR_visibility_mask 1
+#define XR_KHR_visibility_mask_SPEC_VERSION 2
+#define XR_KHR_VISIBILITY_MASK_EXTENSION_NAME "XR_KHR_visibility_mask"
+
+typedef enum XrVisibilityMaskTypeKHR {
+ XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR = 1,
+ XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR = 2,
+ XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR = 3,
+ XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} XrVisibilityMaskTypeKHR;
+typedef struct XrVisibilityMaskKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector2f* vertices;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrVisibilityMaskKHR;
+
+typedef struct XrEventDataVisibilityMaskChangedKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrViewConfigurationType viewConfigurationType;
+ uint32_t viewIndex;
+} XrEventDataVisibilityMaskChangedKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetVisibilityMaskKHR)(XrSession session, XrViewConfigurationType viewConfigurationType, uint32_t viewIndex, XrVisibilityMaskTypeKHR visibilityMaskType, XrVisibilityMaskKHR* visibilityMask);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVisibilityMaskKHR(
+ XrSession session,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewIndex,
+ XrVisibilityMaskTypeKHR visibilityMaskType,
+ XrVisibilityMaskKHR* visibilityMask);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_color_scale_bias 1
+#define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5
+#define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias"
+// XrCompositionLayerColorScaleBiasKHR extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerColorScaleBiasKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrColor4f colorScale;
+ XrColor4f colorBias;
+} XrCompositionLayerColorScaleBiasKHR;
+
+
+
+#define XR_KHR_loader_init 1
+#define XR_KHR_loader_init_SPEC_VERSION 1
+#define XR_KHR_LOADER_INIT_EXTENSION_NAME "XR_KHR_loader_init"
+typedef struct XR_MAY_ALIAS XrLoaderInitInfoBaseHeaderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrLoaderInitInfoBaseHeaderKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrInitializeLoaderKHR)(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR(
+ const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_equirect2 1
+#define XR_KHR_composition_layer_equirect2_SPEC_VERSION 1
+#define XR_KHR_COMPOSITION_LAYER_EQUIRECT2_EXTENSION_NAME "XR_KHR_composition_layer_equirect2"
+typedef struct XrCompositionLayerEquirect2KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ float centralHorizontalAngle;
+ float upperVerticalAngle;
+ float lowerVerticalAngle;
+} XrCompositionLayerEquirect2KHR;
+
+
+
+#define XR_KHR_binding_modification 1
+#define XR_KHR_binding_modification_SPEC_VERSION 1
+#define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification"
+typedef struct XR_MAY_ALIAS XrBindingModificationBaseHeaderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrBindingModificationBaseHeaderKHR;
+
+// XrBindingModificationsKHR extends XrInteractionProfileSuggestedBinding
+typedef struct XrBindingModificationsKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t bindingModificationCount;
+ const XrBindingModificationBaseHeaderKHR* const* bindingModifications;
+} XrBindingModificationsKHR;
+
+
+
+#define XR_KHR_swapchain_usage_input_attachment_bit 1
+#define XR_KHR_swapchain_usage_input_attachment_bit_SPEC_VERSION 3
+#define XR_KHR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_KHR_swapchain_usage_input_attachment_bit"
+
+
+#define XR_EXT_performance_settings 1
+#define XR_EXT_performance_settings_SPEC_VERSION 3
+#define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings"
+
+typedef enum XrPerfSettingsDomainEXT {
+ XR_PERF_SETTINGS_DOMAIN_CPU_EXT = 1,
+ XR_PERF_SETTINGS_DOMAIN_GPU_EXT = 2,
+ XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsDomainEXT;
+
+typedef enum XrPerfSettingsSubDomainEXT {
+ XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT = 1,
+ XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT = 2,
+ XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT = 3,
+ XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsSubDomainEXT;
+
+typedef enum XrPerfSettingsLevelEXT {
+ XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT = 0,
+ XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT = 25,
+ XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT = 50,
+ XR_PERF_SETTINGS_LEVEL_BOOST_EXT = 75,
+ XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsLevelEXT;
+
+typedef enum XrPerfSettingsNotificationLevelEXT {
+ XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT = 0,
+ XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT = 25,
+ XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT = 75,
+ XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsNotificationLevelEXT;
+typedef struct XrEventDataPerfSettingsEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPerfSettingsDomainEXT domain;
+ XrPerfSettingsSubDomainEXT subDomain;
+ XrPerfSettingsNotificationLevelEXT fromLevel;
+ XrPerfSettingsNotificationLevelEXT toLevel;
+} XrEventDataPerfSettingsEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrPerfSettingsSetPerformanceLevelEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsLevelEXT level);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrPerfSettingsSetPerformanceLevelEXT(
+ XrSession session,
+ XrPerfSettingsDomainEXT domain,
+ XrPerfSettingsLevelEXT level);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_thermal_query 1
+#define XR_EXT_thermal_query_SPEC_VERSION 2
+#define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query"
+typedef XrResult (XRAPI_PTR *PFN_xrThermalGetTemperatureTrendEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsNotificationLevelEXT* notificationLevel, float* tempHeadroom, float* tempSlope);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrThermalGetTemperatureTrendEXT(
+ XrSession session,
+ XrPerfSettingsDomainEXT domain,
+ XrPerfSettingsNotificationLevelEXT* notificationLevel,
+ float* tempHeadroom,
+ float* tempSlope);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_debug_utils 1
+XR_DEFINE_HANDLE(XrDebugUtilsMessengerEXT)
+#define XR_EXT_debug_utils_SPEC_VERSION 4
+#define XR_EXT_DEBUG_UTILS_EXTENSION_NAME "XR_EXT_debug_utils"
+typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT;
+
+// Flag bits for XrDebugUtilsMessageSeverityFlagsEXT
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000;
+
+typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT;
+
+// Flag bits for XrDebugUtilsMessageTypeFlagsEXT
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT = 0x00000008;
+
+typedef struct XrDebugUtilsObjectNameInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrObjectType objectType;
+ uint64_t objectHandle;
+ const char* objectName;
+} XrDebugUtilsObjectNameInfoEXT;
+
+typedef struct XrDebugUtilsLabelEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ const char* labelName;
+} XrDebugUtilsLabelEXT;
+
+typedef struct XrDebugUtilsMessengerCallbackDataEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ const char* messageId;
+ const char* functionName;
+ const char* message;
+ uint32_t objectCount;
+ XrDebugUtilsObjectNameInfoEXT* objects;
+ uint32_t sessionLabelCount;
+ XrDebugUtilsLabelEXT* sessionLabels;
+} XrDebugUtilsMessengerCallbackDataEXT;
+
+typedef XrBool32 (XRAPI_PTR *PFN_xrDebugUtilsMessengerCallbackEXT)(
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT* callbackData,
+ void* userData);
+
+
+// XrDebugUtilsMessengerCreateInfoEXT extends XrInstanceCreateInfo
+typedef struct XrDebugUtilsMessengerCreateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverities;
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes;
+ PFN_xrDebugUtilsMessengerCallbackEXT userCallback;
+ void* XR_MAY_ALIAS userData;
+} XrDebugUtilsMessengerCreateInfoEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetDebugUtilsObjectNameEXT)(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT* nameInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateDebugUtilsMessengerEXT)(XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT* createInfo, XrDebugUtilsMessengerEXT* messenger);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyDebugUtilsMessengerEXT)(XrDebugUtilsMessengerEXT messenger);
+typedef XrResult (XRAPI_PTR *PFN_xrSubmitDebugUtilsMessageEXT)(XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes, const XrDebugUtilsMessengerCallbackDataEXT* callbackData);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionBeginDebugUtilsLabelRegionEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionEndDebugUtilsLabelRegionEXT)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionInsertDebugUtilsLabelEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetDebugUtilsObjectNameEXT(
+ XrInstance instance,
+ const XrDebugUtilsObjectNameInfoEXT* nameInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateDebugUtilsMessengerEXT(
+ XrInstance instance,
+ const XrDebugUtilsMessengerCreateInfoEXT* createInfo,
+ XrDebugUtilsMessengerEXT* messenger);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyDebugUtilsMessengerEXT(
+ XrDebugUtilsMessengerEXT messenger);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSubmitDebugUtilsMessageEXT(
+ XrInstance instance,
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT* callbackData);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionBeginDebugUtilsLabelRegionEXT(
+ XrSession session,
+ const XrDebugUtilsLabelEXT* labelInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionEndDebugUtilsLabelRegionEXT(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT(
+ XrSession session,
+ const XrDebugUtilsLabelEXT* labelInfo);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_eye_gaze_interaction 1
+#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 1
+#define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction"
+// XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties
+typedef struct XrSystemEyeGazeInteractionPropertiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsEyeGazeInteraction;
+} XrSystemEyeGazeInteractionPropertiesEXT;
+
+// XrEyeGazeSampleTimeEXT extends XrSpaceLocation
+typedef struct XrEyeGazeSampleTimeEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrTime time;
+} XrEyeGazeSampleTimeEXT;
+
+
+
+#define XR_EXTX_overlay 1
+#define XR_EXTX_overlay_SPEC_VERSION 5
+#define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay"
+typedef XrFlags64 XrOverlaySessionCreateFlagsEXTX;
+
+// Flag bits for XrOverlaySessionCreateFlagsEXTX
+
+typedef XrFlags64 XrOverlayMainSessionFlagsEXTX;
+
+// Flag bits for XrOverlayMainSessionFlagsEXTX
+static const XrOverlayMainSessionFlagsEXTX XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX = 0x00000001;
+
+// XrSessionCreateInfoOverlayEXTX extends XrSessionCreateInfo
+typedef struct XrSessionCreateInfoOverlayEXTX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrOverlaySessionCreateFlagsEXTX createFlags;
+ uint32_t sessionLayersPlacement;
+} XrSessionCreateInfoOverlayEXTX;
+
+typedef struct XrEventDataMainSessionVisibilityChangedEXTX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 visible;
+ XrOverlayMainSessionFlagsEXTX flags;
+} XrEventDataMainSessionVisibilityChangedEXTX;
+
+
+
+#define XR_VARJO_quad_views 1
+#define XR_VARJO_quad_views_SPEC_VERSION 1
+#define XR_VARJO_QUAD_VIEWS_EXTENSION_NAME "XR_VARJO_quad_views"
+
+
+#define XR_MSFT_unbounded_reference_space 1
+#define XR_MSFT_unbounded_reference_space_SPEC_VERSION 1
+#define XR_MSFT_UNBOUNDED_REFERENCE_SPACE_EXTENSION_NAME "XR_MSFT_unbounded_reference_space"
+
+
+#define XR_MSFT_spatial_anchor 1
+XR_DEFINE_HANDLE(XrSpatialAnchorMSFT)
+#define XR_MSFT_spatial_anchor_SPEC_VERSION 2
+#define XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME "XR_MSFT_spatial_anchor"
+typedef struct XrSpatialAnchorCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrPosef pose;
+ XrTime time;
+} XrSpatialAnchorCreateInfoMSFT;
+
+typedef struct XrSpatialAnchorSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorMSFT anchor;
+ XrPosef poseInAnchorSpace;
+} XrSpatialAnchorSpaceCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorMSFT)(XrSession session, const XrSpatialAnchorCreateInfoMSFT* createInfo, XrSpatialAnchorMSFT* anchor);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorSpaceMSFT)(XrSession session, const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorMSFT)(XrSpatialAnchorMSFT anchor);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorMSFT(
+ XrSession session,
+ const XrSpatialAnchorCreateInfoMSFT* createInfo,
+ XrSpatialAnchorMSFT* anchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorSpaceMSFT(
+ XrSession session,
+ const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorMSFT(
+ XrSpatialAnchorMSFT anchor);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_composition_layer_image_layout 1
+#define XR_FB_composition_layer_image_layout_SPEC_VERSION 1
+#define XR_FB_COMPOSITION_LAYER_IMAGE_LAYOUT_EXTENSION_NAME "XR_FB_composition_layer_image_layout"
+typedef XrFlags64 XrCompositionLayerImageLayoutFlagsFB;
+
+// Flag bits for XrCompositionLayerImageLayoutFlagsFB
+static const XrCompositionLayerImageLayoutFlagsFB XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB = 0x00000001;
+
+// XrCompositionLayerImageLayoutFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerImageLayoutFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrCompositionLayerImageLayoutFlagsFB flags;
+} XrCompositionLayerImageLayoutFB;
+
+
+
+#define XR_FB_composition_layer_alpha_blend 1
+#define XR_FB_composition_layer_alpha_blend_SPEC_VERSION 2
+#define XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME "XR_FB_composition_layer_alpha_blend"
+
+typedef enum XrBlendFactorFB {
+ XR_BLEND_FACTOR_ZERO_FB = 0,
+ XR_BLEND_FACTOR_ONE_FB = 1,
+ XR_BLEND_FACTOR_SRC_ALPHA_FB = 2,
+ XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB = 3,
+ XR_BLEND_FACTOR_DST_ALPHA_FB = 4,
+ XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB = 5,
+ XR_BLEND_FACTOR_MAX_ENUM_FB = 0x7FFFFFFF
+} XrBlendFactorFB;
+// XrCompositionLayerAlphaBlendFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerAlphaBlendFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBlendFactorFB srcFactorColor;
+ XrBlendFactorFB dstFactorColor;
+ XrBlendFactorFB srcFactorAlpha;
+ XrBlendFactorFB dstFactorAlpha;
+} XrCompositionLayerAlphaBlendFB;
+
+
+
+#define XR_MND_headless 1
+#define XR_MND_headless_SPEC_VERSION 2
+#define XR_MND_HEADLESS_EXTENSION_NAME "XR_MND_headless"
+
+
+#define XR_OCULUS_android_session_state_enable 1
+#define XR_OCULUS_android_session_state_enable_SPEC_VERSION 1
+#define XR_OCULUS_ANDROID_SESSION_STATE_ENABLE_EXTENSION_NAME "XR_OCULUS_android_session_state_enable"
+
+
+#define XR_EXT_view_configuration_depth_range 1
+#define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1
+#define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range"
+// XrViewConfigurationDepthRangeEXT extends XrViewConfigurationView
+typedef struct XrViewConfigurationDepthRangeEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float recommendedNearZ;
+ float minNearZ;
+ float recommendedFarZ;
+ float maxFarZ;
+} XrViewConfigurationDepthRangeEXT;
+
+
+
+#define XR_EXT_conformance_automation 1
+#define XR_EXT_conformance_automation_SPEC_VERSION 3
+#define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation"
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateFloatEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, float state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateVector2fEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrVector2f state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceActiveEXT(
+ XrSession session,
+ XrPath interactionProfile,
+ XrPath topLevelPath,
+ XrBool32 isActive);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateBoolEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrBool32 state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateFloatEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ float state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateVector2fEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrVector2f state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrSpace space,
+ XrPosef pose);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_spatial_graph_bridge 1
+#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1
+#define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge"
+
+typedef enum XrSpatialGraphNodeTypeMSFT {
+ XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1,
+ XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT = 2,
+ XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSpatialGraphNodeTypeMSFT;
+typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialGraphNodeTypeMSFT nodeType;
+ uint8_t nodeId[16];
+ XrPosef pose;
+} XrSpatialGraphNodeSpaceCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT(
+ XrSession session,
+ const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_hand_interaction 1
+#define XR_MSFT_hand_interaction_SPEC_VERSION 1
+#define XR_MSFT_HAND_INTERACTION_EXTENSION_NAME "XR_MSFT_hand_interaction"
+
+
+#define XR_EXT_hand_tracking 1
+
+#define XR_HAND_JOINT_COUNT_EXT 26
+
+XR_DEFINE_HANDLE(XrHandTrackerEXT)
+#define XR_EXT_hand_tracking_SPEC_VERSION 4
+#define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking"
+
+typedef enum XrHandEXT {
+ XR_HAND_LEFT_EXT = 1,
+ XR_HAND_RIGHT_EXT = 2,
+ XR_HAND_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandEXT;
+
+typedef enum XrHandJointEXT {
+ XR_HAND_JOINT_PALM_EXT = 0,
+ XR_HAND_JOINT_WRIST_EXT = 1,
+ XR_HAND_JOINT_THUMB_METACARPAL_EXT = 2,
+ XR_HAND_JOINT_THUMB_PROXIMAL_EXT = 3,
+ XR_HAND_JOINT_THUMB_DISTAL_EXT = 4,
+ XR_HAND_JOINT_THUMB_TIP_EXT = 5,
+ XR_HAND_JOINT_INDEX_METACARPAL_EXT = 6,
+ XR_HAND_JOINT_INDEX_PROXIMAL_EXT = 7,
+ XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT = 8,
+ XR_HAND_JOINT_INDEX_DISTAL_EXT = 9,
+ XR_HAND_JOINT_INDEX_TIP_EXT = 10,
+ XR_HAND_JOINT_MIDDLE_METACARPAL_EXT = 11,
+ XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT = 12,
+ XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT = 13,
+ XR_HAND_JOINT_MIDDLE_DISTAL_EXT = 14,
+ XR_HAND_JOINT_MIDDLE_TIP_EXT = 15,
+ XR_HAND_JOINT_RING_METACARPAL_EXT = 16,
+ XR_HAND_JOINT_RING_PROXIMAL_EXT = 17,
+ XR_HAND_JOINT_RING_INTERMEDIATE_EXT = 18,
+ XR_HAND_JOINT_RING_DISTAL_EXT = 19,
+ XR_HAND_JOINT_RING_TIP_EXT = 20,
+ XR_HAND_JOINT_LITTLE_METACARPAL_EXT = 21,
+ XR_HAND_JOINT_LITTLE_PROXIMAL_EXT = 22,
+ XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT = 23,
+ XR_HAND_JOINT_LITTLE_DISTAL_EXT = 24,
+ XR_HAND_JOINT_LITTLE_TIP_EXT = 25,
+ XR_HAND_JOINT_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointEXT;
+
+typedef enum XrHandJointSetEXT {
+ XR_HAND_JOINT_SET_DEFAULT_EXT = 0,
+ XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointSetEXT;
+// XrSystemHandTrackingPropertiesEXT extends XrSystemProperties
+typedef struct XrSystemHandTrackingPropertiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsHandTracking;
+} XrSystemHandTrackingPropertiesEXT;
+
+typedef struct XrHandTrackerCreateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandEXT hand;
+ XrHandJointSetEXT handJointSet;
+} XrHandTrackerCreateInfoEXT;
+
+typedef struct XrHandJointsLocateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+} XrHandJointsLocateInfoEXT;
+
+typedef struct XrHandJointLocationEXT {
+ XrSpaceLocationFlags locationFlags;
+ XrPosef pose;
+ float radius;
+} XrHandJointLocationEXT;
+
+typedef struct XrHandJointVelocityEXT {
+ XrSpaceVelocityFlags velocityFlags;
+ XrVector3f linearVelocity;
+ XrVector3f angularVelocity;
+} XrHandJointVelocityEXT;
+
+typedef struct XrHandJointLocationsEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ uint32_t jointCount;
+ XrHandJointLocationEXT* jointLocations;
+} XrHandJointLocationsEXT;
+
+// XrHandJointVelocitiesEXT extends XrHandJointLocationsEXT
+typedef struct XrHandJointVelocitiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t jointCount;
+ XrHandJointVelocityEXT* jointVelocities;
+} XrHandJointVelocitiesEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateHandTrackerEXT)(XrSession session, const XrHandTrackerCreateInfoEXT* createInfo, XrHandTrackerEXT* handTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyHandTrackerEXT)(XrHandTrackerEXT handTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateHandJointsEXT)(XrHandTrackerEXT handTracker, const XrHandJointsLocateInfoEXT* locateInfo, XrHandJointLocationsEXT* locations);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandTrackerEXT(
+ XrSession session,
+ const XrHandTrackerCreateInfoEXT* createInfo,
+ XrHandTrackerEXT* handTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyHandTrackerEXT(
+ XrHandTrackerEXT handTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateHandJointsEXT(
+ XrHandTrackerEXT handTracker,
+ const XrHandJointsLocateInfoEXT* locateInfo,
+ XrHandJointLocationsEXT* locations);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_hand_tracking_mesh 1
+#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 4
+#define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh"
+
+typedef enum XrHandPoseTypeMSFT {
+ XR_HAND_POSE_TYPE_TRACKED_MSFT = 0,
+ XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT = 1,
+ XR_HAND_POSE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrHandPoseTypeMSFT;
+// XrSystemHandTrackingMeshPropertiesMSFT extends XrSystemProperties
+typedef struct XrSystemHandTrackingMeshPropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsHandTrackingMesh;
+ uint32_t maxHandMeshIndexCount;
+ uint32_t maxHandMeshVertexCount;
+} XrSystemHandTrackingMeshPropertiesMSFT;
+
+typedef struct XrHandMeshSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandPoseTypeMSFT handPoseType;
+ XrPosef poseInHandMeshSpace;
+} XrHandMeshSpaceCreateInfoMSFT;
+
+typedef struct XrHandMeshUpdateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime time;
+ XrHandPoseTypeMSFT handPoseType;
+} XrHandMeshUpdateInfoMSFT;
+
+typedef struct XrHandMeshIndexBufferMSFT {
+ uint32_t indexBufferKey;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrHandMeshIndexBufferMSFT;
+
+typedef struct XrHandMeshVertexMSFT {
+ XrVector3f position;
+ XrVector3f normal;
+} XrHandMeshVertexMSFT;
+
+typedef struct XrHandMeshVertexBufferMSFT {
+ XrTime vertexUpdateTime;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrHandMeshVertexMSFT* vertices;
+} XrHandMeshVertexBufferMSFT;
+
+typedef struct XrHandMeshMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ XrBool32 indexBufferChanged;
+ XrBool32 vertexBufferChanged;
+ XrHandMeshIndexBufferMSFT indexBuffer;
+ XrHandMeshVertexBufferMSFT vertexBuffer;
+} XrHandMeshMSFT;
+
+// XrHandPoseTypeInfoMSFT extends XrHandTrackerCreateInfoEXT
+typedef struct XrHandPoseTypeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandPoseTypeMSFT handPoseType;
+} XrHandPoseTypeInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateHandMeshSpaceMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrUpdateHandMeshMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshUpdateInfoMSFT* updateInfo, XrHandMeshMSFT* handMesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandMeshSpaceMSFT(
+ XrHandTrackerEXT handTracker,
+ const XrHandMeshSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrUpdateHandMeshMSFT(
+ XrHandTrackerEXT handTracker,
+ const XrHandMeshUpdateInfoMSFT* updateInfo,
+ XrHandMeshMSFT* handMesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_secondary_view_configuration 1
+#define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1
+#define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration"
+// XrSecondaryViewConfigurationSessionBeginInfoMSFT extends XrSessionBeginInfo
+typedef struct XrSecondaryViewConfigurationSessionBeginInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ const XrViewConfigurationType* enabledViewConfigurationTypes;
+} XrSecondaryViewConfigurationSessionBeginInfoMSFT;
+
+typedef struct XrSecondaryViewConfigurationStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrBool32 active;
+} XrSecondaryViewConfigurationStateMSFT;
+
+// XrSecondaryViewConfigurationFrameStateMSFT extends XrFrameState
+typedef struct XrSecondaryViewConfigurationFrameStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ XrSecondaryViewConfigurationStateMSFT* viewConfigurationStates;
+} XrSecondaryViewConfigurationFrameStateMSFT;
+
+typedef struct XrSecondaryViewConfigurationLayerInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrEnvironmentBlendMode environmentBlendMode;
+ uint32_t layerCount;
+ const XrCompositionLayerBaseHeader* const* layers;
+} XrSecondaryViewConfigurationLayerInfoMSFT;
+
+// XrSecondaryViewConfigurationFrameEndInfoMSFT extends XrFrameEndInfo
+typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ const XrSecondaryViewConfigurationLayerInfoMSFT* viewConfigurationLayersInfo;
+} XrSecondaryViewConfigurationFrameEndInfoMSFT;
+
+// XrSecondaryViewConfigurationSwapchainCreateInfoMSFT extends XrSwapchainCreateInfo
+typedef struct XrSecondaryViewConfigurationSwapchainCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+} XrSecondaryViewConfigurationSwapchainCreateInfoMSFT;
+
+
+
+#define XR_MSFT_first_person_observer 1
+#define XR_MSFT_first_person_observer_SPEC_VERSION 1
+#define XR_MSFT_FIRST_PERSON_OBSERVER_EXTENSION_NAME "XR_MSFT_first_person_observer"
+
+
+#define XR_MSFT_controller_model 1
+
+#define XR_NULL_CONTROLLER_MODEL_KEY_MSFT 0
+
+XR_DEFINE_ATOM(XrControllerModelKeyMSFT)
+#define XR_MSFT_controller_model_SPEC_VERSION 2
+#define XR_MSFT_CONTROLLER_MODEL_EXTENSION_NAME "XR_MSFT_controller_model"
+#define XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT 64
+typedef struct XrControllerModelKeyStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrControllerModelKeyMSFT modelKey;
+} XrControllerModelKeyStateMSFT;
+
+typedef struct XrControllerModelNodePropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char parentNodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT];
+ char nodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT];
+} XrControllerModelNodePropertiesMSFT;
+
+typedef struct XrControllerModelPropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t nodeCapacityInput;
+ uint32_t nodeCountOutput;
+ XrControllerModelNodePropertiesMSFT* nodeProperties;
+} XrControllerModelPropertiesMSFT;
+
+typedef struct XrControllerModelNodeStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPosef nodePose;
+} XrControllerModelNodeStateMSFT;
+
+typedef struct XrControllerModelStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t nodeCapacityInput;
+ uint32_t nodeCountOutput;
+ XrControllerModelNodeStateMSFT* nodeStates;
+} XrControllerModelStateMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelKeyMSFT)(XrSession session, XrPath topLevelUserPath, XrControllerModelKeyStateMSFT* controllerModelKeyState);
+typedef XrResult (XRAPI_PTR *PFN_xrLoadControllerModelMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, uint8_t* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelPropertiesMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelPropertiesMSFT* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelStateMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelStateMSFT* state);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelKeyMSFT(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrControllerModelKeyStateMSFT* controllerModelKeyState);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLoadControllerModelMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ uint8_t* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelPropertiesMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ XrControllerModelPropertiesMSFT* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelStateMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ XrControllerModelStateMSFT* state);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_win32_appcontainer_compatible 1
+#define XR_EXT_win32_appcontainer_compatible_SPEC_VERSION 1
+#define XR_EXT_WIN32_APPCONTAINER_COMPATIBLE_EXTENSION_NAME "XR_EXT_win32_appcontainer_compatible"
+
+
+#define XR_EPIC_view_configuration_fov 1
+#define XR_EPIC_view_configuration_fov_SPEC_VERSION 2
+#define XR_EPIC_VIEW_CONFIGURATION_FOV_EXTENSION_NAME "XR_EPIC_view_configuration_fov"
+// XrViewConfigurationViewFovEPIC extends XrViewConfigurationView
+typedef struct XrViewConfigurationViewFovEPIC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFovf recommendedFov;
+ XrFovf maxMutableFov;
+} XrViewConfigurationViewFovEPIC;
+
+
+
+#define XR_MSFT_composition_layer_reprojection 1
+#define XR_MSFT_composition_layer_reprojection_SPEC_VERSION 1
+#define XR_MSFT_COMPOSITION_LAYER_REPROJECTION_EXTENSION_NAME "XR_MSFT_composition_layer_reprojection"
+
+typedef enum XrReprojectionModeMSFT {
+ XR_REPROJECTION_MODE_DEPTH_MSFT = 1,
+ XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT = 2,
+ XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT = 3,
+ XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT = 4,
+ XR_REPROJECTION_MODE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrReprojectionModeMSFT;
+// XrCompositionLayerReprojectionInfoMSFT extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerReprojectionInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrReprojectionModeMSFT reprojectionMode;
+} XrCompositionLayerReprojectionInfoMSFT;
+
+// XrCompositionLayerReprojectionPlaneOverrideMSFT extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerReprojectionPlaneOverrideMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrVector3f position;
+ XrVector3f normal;
+ XrVector3f velocity;
+} XrCompositionLayerReprojectionPlaneOverrideMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReprojectionModesMSFT)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t modeCapacityInput, uint32_t* modeCountOutput, XrReprojectionModeMSFT* modes);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReprojectionModesMSFT(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t modeCapacityInput,
+ uint32_t* modeCountOutput,
+ XrReprojectionModeMSFT* modes);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HUAWEI_controller_interaction 1
+#define XR_HUAWEI_controller_interaction_SPEC_VERSION 1
+#define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction"
+
+
+#define XR_FB_swapchain_update_state 1
+#define XR_FB_swapchain_update_state_SPEC_VERSION 3
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_EXTENSION_NAME "XR_FB_swapchain_update_state"
+typedef struct XR_MAY_ALIAS XrSwapchainStateBaseHeaderFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSwapchainStateBaseHeaderFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrUpdateSwapchainFB)(XrSwapchain swapchain, const XrSwapchainStateBaseHeaderFB* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSwapchainStateFB)(XrSwapchain swapchain, XrSwapchainStateBaseHeaderFB* state);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrUpdateSwapchainFB(
+ XrSwapchain swapchain,
+ const XrSwapchainStateBaseHeaderFB* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSwapchainStateFB(
+ XrSwapchain swapchain,
+ XrSwapchainStateBaseHeaderFB* state);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_composition_layer_secure_content 1
+#define XR_FB_composition_layer_secure_content_SPEC_VERSION 1
+#define XR_FB_COMPOSITION_LAYER_SECURE_CONTENT_EXTENSION_NAME "XR_FB_composition_layer_secure_content"
+typedef XrFlags64 XrCompositionLayerSecureContentFlagsFB;
+
+// Flag bits for XrCompositionLayerSecureContentFlagsFB
+static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB = 0x00000001;
+static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB = 0x00000002;
+
+// XrCompositionLayerSecureContentFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerSecureContentFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerSecureContentFlagsFB flags;
+} XrCompositionLayerSecureContentFB;
+
+
+
+#define XR_VALVE_analog_threshold 1
+#define XR_VALVE_analog_threshold_SPEC_VERSION 2
+#define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold"
+typedef struct XrInteractionProfileAnalogThresholdVALVE {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath binding;
+ float onThreshold;
+ float offThreshold;
+ const XrHapticBaseHeader* onHaptic;
+ const XrHapticBaseHeader* offHaptic;
+} XrInteractionProfileAnalogThresholdVALVE;
+
+
+
+#define XR_EXT_hand_joints_motion_range 1
+#define XR_EXT_hand_joints_motion_range_SPEC_VERSION 1
+#define XR_EXT_HAND_JOINTS_MOTION_RANGE_EXTENSION_NAME "XR_EXT_hand_joints_motion_range"
+
+typedef enum XrHandJointsMotionRangeEXT {
+ XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT = 1,
+ XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT = 2,
+ XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointsMotionRangeEXT;
+// XrHandJointsMotionRangeInfoEXT extends XrHandJointsLocateInfoEXT
+typedef struct XrHandJointsMotionRangeInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandJointsMotionRangeEXT handJointsMotionRange;
+} XrHandJointsMotionRangeInfoEXT;
+
+
+
+#define XR_EXT_samsung_odyssey_controller 1
+#define XR_EXT_samsung_odyssey_controller_SPEC_VERSION 1
+#define XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME "XR_EXT_samsung_odyssey_controller"
+
+
+#define XR_EXT_hp_mixed_reality_controller 1
+#define XR_EXT_hp_mixed_reality_controller_SPEC_VERSION 1
+#define XR_EXT_HP_MIXED_REALITY_CONTROLLER_EXTENSION_NAME "XR_EXT_hp_mixed_reality_controller"
+
+
+#define XR_MND_swapchain_usage_input_attachment_bit 1
+#define XR_MND_swapchain_usage_input_attachment_bit_SPEC_VERSION 2
+#define XR_MND_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_MND_swapchain_usage_input_attachment_bit"
+
+
+#define XR_MSFT_scene_understanding 1
+
+ XR_DEFINE_HANDLE(XrSceneObserverMSFT)
+
+
+ XR_DEFINE_HANDLE(XrSceneMSFT)
+
+#define XR_MSFT_scene_understanding_SPEC_VERSION 1
+#define XR_MSFT_SCENE_UNDERSTANDING_EXTENSION_NAME "XR_MSFT_scene_understanding"
+
+typedef enum XrSceneComputeFeatureMSFT {
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT = 1,
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT = 2,
+ XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT = 1000098000,
+ XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeFeatureMSFT;
+
+typedef enum XrSceneComputeConsistencyMSFT {
+ XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT = 1,
+ XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT = 2,
+ XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT = 3,
+ XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeConsistencyMSFT;
+
+typedef enum XrMeshComputeLodMSFT {
+ XR_MESH_COMPUTE_LOD_COARSE_MSFT = 1,
+ XR_MESH_COMPUTE_LOD_MEDIUM_MSFT = 2,
+ XR_MESH_COMPUTE_LOD_FINE_MSFT = 3,
+ XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT = 4,
+ XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrMeshComputeLodMSFT;
+
+typedef enum XrSceneComponentTypeMSFT {
+ XR_SCENE_COMPONENT_TYPE_INVALID_MSFT = -1,
+ XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT = 1,
+ XR_SCENE_COMPONENT_TYPE_PLANE_MSFT = 2,
+ XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT = 1000098000,
+ XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComponentTypeMSFT;
+
+typedef enum XrSceneObjectTypeMSFT {
+ XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT = -1,
+ XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT = 1,
+ XR_SCENE_OBJECT_TYPE_WALL_MSFT = 2,
+ XR_SCENE_OBJECT_TYPE_FLOOR_MSFT = 3,
+ XR_SCENE_OBJECT_TYPE_CEILING_MSFT = 4,
+ XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT = 5,
+ XR_SCENE_OBJECT_TYPE_INFERRED_MSFT = 6,
+ XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneObjectTypeMSFT;
+
+typedef enum XrScenePlaneAlignmentTypeMSFT {
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT = 0,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT = 1,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT = 2,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrScenePlaneAlignmentTypeMSFT;
+
+typedef enum XrSceneComputeStateMSFT {
+ XR_SCENE_COMPUTE_STATE_NONE_MSFT = 0,
+ XR_SCENE_COMPUTE_STATE_UPDATING_MSFT = 1,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT = 2,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT = 3,
+ XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeStateMSFT;
+typedef struct XrUuidMSFT {
+ uint8_t bytes[16];
+} XrUuidMSFT;
+
+typedef struct XrSceneObserverCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSceneObserverCreateInfoMSFT;
+
+typedef struct XrSceneCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSceneCreateInfoMSFT;
+
+typedef struct XrSceneSphereBoundMSFT {
+ XrVector3f center;
+ float radius;
+} XrSceneSphereBoundMSFT;
+
+typedef struct XrSceneOrientedBoxBoundMSFT {
+ XrPosef pose;
+ XrVector3f extents;
+} XrSceneOrientedBoxBoundMSFT;
+
+typedef struct XrSceneFrustumBoundMSFT {
+ XrPosef pose;
+ XrFovf fov;
+ float farDistance;
+} XrSceneFrustumBoundMSFT;
+
+typedef struct XrSceneBoundsMSFT {
+ XrSpace space;
+ XrTime time;
+ uint32_t sphereCount;
+ const XrSceneSphereBoundMSFT* spheres;
+ uint32_t boxCount;
+ const XrSceneOrientedBoxBoundMSFT* boxes;
+ uint32_t frustumCount;
+ const XrSceneFrustumBoundMSFT* frustums;
+} XrSceneBoundsMSFT;
+
+typedef struct XrNewSceneComputeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t requestedFeatureCount;
+ const XrSceneComputeFeatureMSFT* requestedFeatures;
+ XrSceneComputeConsistencyMSFT consistency;
+ XrSceneBoundsMSFT bounds;
+} XrNewSceneComputeInfoMSFT;
+
+// XrVisualMeshComputeLodInfoMSFT extends XrNewSceneComputeInfoMSFT
+typedef struct XrVisualMeshComputeLodInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrMeshComputeLodMSFT lod;
+} XrVisualMeshComputeLodInfoMSFT;
+
+typedef struct XrSceneComponentMSFT {
+ XrSceneComponentTypeMSFT componentType;
+ XrUuidMSFT id;
+ XrUuidMSFT parentId;
+ XrTime updateTime;
+} XrSceneComponentMSFT;
+
+typedef struct XrSceneComponentsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t componentCapacityInput;
+ uint32_t componentCountOutput;
+ XrSceneComponentMSFT* components;
+} XrSceneComponentsMSFT;
+
+typedef struct XrSceneComponentsGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSceneComponentTypeMSFT componentType;
+} XrSceneComponentsGetInfoMSFT;
+
+typedef struct XrSceneComponentLocationMSFT {
+ XrSpaceLocationFlags flags;
+ XrPosef pose;
+} XrSceneComponentLocationMSFT;
+
+typedef struct XrSceneComponentLocationsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t locationCount;
+ XrSceneComponentLocationMSFT* locations;
+} XrSceneComponentLocationsMSFT;
+
+typedef struct XrSceneComponentsLocateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+ uint32_t componentIdCount;
+ const XrUuidMSFT* componentIds;
+} XrSceneComponentsLocateInfoMSFT;
+
+typedef struct XrSceneObjectMSFT {
+ XrSceneObjectTypeMSFT objectType;
+} XrSceneObjectMSFT;
+
+// XrSceneObjectsMSFT extends XrSceneComponentsMSFT
+typedef struct XrSceneObjectsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t sceneObjectCount;
+ XrSceneObjectMSFT* sceneObjects;
+} XrSceneObjectsMSFT;
+
+// XrSceneComponentParentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrSceneComponentParentFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrUuidMSFT parentId;
+} XrSceneComponentParentFilterInfoMSFT;
+
+// XrSceneObjectTypesFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrSceneObjectTypesFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t objectTypeCount;
+ const XrSceneObjectTypeMSFT* objectTypes;
+} XrSceneObjectTypesFilterInfoMSFT;
+
+typedef struct XrScenePlaneMSFT {
+ XrScenePlaneAlignmentTypeMSFT alignment;
+ XrExtent2Df size;
+ uint64_t meshBufferId;
+ XrBool32 supportsIndicesUint16;
+} XrScenePlaneMSFT;
+
+// XrScenePlanesMSFT extends XrSceneComponentsMSFT
+typedef struct XrScenePlanesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t scenePlaneCount;
+ XrScenePlaneMSFT* scenePlanes;
+} XrScenePlanesMSFT;
+
+// XrScenePlaneAlignmentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrScenePlaneAlignmentFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t alignmentCount;
+ const XrScenePlaneAlignmentTypeMSFT* alignments;
+} XrScenePlaneAlignmentFilterInfoMSFT;
+
+typedef struct XrSceneMeshMSFT {
+ uint64_t meshBufferId;
+ XrBool32 supportsIndicesUint16;
+} XrSceneMeshMSFT;
+
+// XrSceneMeshesMSFT extends XrSceneComponentsMSFT
+typedef struct XrSceneMeshesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t sceneMeshCount;
+ XrSceneMeshMSFT* sceneMeshes;
+} XrSceneMeshesMSFT;
+
+typedef struct XrSceneMeshBuffersGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t meshBufferId;
+} XrSceneMeshBuffersGetInfoMSFT;
+
+typedef struct XrSceneMeshBuffersMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSceneMeshBuffersMSFT;
+
+typedef struct XrSceneMeshVertexBufferMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector3f* vertices;
+} XrSceneMeshVertexBufferMSFT;
+
+typedef struct XrSceneMeshIndicesUint32MSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrSceneMeshIndicesUint32MSFT;
+
+typedef struct XrSceneMeshIndicesUint16MSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint16_t* indices;
+} XrSceneMeshIndicesUint16MSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSceneComputeFeaturesMSFT)(XrInstance instance, XrSystemId systemId, uint32_t featureCapacityInput, uint32_t* featureCountOutput, XrSceneComputeFeatureMSFT* features);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneObserverMSFT)(XrSession session, const XrSceneObserverCreateInfoMSFT* createInfo, XrSceneObserverMSFT* sceneObserver);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneObserverMSFT)(XrSceneObserverMSFT sceneObserver);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneCreateInfoMSFT* createInfo, XrSceneMSFT* scene);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneMSFT)(XrSceneMSFT scene);
+typedef XrResult (XRAPI_PTR *PFN_xrComputeNewSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrNewSceneComputeInfoMSFT* computeInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComputeStateMSFT)(XrSceneObserverMSFT sceneObserver, XrSceneComputeStateMSFT* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsGetInfoMSFT* getInfo, XrSceneComponentsMSFT* components);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsLocateInfoMSFT* locateInfo, XrSceneComponentLocationsMSFT* locations);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneMeshBuffersMSFT)(XrSceneMSFT scene, const XrSceneMeshBuffersGetInfoMSFT* getInfo, XrSceneMeshBuffersMSFT* buffers);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSceneComputeFeaturesMSFT(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t featureCapacityInput,
+ uint32_t* featureCountOutput,
+ XrSceneComputeFeatureMSFT* features);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneObserverMSFT(
+ XrSession session,
+ const XrSceneObserverCreateInfoMSFT* createInfo,
+ XrSceneObserverMSFT* sceneObserver);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneObserverMSFT(
+ XrSceneObserverMSFT sceneObserver);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrSceneCreateInfoMSFT* createInfo,
+ XrSceneMSFT* scene);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneMSFT(
+ XrSceneMSFT scene);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrComputeNewSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrNewSceneComputeInfoMSFT* computeInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComputeStateMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ XrSceneComputeStateMSFT* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComponentsMSFT(
+ XrSceneMSFT scene,
+ const XrSceneComponentsGetInfoMSFT* getInfo,
+ XrSceneComponentsMSFT* components);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateSceneComponentsMSFT(
+ XrSceneMSFT scene,
+ const XrSceneComponentsLocateInfoMSFT* locateInfo,
+ XrSceneComponentLocationsMSFT* locations);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneMeshBuffersMSFT(
+ XrSceneMSFT scene,
+ const XrSceneMeshBuffersGetInfoMSFT* getInfo,
+ XrSceneMeshBuffersMSFT* buffers);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_scene_understanding_serialization 1
+#define XR_MSFT_scene_understanding_serialization_SPEC_VERSION 1
+#define XR_MSFT_SCENE_UNDERSTANDING_SERIALIZATION_EXTENSION_NAME "XR_MSFT_scene_understanding_serialization"
+typedef struct XrSerializedSceneFragmentDataGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrUuidMSFT sceneFragmentId;
+} XrSerializedSceneFragmentDataGetInfoMSFT;
+
+typedef struct XrDeserializeSceneFragmentMSFT {
+ uint32_t bufferSize;
+ const uint8_t* buffer;
+} XrDeserializeSceneFragmentMSFT;
+
+typedef struct XrSceneDeserializeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t fragmentCount;
+ const XrDeserializeSceneFragmentMSFT* fragments;
+} XrSceneDeserializeInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrDeserializeSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneDeserializeInfoMSFT* deserializeInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSerializedSceneFragmentDataMSFT)(XrSceneMSFT scene, const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, uint32_t countInput, uint32_t* readOutput, uint8_t* buffer);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrDeserializeSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrSceneDeserializeInfoMSFT* deserializeInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSerializedSceneFragmentDataMSFT(
+ XrSceneMSFT scene,
+ const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo,
+ uint32_t countInput,
+ uint32_t* readOutput,
+ uint8_t* buffer);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_display_refresh_rate 1
+#define XR_FB_display_refresh_rate_SPEC_VERSION 1
+#define XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME "XR_FB_display_refresh_rate"
+typedef struct XrEventDataDisplayRefreshRateChangedFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float fromDisplayRefreshRate;
+ float toDisplayRefreshRate;
+} XrEventDataDisplayRefreshRateChangedFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateDisplayRefreshRatesFB)(XrSession session, uint32_t displayRefreshRateCapacityInput, uint32_t* displayRefreshRateCountOutput, float* displayRefreshRates);
+typedef XrResult (XRAPI_PTR *PFN_xrGetDisplayRefreshRateFB)(XrSession session, float* displayRefreshRate);
+typedef XrResult (XRAPI_PTR *PFN_xrRequestDisplayRefreshRateFB)(XrSession session, float displayRefreshRate);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateDisplayRefreshRatesFB(
+ XrSession session,
+ uint32_t displayRefreshRateCapacityInput,
+ uint32_t* displayRefreshRateCountOutput,
+ float* displayRefreshRates);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetDisplayRefreshRateFB(
+ XrSession session,
+ float* displayRefreshRate);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB(
+ XrSession session,
+ float displayRefreshRate);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_vive_cosmos_controller_interaction 1
+#define XR_HTC_vive_cosmos_controller_interaction_SPEC_VERSION 1
+#define XR_HTC_VIVE_COSMOS_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_cosmos_controller_interaction"
+
+
+#define XR_HTCX_vive_tracker_interaction 1
+#define XR_HTCX_vive_tracker_interaction_SPEC_VERSION 1
+#define XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTCX_vive_tracker_interaction"
+typedef struct XrViveTrackerPathsHTCX {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath persistentPath;
+ XrPath rolePath;
+} XrViveTrackerPathsHTCX;
+
+typedef struct XrEventDataViveTrackerConnectedHTCX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViveTrackerPathsHTCX* paths;
+} XrEventDataViveTrackerConnectedHTCX;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViveTrackerPathsHTCX)(XrInstance instance, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrViveTrackerPathsHTCX* paths);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViveTrackerPathsHTCX(
+ XrInstance instance,
+ uint32_t pathCapacityInput,
+ uint32_t* pathCountOutput,
+ XrViveTrackerPathsHTCX* paths);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_facial_tracking 1
+
+#define XR_FACIAL_EXPRESSION_EYE_COUNT_HTC 14
+
+
+#define XR_FACIAL_EXPRESSION_LIP_COUNT_HTC 37
+
+XR_DEFINE_HANDLE(XrFacialTrackerHTC)
+#define XR_HTC_facial_tracking_SPEC_VERSION 1
+#define XR_HTC_FACIAL_TRACKING_EXTENSION_NAME "XR_HTC_facial_tracking"
+
+typedef enum XrEyeExpressionHTC {
+ XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
+ XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
+ XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
+ XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
+ XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
+ XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
+ XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
+ XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
+ XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
+ XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
+ XR_EYE_EXPRESSION_LEFT_IN_HTC = 10,
+ XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
+ XR_EYE_EXPRESSION_LEFT_UP_HTC = 12,
+ XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13,
+ XR_EYE_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrEyeExpressionHTC;
+
+typedef enum XrLipExpressionHTC {
+ XR_LIP_EXPRESSION_JAW_RIGHT_HTC = 0,
+ XR_LIP_EXPRESSION_JAW_LEFT_HTC = 1,
+ XR_LIP_EXPRESSION_JAW_FORWARD_HTC = 2,
+ XR_LIP_EXPRESSION_JAW_OPEN_HTC = 3,
+ XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10,
+ XR_LIP_EXPRESSION_MOUTH_POUT_HTC = 11,
+ XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12,
+ XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13,
+ XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14,
+ XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15,
+ XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16,
+ XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17,
+ XR_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25,
+ XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26,
+ XR_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27,
+ XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28,
+ XR_LIP_EXPRESSION_TONGUE_UP_HTC = 29,
+ XR_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30,
+ XR_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31,
+ XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32,
+ XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33,
+ XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34,
+ XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
+ XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36,
+ XR_LIP_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrLipExpressionHTC;
+
+typedef enum XrFacialTrackingTypeHTC {
+ XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1,
+ XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2,
+ XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrFacialTrackingTypeHTC;
+// XrSystemFacialTrackingPropertiesHTC extends XrSystemProperties
+typedef struct XrSystemFacialTrackingPropertiesHTC {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportEyeFacialTracking;
+ XrBool32 supportLipFacialTracking;
+} XrSystemFacialTrackingPropertiesHTC;
+
+typedef struct XrFacialExpressionsHTC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ XrTime sampleTime;
+ uint32_t expressionCount;
+ float* expressionWeightings;
+} XrFacialExpressionsHTC;
+
+typedef struct XrFacialTrackerCreateInfoHTC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFacialTrackingTypeHTC facialTrackingType;
+} XrFacialTrackerCreateInfoHTC;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateFacialTrackerHTC)(XrSession session, const XrFacialTrackerCreateInfoHTC* createInfo, XrFacialTrackerHTC* facialTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyFacialTrackerHTC)(XrFacialTrackerHTC facialTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrGetFacialExpressionsHTC)(XrFacialTrackerHTC facialTracker, XrFacialExpressionsHTC* facialExpressions);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateFacialTrackerHTC(
+ XrSession session,
+ const XrFacialTrackerCreateInfoHTC* createInfo,
+ XrFacialTrackerHTC* facialTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFacialTrackerHTC(
+ XrFacialTrackerHTC facialTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC(
+ XrFacialTrackerHTC facialTracker,
+ XrFacialExpressionsHTC* facialExpressions);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_vive_focus3_controller_interaction 1
+#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 1
+#define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction"
+
+
+#define XR_FB_color_space 1
+#define XR_FB_color_space_SPEC_VERSION 2
+#define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space"
+
+typedef enum XrColorSpaceFB {
+ XR_COLOR_SPACE_UNMANAGED_FB = 0,
+ XR_COLOR_SPACE_REC2020_FB = 1,
+ XR_COLOR_SPACE_REC709_FB = 2,
+ XR_COLOR_SPACE_RIFT_CV1_FB = 3,
+ XR_COLOR_SPACE_RIFT_S_FB = 4,
+ XR_COLOR_SPACE_QUEST_FB = 5,
+ XR_COLOR_SPACE_P3_FB = 6,
+ XR_COLOR_SPACE_ADOBE_RGB_FB = 7,
+ XR_COLOR_SPACE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrColorSpaceFB;
+// XrSystemColorSpacePropertiesFB extends XrSystemProperties
+typedef struct XrSystemColorSpacePropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrColorSpaceFB colorSpace;
+} XrSystemColorSpacePropertiesFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateColorSpacesFB)(XrSession session, uint32_t colorSpaceCapacityInput, uint32_t* colorSpaceCountOutput, XrColorSpaceFB* colorSpaces);
+typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession session, const XrColorSpaceFB colorspace);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateColorSpacesFB(
+ XrSession session,
+ uint32_t colorSpaceCapacityInput,
+ uint32_t* colorSpaceCountOutput,
+ XrColorSpaceFB* colorSpaces);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB(
+ XrSession session,
+ const XrColorSpaceFB colorspace);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_hand_tracking_mesh 1
+#define XR_FB_hand_tracking_mesh_SPEC_VERSION 1
+#define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh"
+typedef struct XrVector4sFB {
+ int16_t x;
+ int16_t y;
+ int16_t z;
+ int16_t w;
+} XrVector4sFB;
+
+typedef struct XrHandTrackingMeshFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t jointCapacityInput;
+ uint32_t jointCountOutput;
+ XrPosef* jointBindPoses;
+ float* jointRadii;
+ XrHandJointEXT* jointParents;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector3f* vertexPositions;
+ XrVector3f* vertexNormals;
+ XrVector2f* vertexUVs;
+ XrVector4sFB* vertexBlendIndices;
+ XrVector4f* vertexBlendWeights;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ int16_t* indices;
+} XrHandTrackingMeshFB;
+
+// XrHandTrackingScaleFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingScaleFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float sensorOutput;
+ float currentOutput;
+ XrBool32 overrideHandScale;
+ float overrideValueInput;
+} XrHandTrackingScaleFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetHandMeshFB)(XrHandTrackerEXT handTracker, XrHandTrackingMeshFB* mesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB(
+ XrHandTrackerEXT handTracker,
+ XrHandTrackingMeshFB* mesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_hand_tracking_aim 1
+#define XR_FB_hand_tracking_aim_SPEC_VERSION 1
+#define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim"
+typedef XrFlags64 XrHandTrackingAimFlagsFB;
+
+// Flag bits for XrHandTrackingAimFlagsFB
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB = 0x00000001;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_VALID_BIT_FB = 0x00000002;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB = 0x00000004;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB = 0x00000008;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB = 0x00000010;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB = 0x00000020;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB = 0x00000040;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100;
+
+// XrHandTrackingAimStateFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingAimStateFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrHandTrackingAimFlagsFB status;
+ XrPosef aimPose;
+ float pinchStrengthIndex;
+ float pinchStrengthMiddle;
+ float pinchStrengthRing;
+ float pinchStrengthLittle;
+} XrHandTrackingAimStateFB;
+
+
+
+#define XR_FB_hand_tracking_capsules 1
+#define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2
+#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB
+#define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19
+#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB
+#define XR_FB_hand_tracking_capsules_SPEC_VERSION 2
+#define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules"
+typedef struct XrHandCapsuleFB {
+ XrVector3f points[XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT];
+ float radius;
+ XrHandJointEXT joint;
+} XrHandCapsuleFB;
+
+// XrHandTrackingCapsulesStateFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingCapsulesStateFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrHandCapsuleFB capsules[XR_FB_HAND_TRACKING_CAPSULE_COUNT];
+} XrHandTrackingCapsulesStateFB;
+
+
+
+#define XR_FB_foveation 1
+XR_DEFINE_HANDLE(XrFoveationProfileFB)
+#define XR_FB_foveation_SPEC_VERSION 1
+#define XR_FB_FOVEATION_EXTENSION_NAME "XR_FB_foveation"
+typedef XrFlags64 XrSwapchainCreateFoveationFlagsFB;
+
+// Flag bits for XrSwapchainCreateFoveationFlagsFB
+static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB = 0x00000001;
+static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB = 0x00000002;
+
+typedef XrFlags64 XrSwapchainStateFoveationFlagsFB;
+
+// Flag bits for XrSwapchainStateFoveationFlagsFB
+
+typedef struct XrFoveationProfileCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrFoveationProfileCreateInfoFB;
+
+// XrSwapchainCreateInfoFoveationFB extends XrSwapchainCreateInfo
+typedef struct XrSwapchainCreateInfoFoveationFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSwapchainCreateFoveationFlagsFB flags;
+} XrSwapchainCreateInfoFoveationFB;
+
+typedef struct XrSwapchainStateFoveationFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSwapchainStateFoveationFlagsFB flags;
+ XrFoveationProfileFB profile;
+} XrSwapchainStateFoveationFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateFoveationProfileFB)(XrSession session, const XrFoveationProfileCreateInfoFB* createInfo, XrFoveationProfileFB* profile);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyFoveationProfileFB)(XrFoveationProfileFB profile);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateFoveationProfileFB(
+ XrSession session,
+ const XrFoveationProfileCreateInfoFB* createInfo,
+ XrFoveationProfileFB* profile);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFoveationProfileFB(
+ XrFoveationProfileFB profile);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_foveation_configuration 1
+#define XR_FB_foveation_configuration_SPEC_VERSION 1
+#define XR_FB_FOVEATION_CONFIGURATION_EXTENSION_NAME "XR_FB_foveation_configuration"
+
+typedef enum XrFoveationLevelFB {
+ XR_FOVEATION_LEVEL_NONE_FB = 0,
+ XR_FOVEATION_LEVEL_LOW_FB = 1,
+ XR_FOVEATION_LEVEL_MEDIUM_FB = 2,
+ XR_FOVEATION_LEVEL_HIGH_FB = 3,
+ XR_FOVEATION_LEVEL_MAX_ENUM_FB = 0x7FFFFFFF
+} XrFoveationLevelFB;
+
+typedef enum XrFoveationDynamicFB {
+ XR_FOVEATION_DYNAMIC_DISABLED_FB = 0,
+ XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB = 1,
+ XR_FOVEATION_DYNAMIC_MAX_ENUM_FB = 0x7FFFFFFF
+} XrFoveationDynamicFB;
+// XrFoveationLevelProfileCreateInfoFB extends XrFoveationProfileCreateInfoFB
+typedef struct XrFoveationLevelProfileCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrFoveationLevelFB level;
+ float verticalOffset;
+ XrFoveationDynamicFB dynamic;
+} XrFoveationLevelProfileCreateInfoFB;
+
+
+
+#define XR_FB_keyboard_tracking 1
+#define XR_FB_keyboard_tracking_SPEC_VERSION 1
+#define XR_FB_KEYBOARD_TRACKING_EXTENSION_NAME "XR_FB_keyboard_tracking"
+#define XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB 128
+typedef XrFlags64 XrKeyboardTrackingFlagsFB;
+
+// Flag bits for XrKeyboardTrackingFlagsFB
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_EXISTS_BIT_FB = 0x00000001;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_LOCAL_BIT_FB = 0x00000002;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_REMOTE_BIT_FB = 0x00000004;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB = 0x00000008;
+
+typedef XrFlags64 XrKeyboardTrackingQueryFlagsFB;
+
+// Flag bits for XrKeyboardTrackingQueryFlagsFB
+static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB = 0x00000002;
+static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB = 0x00000004;
+
+// XrSystemKeyboardTrackingPropertiesFB extends XrSystemProperties
+typedef struct XrSystemKeyboardTrackingPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsKeyboardTracking;
+} XrSystemKeyboardTrackingPropertiesFB;
+
+typedef struct XrKeyboardTrackingDescriptionFB {
+ uint64_t trackedKeyboardId;
+ XrVector3f size;
+ XrKeyboardTrackingFlagsFB flags;
+ char name[XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB];
+} XrKeyboardTrackingDescriptionFB;
+
+typedef struct XrKeyboardSpaceCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint64_t trackedKeyboardId;
+} XrKeyboardSpaceCreateInfoFB;
+
+typedef struct XrKeyboardTrackingQueryFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrKeyboardTrackingQueryFlagsFB flags;
+} XrKeyboardTrackingQueryFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrQuerySystemTrackedKeyboardFB)(XrSession session, const XrKeyboardTrackingQueryFB* queryInfo, XrKeyboardTrackingDescriptionFB* keyboard);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateKeyboardSpaceFB)(XrSession session, const XrKeyboardSpaceCreateInfoFB* createInfo, XrSpace* keyboardSpace);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrQuerySystemTrackedKeyboardFB(
+ XrSession session,
+ const XrKeyboardTrackingQueryFB* queryInfo,
+ XrKeyboardTrackingDescriptionFB* keyboard);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB(
+ XrSession session,
+ const XrKeyboardSpaceCreateInfoFB* createInfo,
+ XrSpace* keyboardSpace);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_triangle_mesh 1
+XR_DEFINE_HANDLE(XrTriangleMeshFB)
+#define XR_FB_triangle_mesh_SPEC_VERSION 1
+#define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh"
+
+typedef enum XrWindingOrderFB {
+ XR_WINDING_ORDER_UNKNOWN_FB = 0,
+ XR_WINDING_ORDER_CW_FB = 1,
+ XR_WINDING_ORDER_CCW_FB = 2,
+ XR_WINDING_ORDER_MAX_ENUM_FB = 0x7FFFFFFF
+} XrWindingOrderFB;
+typedef XrFlags64 XrTriangleMeshFlagsFB;
+
+// Flag bits for XrTriangleMeshFlagsFB
+static const XrTriangleMeshFlagsFB XR_TRIANGLE_MESH_MUTABLE_BIT_FB = 0x00000001;
+
+typedef struct XrTriangleMeshCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTriangleMeshFlagsFB flags;
+ XrWindingOrderFB windingOrder;
+ uint32_t vertexCount;
+ const XrVector3f* vertexBuffer;
+ uint32_t triangleCount;
+ const uint32_t* indexBuffer;
+} XrTriangleMeshCreateInfoFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateTriangleMeshFB)(XrSession session, const XrTriangleMeshCreateInfoFB* createInfo, XrTriangleMeshFB* outTriangleMesh);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyTriangleMeshFB)(XrTriangleMeshFB mesh);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetVertexBufferFB)(XrTriangleMeshFB mesh, XrVector3f** outVertexBuffer);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetIndexBufferFB)(XrTriangleMeshFB mesh, uint32_t** outIndexBuffer);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginUpdateFB)(XrTriangleMeshFB mesh);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndUpdateFB)(XrTriangleMeshFB mesh, uint32_t vertexCount, uint32_t triangleCount);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginVertexBufferUpdateFB)(XrTriangleMeshFB mesh, uint32_t* outVertexCount);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndVertexBufferUpdateFB)(XrTriangleMeshFB mesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateTriangleMeshFB(
+ XrSession session,
+ const XrTriangleMeshCreateInfoFB* createInfo,
+ XrTriangleMeshFB* outTriangleMesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyTriangleMeshFB(
+ XrTriangleMeshFB mesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetVertexBufferFB(
+ XrTriangleMeshFB mesh,
+ XrVector3f** outVertexBuffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetIndexBufferFB(
+ XrTriangleMeshFB mesh,
+ uint32_t** outIndexBuffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginUpdateFB(
+ XrTriangleMeshFB mesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndUpdateFB(
+ XrTriangleMeshFB mesh,
+ uint32_t vertexCount,
+ uint32_t triangleCount);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginVertexBufferUpdateFB(
+ XrTriangleMeshFB mesh,
+ uint32_t* outVertexCount);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB(
+ XrTriangleMeshFB mesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_passthrough 1
+XR_DEFINE_HANDLE(XrPassthroughFB)
+XR_DEFINE_HANDLE(XrPassthroughLayerFB)
+XR_DEFINE_HANDLE(XrGeometryInstanceFB)
+#define XR_FB_passthrough_SPEC_VERSION 1
+#define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough"
+#define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256
+
+typedef enum XrPassthroughLayerPurposeFB {
+ XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0,
+ XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1,
+ XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001,
+ XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrPassthroughLayerPurposeFB;
+typedef XrFlags64 XrPassthroughFlagsFB;
+
+// Flag bits for XrPassthroughFlagsFB
+static const XrPassthroughFlagsFB XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB = 0x00000001;
+
+typedef XrFlags64 XrPassthroughStateChangedFlagsFB;
+
+// Flag bits for XrPassthroughStateChangedFlagsFB
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB = 0x00000001;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB = 0x00000002;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB = 0x00000004;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB = 0x00000008;
+
+// XrSystemPassthroughPropertiesFB extends XrSystemProperties
+typedef struct XrSystemPassthroughPropertiesFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 supportsPassthrough;
+} XrSystemPassthroughPropertiesFB;
+
+typedef struct XrPassthroughCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughFlagsFB flags;
+} XrPassthroughCreateInfoFB;
+
+typedef struct XrPassthroughLayerCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughFB passthrough;
+ XrPassthroughFlagsFB flags;
+ XrPassthroughLayerPurposeFB purpose;
+} XrPassthroughLayerCreateInfoFB;
+
+// XrCompositionLayerPassthroughFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerPassthroughFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags flags;
+ XrSpace space;
+ XrPassthroughLayerFB layerHandle;
+} XrCompositionLayerPassthroughFB;
+
+typedef struct XrGeometryInstanceCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughLayerFB layer;
+ XrTriangleMeshFB mesh;
+ XrSpace baseSpace;
+ XrPosef pose;
+ XrVector3f scale;
+} XrGeometryInstanceCreateInfoFB;
+
+typedef struct XrGeometryInstanceTransformFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+ XrPosef pose;
+ XrVector3f scale;
+} XrGeometryInstanceTransformFB;
+
+typedef struct XrPassthroughStyleFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float textureOpacityFactor;
+ XrColor4f edgeColor;
+} XrPassthroughStyleFB;
+
+typedef struct XrPassthroughColorMapMonoToRgbaFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
+} XrPassthroughColorMapMonoToRgbaFB;
+
+typedef struct XrPassthroughColorMapMonoToMonoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
+} XrPassthroughColorMapMonoToMonoFB;
+
+typedef struct XrEventDataPassthroughStateChangedFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughStateChangedFlagsFB flags;
+} XrEventDataPassthroughStateChangedFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughFB)(XrSession session, const XrPassthroughCreateInfoFB* createInfo, XrPassthroughFB* outPassthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughStartFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughPauseFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughLayerFB)(XrSession session, const XrPassthroughLayerCreateInfoFB* createInfo, XrPassthroughLayerFB* outLayer);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughLayerFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerPauseFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerResumeFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetStyleFB)(XrPassthroughLayerFB layer, const XrPassthroughStyleFB* style);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateGeometryInstanceFB)(XrSession session, const XrGeometryInstanceCreateInfoFB* createInfo, XrGeometryInstanceFB* outGeometryInstance);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyGeometryInstanceFB)(XrGeometryInstanceFB instance);
+typedef XrResult (XRAPI_PTR *PFN_xrGeometryInstanceSetTransformFB)(XrGeometryInstanceFB instance, const XrGeometryInstanceTransformFB* transformation);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughFB(
+ XrSession session,
+ const XrPassthroughCreateInfoFB* createInfo,
+ XrPassthroughFB* outPassthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughStartFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughPauseFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughLayerFB(
+ XrSession session,
+ const XrPassthroughLayerCreateInfoFB* createInfo,
+ XrPassthroughLayerFB* outLayer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughLayerFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerPauseFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerResumeFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetStyleFB(
+ XrPassthroughLayerFB layer,
+ const XrPassthroughStyleFB* style);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateGeometryInstanceFB(
+ XrSession session,
+ const XrGeometryInstanceCreateInfoFB* createInfo,
+ XrGeometryInstanceFB* outGeometryInstance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyGeometryInstanceFB(
+ XrGeometryInstanceFB instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB(
+ XrGeometryInstanceFB instance,
+ const XrGeometryInstanceTransformFB* transformation);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_render_model 1
+
+#define XR_NULL_RENDER_MODEL_KEY_FB 0
+
+XR_DEFINE_ATOM(XrRenderModelKeyFB)
+#define XR_FB_render_model_SPEC_VERSION 1
+#define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model"
+#define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64
+typedef XrFlags64 XrRenderModelFlagsFB;
+
+// Flag bits for XrRenderModelFlagsFB
+
+typedef struct XrRenderModelPathInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath path;
+} XrRenderModelPathInfoFB;
+
+typedef struct XrRenderModelPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vendorId;
+ char modelName[XR_MAX_RENDER_MODEL_NAME_SIZE_FB];
+ XrRenderModelKeyFB modelKey;
+ uint32_t modelVersion;
+ XrRenderModelFlagsFB flags;
+} XrRenderModelPropertiesFB;
+
+typedef struct XrRenderModelBufferFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t bufferCapacityInput;
+ uint32_t bufferCountOutput;
+ uint8_t* buffer;
+} XrRenderModelBufferFB;
+
+typedef struct XrRenderModelLoadInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrRenderModelKeyFB modelKey;
+} XrRenderModelLoadInfoFB;
+
+// XrSystemRenderModelPropertiesFB extends XrSystemProperties
+typedef struct XrSystemRenderModelPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsRenderModelLoading;
+} XrSystemRenderModelPropertiesFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths);
+typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateRenderModelPathsFB(
+ XrSession session,
+ uint32_t pathCapacityInput,
+ uint32_t* pathCountOutput,
+ XrRenderModelPathInfoFB* paths);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetRenderModelPropertiesFB(
+ XrSession session,
+ XrPath path,
+ XrRenderModelPropertiesFB* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLoadRenderModelFB(
+ XrSession session,
+ const XrRenderModelLoadInfoFB* info,
+ XrRenderModelBufferFB* buffer);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_VARJO_foveated_rendering 1
+#define XR_VARJO_foveated_rendering_SPEC_VERSION 2
+#define XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME "XR_VARJO_foveated_rendering"
+// XrViewLocateFoveatedRenderingVARJO extends XrViewLocateInfo
+typedef struct XrViewLocateFoveatedRenderingVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 foveatedRenderingActive;
+} XrViewLocateFoveatedRenderingVARJO;
+
+// XrFoveatedViewConfigurationViewVARJO extends XrViewConfigurationView
+typedef struct XrFoveatedViewConfigurationViewVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 foveatedRenderingActive;
+} XrFoveatedViewConfigurationViewVARJO;
+
+// XrSystemFoveatedRenderingPropertiesVARJO extends XrSystemProperties
+typedef struct XrSystemFoveatedRenderingPropertiesVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsFoveatedRendering;
+} XrSystemFoveatedRenderingPropertiesVARJO;
+
+
+
+#define XR_VARJO_composition_layer_depth_test 1
+#define XR_VARJO_composition_layer_depth_test_SPEC_VERSION 2
+#define XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_VARJO_composition_layer_depth_test"
+// XrCompositionLayerDepthTestVARJO extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerDepthTestVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float depthTestRangeNearZ;
+ float depthTestRangeFarZ;
+} XrCompositionLayerDepthTestVARJO;
+
+
+
+#define XR_VARJO_environment_depth_estimation 1
+#define XR_VARJO_environment_depth_estimation_SPEC_VERSION 1
+#define XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME "XR_VARJO_environment_depth_estimation"
+typedef XrResult (XRAPI_PTR *PFN_xrSetEnvironmentDepthEstimationVARJO)(XrSession session, XrBool32 enabled);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetEnvironmentDepthEstimationVARJO(
+ XrSession session,
+ XrBool32 enabled);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_VARJO_marker_tracking 1
+#define XR_VARJO_marker_tracking_SPEC_VERSION 1
+#define XR_VARJO_MARKER_TRACKING_EXTENSION_NAME "XR_VARJO_marker_tracking"
+// XrSystemMarkerTrackingPropertiesVARJO extends XrSystemProperties
+typedef struct XrSystemMarkerTrackingPropertiesVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsMarkerTracking;
+} XrSystemMarkerTrackingPropertiesVARJO;
+
+typedef struct XrEventDataMarkerTrackingUpdateVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t markerId;
+ XrBool32 isActive;
+ XrBool32 isPredicted;
+ XrTime time;
+} XrEventDataMarkerTrackingUpdateVARJO;
+
+typedef struct XrMarkerSpaceCreateInfoVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t markerId;
+ XrPosef poseInMarkerSpace;
+} XrMarkerSpaceCreateInfoVARJO;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingVARJO)(XrSession session, XrBool32 enabled);
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingTimeoutVARJO)(XrSession session, uint64_t markerId, XrDuration timeout);
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingPredictionVARJO)(XrSession session, uint64_t markerId, XrBool32 enabled);
+typedef XrResult (XRAPI_PTR *PFN_xrGetMarkerSizeVARJO)(XrSession session, uint64_t markerId, XrExtent2Df* size);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateMarkerSpaceVARJO)(XrSession session, const XrMarkerSpaceCreateInfoVARJO* createInfo, XrSpace* space);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingVARJO(
+ XrSession session,
+ XrBool32 enabled);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingTimeoutVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrDuration timeout);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingPredictionVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrBool32 enabled);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetMarkerSizeVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrExtent2Df* size);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO(
+ XrSession session,
+ const XrMarkerSpaceCreateInfoVARJO* createInfo,
+ XrSpace* space);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_spatial_anchor_persistence 1
+XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT)
+#define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256
+#define XR_MSFT_spatial_anchor_persistence_SPEC_VERSION 2
+#define XR_MSFT_SPATIAL_ANCHOR_PERSISTENCE_EXTENSION_NAME "XR_MSFT_spatial_anchor_persistence"
+typedef struct XrSpatialAnchorPersistenceNameMSFT {
+ char name[XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT];
+} XrSpatialAnchorPersistenceNameMSFT;
+
+typedef struct XrSpatialAnchorPersistenceInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName;
+ XrSpatialAnchorMSFT spatialAnchor;
+} XrSpatialAnchorPersistenceInfoMSFT;
+
+typedef struct XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore;
+ XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName;
+} XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorStoreConnectionMSFT)(XrSession session, XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorStoreConnectionMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+typedef XrResult (XRAPI_PTR *PFN_xrPersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, uint32_t spatialAnchorNamesCapacityInput, uint32_t* spatialAnchorNamesCountOutput, XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPersistedNameMSFT)(XrSession session, const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, XrSpatialAnchorMSFT* spatialAnchor);
+typedef XrResult (XRAPI_PTR *PFN_xrUnpersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName);
+typedef XrResult (XRAPI_PTR *PFN_xrClearSpatialAnchorStoreMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorStoreConnectionMSFT(
+ XrSession session,
+ XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorStoreConnectionMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPersistSpatialAnchorMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePersistedSpatialAnchorNamesMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ uint32_t spatialAnchorNamesCapacityInput,
+ uint32_t* spatialAnchorNamesCountOutput,
+ XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPersistedNameMSFT(
+ XrSession session,
+ const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo,
+ XrSpatialAnchorMSFT* spatialAnchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrUnpersistSpatialAnchorMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_space_warp 1
+#define XR_FB_space_warp_SPEC_VERSION 1
+#define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp"
+typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB;
+
+// Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB
+
+// XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView
+typedef struct XrCompositionLayerSpaceWarpInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerSpaceWarpInfoFlagsFB layerFlags;
+ XrSwapchainSubImage motionVectorSubImage;
+ XrPosef appSpaceDeltaPose;
+ XrSwapchainSubImage depthSubImage;
+ float minDepth;
+ float maxDepth;
+ float nearZ;
+ float farZ;
+} XrCompositionLayerSpaceWarpInfoFB;
+
+// XrSystemSpaceWarpPropertiesFB extends XrSystemProperties
+typedef struct XrSystemSpaceWarpPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t recommendedMotionVectorImageRectWidth;
+ uint32_t recommendedMotionVectorImageRectHeight;
+} XrSystemSpaceWarpPropertiesFB;
+
+
+
+#define XR_ALMALENCE_digital_lens_control 1
+#define XR_ALMALENCE_digital_lens_control_SPEC_VERSION 1
+#define XR_ALMALENCE_DIGITAL_LENS_CONTROL_EXTENSION_NAME "XR_ALMALENCE_digital_lens_control"
+typedef XrFlags64 XrDigitalLensControlFlagsALMALENCE;
+
+// Flag bits for XrDigitalLensControlFlagsALMALENCE
+static const XrDigitalLensControlFlagsALMALENCE XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE = 0x00000001;
+
+typedef struct XrDigitalLensControlALMALENCE {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDigitalLensControlFlagsALMALENCE flags;
+} XrDigitalLensControlALMALENCE;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetDigitalLensControlALMALENCE)(XrSession session, const XrDigitalLensControlALMALENCE* digitalLensControl);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE(
+ XrSession session,
+ const XrDigitalLensControlALMALENCE* digitalLensControl);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_passthrough_keyboard_hands 1
+#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 1
+#define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands"
+typedef struct XrPassthroughKeyboardHandsIntensityFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float leftHandIntensity;
+ float rightHandIntensity;
+} XrPassthroughKeyboardHandsIntensityFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB)(XrPassthroughLayerFB layer, const XrPassthroughKeyboardHandsIntensityFB* intensity);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB(
+ XrPassthroughLayerFB layer,
+ const XrPassthroughKeyboardHandsIntensityFB* intensity);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_uuid 1
+#define XR_EXT_uuid_SPEC_VERSION 1
+#define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid"
+#define XR_UUID_SIZE_EXT 16
+typedef struct XrUuidEXT {
+ uint8_t data[XR_UUID_SIZE_EXT];
+} XrUuidEXT;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_platform.h b/thirdparty/openxr/include/openxr/openxr_platform.h
new file mode 100644
index 0000000000..eb5e5f8c4b
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_platform.h
@@ -0,0 +1,675 @@
+#ifndef OPENXR_PLATFORM_H_
+#define OPENXR_PLATFORM_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+#include "openxr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_thread_settings 1
+#define XR_KHR_android_thread_settings_SPEC_VERSION 5
+#define XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME "XR_KHR_android_thread_settings"
+
+typedef enum XrAndroidThreadTypeKHR {
+ XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR = 1,
+ XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR = 2,
+ XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR = 3,
+ XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR = 4,
+ XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} XrAndroidThreadTypeKHR;
+typedef XrResult (XRAPI_PTR *PFN_xrSetAndroidApplicationThreadKHR)(XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR(
+ XrSession session,
+ XrAndroidThreadTypeKHR threadType,
+ uint32_t threadId);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_surface_swapchain 1
+#define XR_KHR_android_surface_swapchain_SPEC_VERSION 4
+#define XR_KHR_ANDROID_SURFACE_SWAPCHAIN_EXTENSION_NAME "XR_KHR_android_surface_swapchain"
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchainAndroidSurfaceKHR)(XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR(
+ XrSession session,
+ const XrSwapchainCreateInfo* info,
+ XrSwapchain* swapchain,
+ jobject* surface);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_create_instance 1
+#define XR_KHR_android_create_instance_SPEC_VERSION 3
+#define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance"
+// XrInstanceCreateInfoAndroidKHR extends XrInstanceCreateInfo
+typedef struct XrInstanceCreateInfoAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ void* XR_MAY_ALIAS applicationVM;
+ void* XR_MAY_ALIAS applicationActivity;
+} XrInstanceCreateInfoAndroidKHR;
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_swapchain_format_list 1
+#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4
+#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list"
+typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewFormatCount;
+ const VkFormat* viewFormats;
+} XrVulkanSwapchainFormatListCreateInfoKHR;
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL
+
+#define XR_KHR_opengl_enable 1
+#define XR_KHR_opengl_enable_SPEC_VERSION 10
+#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable"
+#ifdef XR_USE_PLATFORM_WIN32
+// XrGraphicsBindingOpenGLWin32KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLWin32KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ HDC hDC;
+ HGLRC hGLRC;
+} XrGraphicsBindingOpenGLWin32KHR;
+#endif // XR_USE_PLATFORM_WIN32
+
+#ifdef XR_USE_PLATFORM_XLIB
+// XrGraphicsBindingOpenGLXlibKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLXlibKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ Display* xDisplay;
+ uint32_t visualid;
+ GLXFBConfig glxFBConfig;
+ GLXDrawable glxDrawable;
+ GLXContext glxContext;
+} XrGraphicsBindingOpenGLXlibKHR;
+#endif // XR_USE_PLATFORM_XLIB
+
+#ifdef XR_USE_PLATFORM_XCB
+// XrGraphicsBindingOpenGLXcbKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLXcbKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ xcb_connection_t* connection;
+ uint32_t screenNumber;
+ xcb_glx_fbconfig_t fbconfigid;
+ xcb_visualid_t visualid;
+ xcb_glx_drawable_t glxDrawable;
+ xcb_glx_context_t glxContext;
+} XrGraphicsBindingOpenGLXcbKHR;
+#endif // XR_USE_PLATFORM_XCB
+
+#ifdef XR_USE_PLATFORM_WAYLAND
+// XrGraphicsBindingOpenGLWaylandKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLWaylandKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ struct wl_display* display;
+} XrGraphicsBindingOpenGLWaylandKHR;
+#endif // XR_USE_PLATFORM_WAYLAND
+
+typedef struct XrSwapchainImageOpenGLKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t image;
+} XrSwapchainImageOpenGLKHR;
+
+typedef struct XrGraphicsRequirementsOpenGLKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsOpenGLKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_OPENGL */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+
+#define XR_KHR_opengl_es_enable 1
+#define XR_KHR_opengl_es_enable_SPEC_VERSION 8
+#define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable"
+#ifdef XR_USE_PLATFORM_ANDROID
+// XrGraphicsBindingOpenGLESAndroidKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLESAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ EGLDisplay display;
+ EGLConfig config;
+ EGLContext context;
+} XrGraphicsBindingOpenGLESAndroidKHR;
+#endif // XR_USE_PLATFORM_ANDROID
+
+typedef struct XrSwapchainImageOpenGLESKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t image;
+} XrSwapchainImageOpenGLESKHR;
+
+typedef struct XrGraphicsRequirementsOpenGLESKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsOpenGLESKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLESGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_enable 1
+#define XR_KHR_vulkan_enable_SPEC_VERSION 8
+#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable"
+// XrGraphicsBindingVulkanKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingVulkanKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ VkInstance instance;
+ VkPhysicalDevice physicalDevice;
+ VkDevice device;
+ uint32_t queueFamilyIndex;
+ uint32_t queueIndex;
+} XrGraphicsBindingVulkanKHR;
+
+typedef struct XrSwapchainImageVulkanKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkImage image;
+} XrSwapchainImageVulkanKHR;
+
+typedef struct XrGraphicsRequirementsVulkanKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsVulkanKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanInstanceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanDeviceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDeviceKHR)(XrInstance instance, XrSystemId systemId, VkInstance vkInstance, VkPhysicalDevice* vkPhysicalDevice);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanInstanceExtensionsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanDeviceExtensionsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDeviceKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ VkInstance vkInstance,
+ VkPhysicalDevice* vkPhysicalDevice);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_GRAPHICS_API_D3D11
+
+#define XR_KHR_D3D11_enable 1
+#define XR_KHR_D3D11_enable_SPEC_VERSION 8
+#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
+// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingD3D11KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ ID3D11Device* device;
+} XrGraphicsBindingD3D11KHR;
+
+typedef struct XrSwapchainImageD3D11KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ ID3D11Texture2D* texture;
+} XrSwapchainImageD3D11KHR;
+
+typedef struct XrGraphicsRequirementsD3D11KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
+} XrGraphicsRequirementsD3D11KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetD3D11GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_D3D11 */
+
+#ifdef XR_USE_GRAPHICS_API_D3D12
+
+#define XR_KHR_D3D12_enable 1
+#define XR_KHR_D3D12_enable_SPEC_VERSION 8
+#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable"
+// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingD3D12KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ ID3D12Device* device;
+ ID3D12CommandQueue* queue;
+} XrGraphicsBindingD3D12KHR;
+
+typedef struct XrSwapchainImageD3D12KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ ID3D12Resource* texture;
+} XrSwapchainImageD3D12KHR;
+
+typedef struct XrGraphicsRequirementsD3D12KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
+} XrGraphicsRequirementsD3D12KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetD3D12GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_D3D12 */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_KHR_win32_convert_performance_counter_time 1
+#define XR_KHR_win32_convert_performance_counter_time_SPEC_VERSION 1
+#define XR_KHR_WIN32_CONVERT_PERFORMANCE_COUNTER_TIME_EXTENSION_NAME "XR_KHR_win32_convert_performance_counter_time"
+typedef XrResult (XRAPI_PTR *PFN_xrConvertWin32PerformanceCounterToTimeKHR)(XrInstance instance, const LARGE_INTEGER* performanceCounter, XrTime* time);
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToWin32PerformanceCounterKHR)(XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertWin32PerformanceCounterToTimeKHR(
+ XrInstance instance,
+ const LARGE_INTEGER* performanceCounter,
+ XrTime* time);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR(
+ XrInstance instance,
+ XrTime time,
+ LARGE_INTEGER* performanceCounter);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_TIMESPEC
+
+#define XR_KHR_convert_timespec_time 1
+#define XR_KHR_convert_timespec_time_SPEC_VERSION 1
+#define XR_KHR_CONVERT_TIMESPEC_TIME_EXTENSION_NAME "XR_KHR_convert_timespec_time"
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimespecTimeToTimeKHR)(XrInstance instance, const struct timespec* timespecTime, XrTime* time);
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToTimespecTimeKHR)(XrInstance instance, XrTime time, struct timespec* timespecTime);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimespecTimeToTimeKHR(
+ XrInstance instance,
+ const struct timespec* timespecTime,
+ XrTime* time);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR(
+ XrInstance instance,
+ XrTime time,
+ struct timespec* timespecTime);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_TIMESPEC */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_loader_init_android 1
+#define XR_KHR_loader_init_android_SPEC_VERSION 1
+#define XR_KHR_LOADER_INIT_ANDROID_EXTENSION_NAME "XR_KHR_loader_init_android"
+typedef struct XrLoaderInitInfoAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ void* XR_MAY_ALIAS applicationVM;
+ void* XR_MAY_ALIAS applicationContext;
+} XrLoaderInitInfoAndroidKHR;
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_enable2 1
+#define XR_KHR_vulkan_enable2_SPEC_VERSION 2
+#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2"
+typedef XrFlags64 XrVulkanInstanceCreateFlagsKHR;
+
+// Flag bits for XrVulkanInstanceCreateFlagsKHR
+
+typedef XrFlags64 XrVulkanDeviceCreateFlagsKHR;
+
+// Flag bits for XrVulkanDeviceCreateFlagsKHR
+
+typedef struct XrVulkanInstanceCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ XrVulkanInstanceCreateFlagsKHR createFlags;
+ PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
+ const VkInstanceCreateInfo* vulkanCreateInfo;
+ const VkAllocationCallbacks* vulkanAllocator;
+} XrVulkanInstanceCreateInfoKHR;
+
+typedef struct XrVulkanDeviceCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ XrVulkanDeviceCreateFlagsKHR createFlags;
+ PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
+ VkPhysicalDevice vulkanPhysicalDevice;
+ const VkDeviceCreateInfo* vulkanCreateInfo;
+ const VkAllocationCallbacks* vulkanAllocator;
+} XrVulkanDeviceCreateInfoKHR;
+
+typedef XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkan2KHR;
+
+typedef struct XrVulkanGraphicsDeviceGetInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ VkInstance vulkanInstance;
+} XrVulkanGraphicsDeviceGetInfoKHR;
+
+typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR;
+
+typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanInstanceKHR(
+ XrInstance instance,
+ const XrVulkanInstanceCreateInfoKHR* createInfo,
+ VkInstance* vulkanInstance,
+ VkResult* vulkanResult);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanDeviceKHR(
+ XrInstance instance,
+ const XrVulkanDeviceCreateInfoKHR* createInfo,
+ VkDevice* vulkanDevice,
+ VkResult* vulkanResult);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDevice2KHR(
+ XrInstance instance,
+ const XrVulkanGraphicsDeviceGetInfoKHR* getInfo,
+ VkPhysicalDevice* vulkanPhysicalDevice);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_PLATFORM_EGL
+
+#define XR_MNDX_egl_enable 1
+#define XR_MNDX_egl_enable_SPEC_VERSION 1
+#define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable"
+// XrGraphicsBindingEGLMNDX extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingEGLMNDX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ PFNEGLGETPROCADDRESSPROC getProcAddress;
+ EGLDisplay display;
+ EGLConfig config;
+ EGLContext context;
+} XrGraphicsBindingEGLMNDX;
+
+#endif /* XR_USE_PLATFORM_EGL */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_MSFT_perception_anchor_interop 1
+#define XR_MSFT_perception_anchor_interop_SPEC_VERSION 1
+#define XR_MSFT_PERCEPTION_ANCHOR_INTEROP_EXTENSION_NAME "XR_MSFT_perception_anchor_interop"
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT)(XrSession session, IUnknown* perceptionAnchor, XrSpatialAnchorMSFT* anchor);
+typedef XrResult (XRAPI_PTR *PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)(XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPerceptionAnchorMSFT(
+ XrSession session,
+ IUnknown* perceptionAnchor,
+ XrSpatialAnchorMSFT* anchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
+ XrSession session,
+ XrSpatialAnchorMSFT anchor,
+ IUnknown** perceptionAnchor);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_MSFT_holographic_window_attachment 1
+#define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1
+#define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment"
+#ifdef XR_USE_PLATFORM_WIN32
+// XrHolographicWindowAttachmentMSFT extends XrSessionCreateInfo
+typedef struct XrHolographicWindowAttachmentMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ IUnknown* holographicSpace;
+ IUnknown* coreWindow;
+} XrHolographicWindowAttachmentMSFT;
+#endif // XR_USE_PLATFORM_WIN32
+
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_FB_android_surface_swapchain_create 1
+#define XR_FB_android_surface_swapchain_create_SPEC_VERSION 1
+#define XR_FB_ANDROID_SURFACE_SWAPCHAIN_CREATE_EXTENSION_NAME "XR_FB_android_surface_swapchain_create"
+typedef XrFlags64 XrAndroidSurfaceSwapchainFlagsFB;
+
+// Flag bits for XrAndroidSurfaceSwapchainFlagsFB
+static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB = 0x00000001;
+static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB = 0x00000002;
+
+#ifdef XR_USE_PLATFORM_ANDROID
+// XrAndroidSurfaceSwapchainCreateInfoFB extends XrSwapchainCreateInfo
+typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAndroidSurfaceSwapchainFlagsFB createFlags;
+} XrAndroidSurfaceSwapchainCreateInfoFB;
+#endif // XR_USE_PLATFORM_ANDROID
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_OCULUS_audio_device_guid 1
+#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1
+#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid"
+#define XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS 128
+typedef XrResult (XRAPI_PTR *PFN_xrGetAudioOutputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+typedef XrResult (XRAPI_PTR *PFN_xrGetAudioInputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioOutputDeviceGuidOculus(
+ XrInstance instance,
+ wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus(
+ XrInstance instance,
+ wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_FB_foveation_vulkan 1
+#define XR_FB_foveation_vulkan_SPEC_VERSION 1
+#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan"
+// XrSwapchainImageFoveationVulkanFB extends XrSwapchainImageVulkanKHR
+typedef struct XrSwapchainImageFoveationVulkanFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkImage image;
+ uint32_t width;
+ uint32_t height;
+} XrSwapchainImageFoveationVulkanFB;
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_FB_swapchain_update_state_android_surface 1
+#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface"
+#ifdef XR_USE_PLATFORM_ANDROID
+typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t width;
+ uint32_t height;
+} XrSwapchainStateAndroidSurfaceDimensionsFB;
+#endif // XR_USE_PLATFORM_ANDROID
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+
+#define XR_FB_swapchain_update_state_opengl_es 1
+#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es"
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+typedef struct XrSwapchainStateSamplerOpenGLESFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ EGLenum minFilter;
+ EGLenum magFilter;
+ EGLenum wrapModeS;
+ EGLenum wrapModeT;
+ EGLenum swizzleRed;
+ EGLenum swizzleGreen;
+ EGLenum swizzleBlue;
+ EGLenum swizzleAlpha;
+ float maxAnisotropy;
+ XrColor4f borderColor;
+} XrSwapchainStateSamplerOpenGLESFB;
+#endif // XR_USE_GRAPHICS_API_OPENGL_ES
+
+#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_FB_swapchain_update_state_vulkan 1
+#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan"
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+typedef struct XrSwapchainStateSamplerVulkanFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkFilter minFilter;
+ VkFilter magFilter;
+ VkSamplerMipmapMode mipmapMode;
+ VkSamplerAddressMode wrapModeS;
+ VkSamplerAddressMode wrapModeT;
+ VkComponentSwizzle swizzleRed;
+ VkComponentSwizzle swizzleGreen;
+ VkComponentSwizzle swizzleBlue;
+ VkComponentSwizzle swizzleAlpha;
+ float maxAnisotropy;
+ XrColor4f borderColor;
+} XrSwapchainStateSamplerVulkanFB;
+#endif // XR_USE_GRAPHICS_API_VULKAN
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_platform_defines.h b/thirdparty/openxr/include/openxr/openxr_platform_defines.h
new file mode 100644
index 0000000000..31fa05a0c8
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_platform_defines.h
@@ -0,0 +1,110 @@
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+#ifndef OPENXR_PLATFORM_DEFINES_H_
+#define OPENXR_PLATFORM_DEFINES_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Platform-specific calling convention macros.
+ *
+ * Platforms should define these so that OpenXR clients call OpenXR functions
+ * with the same calling conventions that the OpenXR implementation expects.
+ *
+ * XRAPI_ATTR - Placed before the return type in function declarations.
+ * Useful for C++11 and GCC/Clang-style function attribute syntax.
+ * XRAPI_CALL - Placed after the return type in function declarations.
+ * Useful for MSVC-style calling convention syntax.
+ * XRAPI_PTR - Placed between the '(' and '*' in function pointer types.
+ *
+ * Function declaration: XRAPI_ATTR void XRAPI_CALL xrFunction(void);
+ * Function pointer type: typedef void (XRAPI_PTR *PFN_xrFunction)(void);
+ */
+#if defined(_WIN32)
+#define XRAPI_ATTR
+// On Windows, functions use the stdcall convention
+#define XRAPI_CALL __stdcall
+#define XRAPI_PTR XRAPI_CALL
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
+#error "API not supported for the 'armeabi' NDK ABI"
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
+// On Android 32-bit ARM targets, functions use the "hardfloat"
+// calling convention, i.e. float parameters are passed in registers. This
+// is true even if the rest of the application passes floats on the stack,
+// as it does by default when compiling for the armeabi-v7a NDK ABI.
+#define XRAPI_ATTR __attribute__((pcs("aapcs-vfp")))
+#define XRAPI_CALL
+#define XRAPI_PTR XRAPI_ATTR
+#else
+// On other platforms, use the default calling convention
+#define XRAPI_ATTR
+#define XRAPI_CALL
+#define XRAPI_PTR
+#endif
+
+#include <stddef.h>
+
+#if !defined(XR_NO_STDINT_H)
+#if defined(_MSC_VER) && (_MSC_VER < 1600)
+typedef signed __int8 int8_t;
+typedef unsigned __int8 uint8_t;
+typedef signed __int16 int16_t;
+typedef unsigned __int16 uint16_t;
+typedef signed __int32 int32_t;
+typedef unsigned __int32 uint32_t;
+typedef signed __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <stdint.h>
+#endif
+#endif // !defined( XR_NO_STDINT_H )
+
+// XR_PTR_SIZE (in bytes)
+#if (defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__))
+#define XR_PTR_SIZE 8
+#else
+#define XR_PTR_SIZE 4
+#endif
+
+// Needed so we can use clang __has_feature portably.
+#if !defined(XR_COMPILER_HAS_FEATURE)
+#if defined(__clang__)
+#define XR_COMPILER_HAS_FEATURE(x) __has_feature(x)
+#else
+#define XR_COMPILER_HAS_FEATURE(x) 0
+#endif
+#endif
+
+// Identifies if the current compiler has C++11 support enabled.
+// Does not by itself identify if any given C++11 feature is present.
+#if !defined(XR_CPP11_ENABLED) && defined(__cplusplus)
+#if defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__)
+#define XR_CPP11_ENABLED 1
+#elif defined(_MSC_VER) && (_MSC_VER >= 1600)
+#define XR_CPP11_ENABLED 1
+#elif (__cplusplus >= 201103L) // 201103 is the first C++11 version.
+#define XR_CPP11_ENABLED 1
+#endif
+#endif
+
+// Identifies if the current compiler supports C++11 nullptr.
+#if !defined(XR_CPP_NULLPTR_SUPPORTED)
+#if defined(XR_CPP11_ENABLED) && \
+ ((defined(__clang__) && XR_COMPILER_HAS_FEATURE(cxx_nullptr)) || \
+ (defined(__GNUC__) && (((__GNUC__ * 1000) + __GNUC_MINOR__) >= 4006)) || \
+ (defined(_MSC_VER) && (_MSC_VER >= 1600)) || \
+ (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 403)))
+#define XR_CPP_NULLPTR_SUPPORTED 1
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_reflection.h b/thirdparty/openxr/include/openxr/openxr_reflection.h
new file mode 100644
index 0000000000..2bc14be600
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_reflection.h
@@ -0,0 +1,2746 @@
+#ifndef OPENXR_REFLECTION_H_
+#define OPENXR_REFLECTION_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+#include "openxr.h"
+
+/*
+This file contains expansion macros (X Macros) for OpenXR enumerations and structures.
+Example of how to use expansion macros to make an enum-to-string function:
+
+#define XR_ENUM_CASE_STR(name, val) case name: return #name;
+#define XR_ENUM_STR(enumType) \
+ constexpr const char* XrEnumStr(enumType e) { \
+ switch (e) { \
+ XR_LIST_ENUM_##enumType(XR_ENUM_CASE_STR) \
+ default: return "Unknown"; \
+ } \
+ } \
+
+XR_ENUM_STR(XrResult);
+*/
+
+#define XR_LIST_ENUM_XrResult(_) \
+ _(XR_SUCCESS, 0) \
+ _(XR_TIMEOUT_EXPIRED, 1) \
+ _(XR_SESSION_LOSS_PENDING, 3) \
+ _(XR_EVENT_UNAVAILABLE, 4) \
+ _(XR_SPACE_BOUNDS_UNAVAILABLE, 7) \
+ _(XR_SESSION_NOT_FOCUSED, 8) \
+ _(XR_FRAME_DISCARDED, 9) \
+ _(XR_ERROR_VALIDATION_FAILURE, -1) \
+ _(XR_ERROR_RUNTIME_FAILURE, -2) \
+ _(XR_ERROR_OUT_OF_MEMORY, -3) \
+ _(XR_ERROR_API_VERSION_UNSUPPORTED, -4) \
+ _(XR_ERROR_INITIALIZATION_FAILED, -6) \
+ _(XR_ERROR_FUNCTION_UNSUPPORTED, -7) \
+ _(XR_ERROR_FEATURE_UNSUPPORTED, -8) \
+ _(XR_ERROR_EXTENSION_NOT_PRESENT, -9) \
+ _(XR_ERROR_LIMIT_REACHED, -10) \
+ _(XR_ERROR_SIZE_INSUFFICIENT, -11) \
+ _(XR_ERROR_HANDLE_INVALID, -12) \
+ _(XR_ERROR_INSTANCE_LOST, -13) \
+ _(XR_ERROR_SESSION_RUNNING, -14) \
+ _(XR_ERROR_SESSION_NOT_RUNNING, -16) \
+ _(XR_ERROR_SESSION_LOST, -17) \
+ _(XR_ERROR_SYSTEM_INVALID, -18) \
+ _(XR_ERROR_PATH_INVALID, -19) \
+ _(XR_ERROR_PATH_COUNT_EXCEEDED, -20) \
+ _(XR_ERROR_PATH_FORMAT_INVALID, -21) \
+ _(XR_ERROR_PATH_UNSUPPORTED, -22) \
+ _(XR_ERROR_LAYER_INVALID, -23) \
+ _(XR_ERROR_LAYER_LIMIT_EXCEEDED, -24) \
+ _(XR_ERROR_SWAPCHAIN_RECT_INVALID, -25) \
+ _(XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED, -26) \
+ _(XR_ERROR_ACTION_TYPE_MISMATCH, -27) \
+ _(XR_ERROR_SESSION_NOT_READY, -28) \
+ _(XR_ERROR_SESSION_NOT_STOPPING, -29) \
+ _(XR_ERROR_TIME_INVALID, -30) \
+ _(XR_ERROR_REFERENCE_SPACE_UNSUPPORTED, -31) \
+ _(XR_ERROR_FILE_ACCESS_ERROR, -32) \
+ _(XR_ERROR_FILE_CONTENTS_INVALID, -33) \
+ _(XR_ERROR_FORM_FACTOR_UNSUPPORTED, -34) \
+ _(XR_ERROR_FORM_FACTOR_UNAVAILABLE, -35) \
+ _(XR_ERROR_API_LAYER_NOT_PRESENT, -36) \
+ _(XR_ERROR_CALL_ORDER_INVALID, -37) \
+ _(XR_ERROR_GRAPHICS_DEVICE_INVALID, -38) \
+ _(XR_ERROR_POSE_INVALID, -39) \
+ _(XR_ERROR_INDEX_OUT_OF_RANGE, -40) \
+ _(XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, -41) \
+ _(XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED, -42) \
+ _(XR_ERROR_NAME_DUPLICATED, -44) \
+ _(XR_ERROR_NAME_INVALID, -45) \
+ _(XR_ERROR_ACTIONSET_NOT_ATTACHED, -46) \
+ _(XR_ERROR_ACTIONSETS_ALREADY_ATTACHED, -47) \
+ _(XR_ERROR_LOCALIZED_NAME_DUPLICATED, -48) \
+ _(XR_ERROR_LOCALIZED_NAME_INVALID, -49) \
+ _(XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, -50) \
+ _(XR_ERROR_RUNTIME_UNAVAILABLE, -51) \
+ _(XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR, -1000003000) \
+ _(XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR, -1000003001) \
+ _(XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT, -1000039001) \
+ _(XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT, -1000053000) \
+ _(XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT, -1000055000) \
+ _(XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT, -1000066000) \
+ _(XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT, -1000097000) \
+ _(XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT, -1000097001) \
+ _(XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT, -1000097002) \
+ _(XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT, -1000097003) \
+ _(XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT, -1000097004) \
+ _(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \
+ _(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \
+ _(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \
+ _(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \
+ _(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \
+ _(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \
+ _(XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB, -1000118003) \
+ _(XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB, -1000118004) \
+ _(XR_ERROR_UNKNOWN_PASSTHROUGH_FB, -1000118050) \
+ _(XR_ERROR_RENDER_MODEL_KEY_INVALID_FB, -1000119000) \
+ _(XR_RENDER_MODEL_UNAVAILABLE_FB, 1000119020) \
+ _(XR_ERROR_MARKER_NOT_TRACKED_VARJO, -1000124000) \
+ _(XR_ERROR_MARKER_ID_INVALID_VARJO, -1000124001) \
+ _(XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT, -1000142001) \
+ _(XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT, -1000142002) \
+ _(XR_RESULT_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrStructureType(_) \
+ _(XR_TYPE_UNKNOWN, 0) \
+ _(XR_TYPE_API_LAYER_PROPERTIES, 1) \
+ _(XR_TYPE_EXTENSION_PROPERTIES, 2) \
+ _(XR_TYPE_INSTANCE_CREATE_INFO, 3) \
+ _(XR_TYPE_SYSTEM_GET_INFO, 4) \
+ _(XR_TYPE_SYSTEM_PROPERTIES, 5) \
+ _(XR_TYPE_VIEW_LOCATE_INFO, 6) \
+ _(XR_TYPE_VIEW, 7) \
+ _(XR_TYPE_SESSION_CREATE_INFO, 8) \
+ _(XR_TYPE_SWAPCHAIN_CREATE_INFO, 9) \
+ _(XR_TYPE_SESSION_BEGIN_INFO, 10) \
+ _(XR_TYPE_VIEW_STATE, 11) \
+ _(XR_TYPE_FRAME_END_INFO, 12) \
+ _(XR_TYPE_HAPTIC_VIBRATION, 13) \
+ _(XR_TYPE_EVENT_DATA_BUFFER, 16) \
+ _(XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, 17) \
+ _(XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, 18) \
+ _(XR_TYPE_ACTION_STATE_BOOLEAN, 23) \
+ _(XR_TYPE_ACTION_STATE_FLOAT, 24) \
+ _(XR_TYPE_ACTION_STATE_VECTOR2F, 25) \
+ _(XR_TYPE_ACTION_STATE_POSE, 27) \
+ _(XR_TYPE_ACTION_SET_CREATE_INFO, 28) \
+ _(XR_TYPE_ACTION_CREATE_INFO, 29) \
+ _(XR_TYPE_INSTANCE_PROPERTIES, 32) \
+ _(XR_TYPE_FRAME_WAIT_INFO, 33) \
+ _(XR_TYPE_COMPOSITION_LAYER_PROJECTION, 35) \
+ _(XR_TYPE_COMPOSITION_LAYER_QUAD, 36) \
+ _(XR_TYPE_REFERENCE_SPACE_CREATE_INFO, 37) \
+ _(XR_TYPE_ACTION_SPACE_CREATE_INFO, 38) \
+ _(XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, 40) \
+ _(XR_TYPE_VIEW_CONFIGURATION_VIEW, 41) \
+ _(XR_TYPE_SPACE_LOCATION, 42) \
+ _(XR_TYPE_SPACE_VELOCITY, 43) \
+ _(XR_TYPE_FRAME_STATE, 44) \
+ _(XR_TYPE_VIEW_CONFIGURATION_PROPERTIES, 45) \
+ _(XR_TYPE_FRAME_BEGIN_INFO, 46) \
+ _(XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, 48) \
+ _(XR_TYPE_EVENT_DATA_EVENTS_LOST, 49) \
+ _(XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, 51) \
+ _(XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, 52) \
+ _(XR_TYPE_INTERACTION_PROFILE_STATE, 53) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, 55) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, 56) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, 57) \
+ _(XR_TYPE_ACTION_STATE_GET_INFO, 58) \
+ _(XR_TYPE_HAPTIC_ACTION_INFO, 59) \
+ _(XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, 60) \
+ _(XR_TYPE_ACTIONS_SYNC_INFO, 61) \
+ _(XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO, 62) \
+ _(XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO, 63) \
+ _(XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, 1000006000) \
+ _(XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR, 1000008000) \
+ _(XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, 1000010000) \
+ _(XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR, 1000014000) \
+ _(XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, 1000015000) \
+ _(XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, 1000017000) \
+ _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, 1000018000) \
+ _(XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, 1000019000) \
+ _(XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, 1000019001) \
+ _(XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, 1000019002) \
+ _(XR_TYPE_DEBUG_UTILS_LABEL_EXT, 1000019003) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, 1000023000) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, 1000023001) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR, 1000023002) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR, 1000023003) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, 1000023004) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR, 1000023005) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, 1000024001) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, 1000024002) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR, 1000024003) \
+ _(XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, 1000025000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, 1000025001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, 1000025002) \
+ _(XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, 1000027000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, 1000027001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR, 1000027002) \
+ _(XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, 1000028000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, 1000028001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR, 1000028002) \
+ _(XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT, 1000030000) \
+ _(XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT, 1000030001) \
+ _(XR_TYPE_VISIBILITY_MASK_KHR, 1000031000) \
+ _(XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, 1000031001) \
+ _(XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX, 1000033000) \
+ _(XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX, 1000033003) \
+ _(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR, 1000034000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, 1000039000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, 1000039001) \
+ _(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB, 1000040000) \
+ _(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB, 1000041001) \
+ _(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \
+ _(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \
+ _(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \
+ _(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \
+ _(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \
+ _(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \
+ _(XR_TYPE_HAND_JOINT_LOCATIONS_EXT, 1000051003) \
+ _(XR_TYPE_HAND_JOINT_VELOCITIES_EXT, 1000051004) \
+ _(XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT, 1000052000) \
+ _(XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT, 1000052001) \
+ _(XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT, 1000052002) \
+ _(XR_TYPE_HAND_MESH_MSFT, 1000052003) \
+ _(XR_TYPE_HAND_POSE_TYPE_INFO_MSFT, 1000052004) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT, 1000053000) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT, 1000053001) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT, 1000053002) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT, 1000053003) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT, 1000053004) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT, 1000053005) \
+ _(XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT, 1000055000) \
+ _(XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT, 1000055001) \
+ _(XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT, 1000055002) \
+ _(XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT, 1000055003) \
+ _(XR_TYPE_CONTROLLER_MODEL_STATE_MSFT, 1000055004) \
+ _(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, 1000059000) \
+ _(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT, 1000063000) \
+ _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT, 1000066000) \
+ _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \
+ _(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \
+ _(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \
+ _(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \
+ _(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \
+ _(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \
+ _(XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, 1000090000) \
+ _(XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, 1000090001) \
+ _(XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, 1000090003) \
+ _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR, 1000091000) \
+ _(XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT, 1000097000) \
+ _(XR_TYPE_SCENE_CREATE_INFO_MSFT, 1000097001) \
+ _(XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT, 1000097002) \
+ _(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT, 1000097003) \
+ _(XR_TYPE_SCENE_COMPONENTS_MSFT, 1000097004) \
+ _(XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT, 1000097005) \
+ _(XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT, 1000097006) \
+ _(XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT, 1000097007) \
+ _(XR_TYPE_SCENE_OBJECTS_MSFT, 1000097008) \
+ _(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT, 1000097009) \
+ _(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT, 1000097010) \
+ _(XR_TYPE_SCENE_PLANES_MSFT, 1000097011) \
+ _(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT, 1000097012) \
+ _(XR_TYPE_SCENE_MESHES_MSFT, 1000097013) \
+ _(XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT, 1000097014) \
+ _(XR_TYPE_SCENE_MESH_BUFFERS_MSFT, 1000097015) \
+ _(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT, 1000097016) \
+ _(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT, 1000097017) \
+ _(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT, 1000097018) \
+ _(XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT, 1000098000) \
+ _(XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT, 1000098001) \
+ _(XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB, 1000101000) \
+ _(XR_TYPE_VIVE_TRACKER_PATHS_HTCX, 1000103000) \
+ _(XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX, 1000103001) \
+ _(XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC, 1000104000) \
+ _(XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC, 1000104001) \
+ _(XR_TYPE_FACIAL_EXPRESSIONS_HTC, 1000104002) \
+ _(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB, 1000108000) \
+ _(XR_TYPE_HAND_TRACKING_MESH_FB, 1000110001) \
+ _(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \
+ _(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \
+ _(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \
+ _(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \
+ _(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \
+ _(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \
+ _(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB, 1000115000) \
+ _(XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB, 1000116009) \
+ _(XR_TYPE_KEYBOARD_TRACKING_QUERY_FB, 1000116004) \
+ _(XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB, 1000116002) \
+ _(XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB, 1000117001) \
+ _(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB, 1000118000) \
+ _(XR_TYPE_PASSTHROUGH_CREATE_INFO_FB, 1000118001) \
+ _(XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB, 1000118002) \
+ _(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB, 1000118003) \
+ _(XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB, 1000118004) \
+ _(XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB, 1000118005) \
+ _(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \
+ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \
+ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \
+ _(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \
+ _(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \
+ _(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \
+ _(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \
+ _(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \
+ _(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \
+ _(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \
+ _(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \
+ _(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \
+ _(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO, 1000121002) \
+ _(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO, 1000122000) \
+ _(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO, 1000124000) \
+ _(XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO, 1000124001) \
+ _(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \
+ _(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB, 1000163000) \
+ _(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \
+ _(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \
+ _(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \
+ _(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \
+ _(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFormFactor(_) \
+ _(XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY, 1) \
+ _(XR_FORM_FACTOR_HANDHELD_DISPLAY, 2) \
+ _(XR_FORM_FACTOR_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrViewConfigurationType(_) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO, 1) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO, 2) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO, 1000037000) \
+ _(XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT, 1000054000) \
+ _(XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEnvironmentBlendMode(_) \
+ _(XR_ENVIRONMENT_BLEND_MODE_OPAQUE, 1) \
+ _(XR_ENVIRONMENT_BLEND_MODE_ADDITIVE, 2) \
+ _(XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND, 3) \
+ _(XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrReferenceSpaceType(_) \
+ _(XR_REFERENCE_SPACE_TYPE_VIEW, 1) \
+ _(XR_REFERENCE_SPACE_TYPE_LOCAL, 2) \
+ _(XR_REFERENCE_SPACE_TYPE_STAGE, 3) \
+ _(XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT, 1000038000) \
+ _(XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO, 1000121000) \
+ _(XR_REFERENCE_SPACE_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrActionType(_) \
+ _(XR_ACTION_TYPE_BOOLEAN_INPUT, 1) \
+ _(XR_ACTION_TYPE_FLOAT_INPUT, 2) \
+ _(XR_ACTION_TYPE_VECTOR2F_INPUT, 3) \
+ _(XR_ACTION_TYPE_POSE_INPUT, 4) \
+ _(XR_ACTION_TYPE_VIBRATION_OUTPUT, 100) \
+ _(XR_ACTION_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEyeVisibility(_) \
+ _(XR_EYE_VISIBILITY_BOTH, 0) \
+ _(XR_EYE_VISIBILITY_LEFT, 1) \
+ _(XR_EYE_VISIBILITY_RIGHT, 2) \
+ _(XR_EYE_VISIBILITY_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSessionState(_) \
+ _(XR_SESSION_STATE_UNKNOWN, 0) \
+ _(XR_SESSION_STATE_IDLE, 1) \
+ _(XR_SESSION_STATE_READY, 2) \
+ _(XR_SESSION_STATE_SYNCHRONIZED, 3) \
+ _(XR_SESSION_STATE_VISIBLE, 4) \
+ _(XR_SESSION_STATE_FOCUSED, 5) \
+ _(XR_SESSION_STATE_STOPPING, 6) \
+ _(XR_SESSION_STATE_LOSS_PENDING, 7) \
+ _(XR_SESSION_STATE_EXITING, 8) \
+ _(XR_SESSION_STATE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrObjectType(_) \
+ _(XR_OBJECT_TYPE_UNKNOWN, 0) \
+ _(XR_OBJECT_TYPE_INSTANCE, 1) \
+ _(XR_OBJECT_TYPE_SESSION, 2) \
+ _(XR_OBJECT_TYPE_SWAPCHAIN, 3) \
+ _(XR_OBJECT_TYPE_SPACE, 4) \
+ _(XR_OBJECT_TYPE_ACTION_SET, 5) \
+ _(XR_OBJECT_TYPE_ACTION, 6) \
+ _(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \
+ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \
+ _(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \
+ _(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \
+ _(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \
+ _(XR_OBJECT_TYPE_FACIAL_TRACKER_HTC, 1000104000) \
+ _(XR_OBJECT_TYPE_FOVEATION_PROFILE_FB, 1000114000) \
+ _(XR_OBJECT_TYPE_TRIANGLE_MESH_FB, 1000117000) \
+ _(XR_OBJECT_TYPE_PASSTHROUGH_FB, 1000118000) \
+ _(XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB, 1000118002) \
+ _(XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB, 1000118004) \
+ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT, 1000142000) \
+ _(XR_OBJECT_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrAndroidThreadTypeKHR(_) \
+ _(XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR, 1) \
+ _(XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR, 2) \
+ _(XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR, 3) \
+ _(XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR, 4) \
+ _(XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrVisibilityMaskTypeKHR(_) \
+ _(XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR, 1) \
+ _(XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR, 2) \
+ _(XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR, 3) \
+ _(XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsDomainEXT(_) \
+ _(XR_PERF_SETTINGS_DOMAIN_CPU_EXT, 1) \
+ _(XR_PERF_SETTINGS_DOMAIN_GPU_EXT, 2) \
+ _(XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsSubDomainEXT(_) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT, 1) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT, 2) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT, 3) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsLevelEXT(_) \
+ _(XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT, 0) \
+ _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT, 25) \
+ _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT, 50) \
+ _(XR_PERF_SETTINGS_LEVEL_BOOST_EXT, 75) \
+ _(XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsNotificationLevelEXT(_) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT, 0) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT, 25) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT, 75) \
+ _(XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrBlendFactorFB(_) \
+ _(XR_BLEND_FACTOR_ZERO_FB, 0) \
+ _(XR_BLEND_FACTOR_ONE_FB, 1) \
+ _(XR_BLEND_FACTOR_SRC_ALPHA_FB, 2) \
+ _(XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB, 3) \
+ _(XR_BLEND_FACTOR_DST_ALPHA_FB, 4) \
+ _(XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB, 5) \
+ _(XR_BLEND_FACTOR_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSpatialGraphNodeTypeMSFT(_) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT, 1) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT, 2) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandEXT(_) \
+ _(XR_HAND_LEFT_EXT, 1) \
+ _(XR_HAND_RIGHT_EXT, 2) \
+ _(XR_HAND_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointEXT(_) \
+ _(XR_HAND_JOINT_PALM_EXT, 0) \
+ _(XR_HAND_JOINT_WRIST_EXT, 1) \
+ _(XR_HAND_JOINT_THUMB_METACARPAL_EXT, 2) \
+ _(XR_HAND_JOINT_THUMB_PROXIMAL_EXT, 3) \
+ _(XR_HAND_JOINT_THUMB_DISTAL_EXT, 4) \
+ _(XR_HAND_JOINT_THUMB_TIP_EXT, 5) \
+ _(XR_HAND_JOINT_INDEX_METACARPAL_EXT, 6) \
+ _(XR_HAND_JOINT_INDEX_PROXIMAL_EXT, 7) \
+ _(XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT, 8) \
+ _(XR_HAND_JOINT_INDEX_DISTAL_EXT, 9) \
+ _(XR_HAND_JOINT_INDEX_TIP_EXT, 10) \
+ _(XR_HAND_JOINT_MIDDLE_METACARPAL_EXT, 11) \
+ _(XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT, 12) \
+ _(XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT, 13) \
+ _(XR_HAND_JOINT_MIDDLE_DISTAL_EXT, 14) \
+ _(XR_HAND_JOINT_MIDDLE_TIP_EXT, 15) \
+ _(XR_HAND_JOINT_RING_METACARPAL_EXT, 16) \
+ _(XR_HAND_JOINT_RING_PROXIMAL_EXT, 17) \
+ _(XR_HAND_JOINT_RING_INTERMEDIATE_EXT, 18) \
+ _(XR_HAND_JOINT_RING_DISTAL_EXT, 19) \
+ _(XR_HAND_JOINT_RING_TIP_EXT, 20) \
+ _(XR_HAND_JOINT_LITTLE_METACARPAL_EXT, 21) \
+ _(XR_HAND_JOINT_LITTLE_PROXIMAL_EXT, 22) \
+ _(XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT, 23) \
+ _(XR_HAND_JOINT_LITTLE_DISTAL_EXT, 24) \
+ _(XR_HAND_JOINT_LITTLE_TIP_EXT, 25) \
+ _(XR_HAND_JOINT_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointSetEXT(_) \
+ _(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \
+ _(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \
+ _(XR_HAND_POSE_TYPE_TRACKED_MSFT, 0) \
+ _(XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT, 1) \
+ _(XR_HAND_POSE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrReprojectionModeMSFT(_) \
+ _(XR_REPROJECTION_MODE_DEPTH_MSFT, 1) \
+ _(XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT, 2) \
+ _(XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT, 3) \
+ _(XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT, 4) \
+ _(XR_REPROJECTION_MODE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointsMotionRangeEXT(_) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT, 1) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT, 2) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeFeatureMSFT(_) \
+ _(XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT, 4) \
+ _(XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT, 1000098000) \
+ _(XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeConsistencyMSFT(_) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrMeshComputeLodMSFT(_) \
+ _(XR_MESH_COMPUTE_LOD_COARSE_MSFT, 1) \
+ _(XR_MESH_COMPUTE_LOD_MEDIUM_MSFT, 2) \
+ _(XR_MESH_COMPUTE_LOD_FINE_MSFT, 3) \
+ _(XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT, 4) \
+ _(XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComponentTypeMSFT(_) \
+ _(XR_SCENE_COMPONENT_TYPE_INVALID_MSFT, -1) \
+ _(XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT, 1) \
+ _(XR_SCENE_COMPONENT_TYPE_PLANE_MSFT, 2) \
+ _(XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT, 3) \
+ _(XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT, 4) \
+ _(XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT, 1000098000) \
+ _(XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneObjectTypeMSFT(_) \
+ _(XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT, -1) \
+ _(XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT, 1) \
+ _(XR_SCENE_OBJECT_TYPE_WALL_MSFT, 2) \
+ _(XR_SCENE_OBJECT_TYPE_FLOOR_MSFT, 3) \
+ _(XR_SCENE_OBJECT_TYPE_CEILING_MSFT, 4) \
+ _(XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT, 5) \
+ _(XR_SCENE_OBJECT_TYPE_INFERRED_MSFT, 6) \
+ _(XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrScenePlaneAlignmentTypeMSFT(_) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT, 0) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT, 1) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT, 2) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeStateMSFT(_) \
+ _(XR_SCENE_COMPUTE_STATE_NONE_MSFT, 0) \
+ _(XR_SCENE_COMPUTE_STATE_UPDATING_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEyeExpressionHTC(_) \
+ _(XR_EYE_EXPRESSION_LEFT_BLINK_HTC, 0) \
+ _(XR_EYE_EXPRESSION_LEFT_WIDE_HTC, 1) \
+ _(XR_EYE_EXPRESSION_RIGHT_BLINK_HTC, 2) \
+ _(XR_EYE_EXPRESSION_RIGHT_WIDE_HTC, 3) \
+ _(XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC, 4) \
+ _(XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC, 5) \
+ _(XR_EYE_EXPRESSION_LEFT_DOWN_HTC, 6) \
+ _(XR_EYE_EXPRESSION_RIGHT_DOWN_HTC, 7) \
+ _(XR_EYE_EXPRESSION_LEFT_OUT_HTC, 8) \
+ _(XR_EYE_EXPRESSION_RIGHT_IN_HTC, 9) \
+ _(XR_EYE_EXPRESSION_LEFT_IN_HTC, 10) \
+ _(XR_EYE_EXPRESSION_RIGHT_OUT_HTC, 11) \
+ _(XR_EYE_EXPRESSION_LEFT_UP_HTC, 12) \
+ _(XR_EYE_EXPRESSION_RIGHT_UP_HTC, 13) \
+ _(XR_EYE_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrLipExpressionHTC(_) \
+ _(XR_LIP_EXPRESSION_JAW_RIGHT_HTC, 0) \
+ _(XR_LIP_EXPRESSION_JAW_LEFT_HTC, 1) \
+ _(XR_LIP_EXPRESSION_JAW_FORWARD_HTC, 2) \
+ _(XR_LIP_EXPRESSION_JAW_OPEN_HTC, 3) \
+ _(XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC, 4) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC, 5) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC, 6) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC, 7) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC, 8) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC, 9) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC, 10) \
+ _(XR_LIP_EXPRESSION_MOUTH_POUT_HTC, 11) \
+ _(XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC, 12) \
+ _(XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC, 13) \
+ _(XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC, 14) \
+ _(XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC, 15) \
+ _(XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC, 16) \
+ _(XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC, 17) \
+ _(XR_LIP_EXPRESSION_CHEEK_SUCK_HTC, 18) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC, 19) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC, 20) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC, 21) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC, 22) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC, 23) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC, 24) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC, 25) \
+ _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC, 26) \
+ _(XR_LIP_EXPRESSION_TONGUE_LEFT_HTC, 27) \
+ _(XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC, 28) \
+ _(XR_LIP_EXPRESSION_TONGUE_UP_HTC, 29) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWN_HTC, 30) \
+ _(XR_LIP_EXPRESSION_TONGUE_ROLL_HTC, 31) \
+ _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC, 32) \
+ _(XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC, 33) \
+ _(XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC, 34) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC, 35) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC, 36) \
+ _(XR_LIP_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFacialTrackingTypeHTC(_) \
+ _(XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC, 1) \
+ _(XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC, 2) \
+ _(XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrColorSpaceFB(_) \
+ _(XR_COLOR_SPACE_UNMANAGED_FB, 0) \
+ _(XR_COLOR_SPACE_REC2020_FB, 1) \
+ _(XR_COLOR_SPACE_REC709_FB, 2) \
+ _(XR_COLOR_SPACE_RIFT_CV1_FB, 3) \
+ _(XR_COLOR_SPACE_RIFT_S_FB, 4) \
+ _(XR_COLOR_SPACE_QUEST_FB, 5) \
+ _(XR_COLOR_SPACE_P3_FB, 6) \
+ _(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \
+ _(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFoveationLevelFB(_) \
+ _(XR_FOVEATION_LEVEL_NONE_FB, 0) \
+ _(XR_FOVEATION_LEVEL_LOW_FB, 1) \
+ _(XR_FOVEATION_LEVEL_MEDIUM_FB, 2) \
+ _(XR_FOVEATION_LEVEL_HIGH_FB, 3) \
+ _(XR_FOVEATION_LEVEL_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFoveationDynamicFB(_) \
+ _(XR_FOVEATION_DYNAMIC_DISABLED_FB, 0) \
+ _(XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB, 1) \
+ _(XR_FOVEATION_DYNAMIC_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrWindingOrderFB(_) \
+ _(XR_WINDING_ORDER_UNKNOWN_FB, 0) \
+ _(XR_WINDING_ORDER_CW_FB, 1) \
+ _(XR_WINDING_ORDER_CCW_FB, 2) \
+ _(XR_WINDING_ORDER_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPassthroughLayerPurposeFB(_) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_BITS_XrInstanceCreateFlags(_)
+
+#define XR_LIST_BITS_XrSessionCreateFlags(_)
+
+#define XR_LIST_BITS_XrSpaceVelocityFlags(_) \
+ _(XR_SPACE_VELOCITY_LINEAR_VALID_BIT, 0x00000001) \
+ _(XR_SPACE_VELOCITY_ANGULAR_VALID_BIT, 0x00000002) \
+
+#define XR_LIST_BITS_XrSpaceLocationFlags(_) \
+ _(XR_SPACE_LOCATION_ORIENTATION_VALID_BIT, 0x00000001) \
+ _(XR_SPACE_LOCATION_POSITION_VALID_BIT, 0x00000002) \
+ _(XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT, 0x00000004) \
+ _(XR_SPACE_LOCATION_POSITION_TRACKED_BIT, 0x00000008) \
+
+#define XR_LIST_BITS_XrSwapchainCreateFlags(_) \
+ _(XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT, 0x00000001) \
+ _(XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT, 0x00000002) \
+
+#define XR_LIST_BITS_XrSwapchainUsageFlags(_) \
+ _(XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, 0x00000001) \
+ _(XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, 0x00000002) \
+ _(XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT, 0x00000004) \
+ _(XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT, 0x00000008) \
+ _(XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT, 0x00000010) \
+ _(XR_SWAPCHAIN_USAGE_SAMPLED_BIT, 0x00000020) \
+ _(XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, 0x00000040) \
+ _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND, 0x00000080) \
+ _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND) \
+
+#define XR_LIST_BITS_XrCompositionLayerFlags(_) \
+ _(XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT, 0x00000001) \
+ _(XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT, 0x00000002) \
+ _(XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT, 0x00000004) \
+
+#define XR_LIST_BITS_XrViewStateFlags(_) \
+ _(XR_VIEW_STATE_ORIENTATION_VALID_BIT, 0x00000001) \
+ _(XR_VIEW_STATE_POSITION_VALID_BIT, 0x00000002) \
+ _(XR_VIEW_STATE_ORIENTATION_TRACKED_BIT, 0x00000004) \
+ _(XR_VIEW_STATE_POSITION_TRACKED_BIT, 0x00000008) \
+
+#define XR_LIST_BITS_XrInputSourceLocalizedNameFlags(_) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT, 0x00000001) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT, 0x00000002) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT, 0x00000004) \
+
+#define XR_LIST_BITS_XrVulkanInstanceCreateFlagsKHR(_)
+
+#define XR_LIST_BITS_XrVulkanDeviceCreateFlagsKHR(_)
+
+#define XR_LIST_BITS_XrDebugUtilsMessageSeverityFlagsEXT(_) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, 0x00000001) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, 0x00000010) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, 0x00000100) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, 0x00001000) \
+
+#define XR_LIST_BITS_XrDebugUtilsMessageTypeFlagsEXT(_) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, 0x00000001) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, 0x00000002) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, 0x00000004) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT, 0x00000008) \
+
+#define XR_LIST_BITS_XrOverlaySessionCreateFlagsEXTX(_)
+
+#define XR_LIST_BITS_XrOverlayMainSessionFlagsEXTX(_) \
+ _(XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX, 0x00000001) \
+
+#define XR_LIST_BITS_XrCompositionLayerImageLayoutFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrAndroidSurfaceSwapchainFlagsFB(_) \
+ _(XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB, 0x00000001) \
+ _(XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrCompositionLayerSecureContentFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB, 0x00000001) \
+ _(XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrHandTrackingAimFlagsFB(_) \
+ _(XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB, 0x00000001) \
+ _(XR_HAND_TRACKING_AIM_VALID_BIT_FB, 0x00000002) \
+ _(XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB, 0x00000004) \
+ _(XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB, 0x00000008) \
+ _(XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB, 0x00000010) \
+ _(XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB, 0x00000020) \
+ _(XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB, 0x00000040) \
+ _(XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB, 0x00000080) \
+ _(XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB, 0x00000100) \
+
+#define XR_LIST_BITS_XrSwapchainCreateFoveationFlagsFB(_) \
+ _(XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB, 0x00000001) \
+ _(XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrSwapchainStateFoveationFlagsFB(_)
+
+#define XR_LIST_BITS_XrKeyboardTrackingFlagsFB(_) \
+ _(XR_KEYBOARD_TRACKING_EXISTS_BIT_FB, 0x00000001) \
+ _(XR_KEYBOARD_TRACKING_LOCAL_BIT_FB, 0x00000002) \
+ _(XR_KEYBOARD_TRACKING_REMOTE_BIT_FB, 0x00000004) \
+ _(XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB, 0x00000008) \
+
+#define XR_LIST_BITS_XrKeyboardTrackingQueryFlagsFB(_) \
+ _(XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB, 0x00000002) \
+ _(XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB, 0x00000004) \
+
+#define XR_LIST_BITS_XrTriangleMeshFlagsFB(_) \
+ _(XR_TRIANGLE_MESH_MUTABLE_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrPassthroughFlagsFB(_) \
+ _(XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrPassthroughStateChangedFlagsFB(_) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB, 0x00000001) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB, 0x00000002) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \
+
+#define XR_LIST_BITS_XrRenderModelFlagsFB(_)
+
+#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_)
+
+#define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \
+ _(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \
+
+#define XR_LIST_STRUCT_XrApiLayerProperties(_) \
+ _(type) \
+ _(next) \
+ _(layerName) \
+ _(specVersion) \
+ _(layerVersion) \
+ _(description) \
+
+#define XR_LIST_STRUCT_XrExtensionProperties(_) \
+ _(type) \
+ _(next) \
+ _(extensionName) \
+ _(extensionVersion) \
+
+#define XR_LIST_STRUCT_XrApplicationInfo(_) \
+ _(applicationName) \
+ _(applicationVersion) \
+ _(engineName) \
+ _(engineVersion) \
+ _(apiVersion) \
+
+#define XR_LIST_STRUCT_XrInstanceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(applicationInfo) \
+ _(enabledApiLayerCount) \
+ _(enabledApiLayerNames) \
+ _(enabledExtensionCount) \
+ _(enabledExtensionNames) \
+
+#define XR_LIST_STRUCT_XrInstanceProperties(_) \
+ _(type) \
+ _(next) \
+ _(runtimeVersion) \
+ _(runtimeName) \
+
+#define XR_LIST_STRUCT_XrEventDataBuffer(_) \
+ _(type) \
+ _(next) \
+ _(varying) \
+
+#define XR_LIST_STRUCT_XrSystemGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(formFactor) \
+
+#define XR_LIST_STRUCT_XrSystemGraphicsProperties(_) \
+ _(maxSwapchainImageHeight) \
+ _(maxSwapchainImageWidth) \
+ _(maxLayerCount) \
+
+#define XR_LIST_STRUCT_XrSystemTrackingProperties(_) \
+ _(orientationTracking) \
+ _(positionTracking) \
+
+#define XR_LIST_STRUCT_XrSystemProperties(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(vendorId) \
+ _(systemName) \
+ _(graphicsProperties) \
+ _(trackingProperties) \
+
+#define XR_LIST_STRUCT_XrSessionCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(systemId) \
+
+#define XR_LIST_STRUCT_XrVector3f(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+
+#define XR_LIST_STRUCT_XrSpaceVelocity(_) \
+ _(type) \
+ _(next) \
+ _(velocityFlags) \
+ _(linearVelocity) \
+ _(angularVelocity) \
+
+#define XR_LIST_STRUCT_XrQuaternionf(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrPosef(_) \
+ _(orientation) \
+ _(position) \
+
+#define XR_LIST_STRUCT_XrReferenceSpaceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(referenceSpaceType) \
+ _(poseInReferenceSpace) \
+
+#define XR_LIST_STRUCT_XrExtent2Df(_) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrActionSpaceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+ _(poseInActionSpace) \
+
+#define XR_LIST_STRUCT_XrSpaceLocation(_) \
+ _(type) \
+ _(next) \
+ _(locationFlags) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationProperties(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(fovMutable) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationView(_) \
+ _(type) \
+ _(next) \
+ _(recommendedImageRectWidth) \
+ _(maxImageRectWidth) \
+ _(recommendedImageRectHeight) \
+ _(maxImageRectHeight) \
+ _(recommendedSwapchainSampleCount) \
+ _(maxSwapchainSampleCount) \
+
+#define XR_LIST_STRUCT_XrSwapchainCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(usageFlags) \
+ _(format) \
+ _(sampleCount) \
+ _(width) \
+ _(height) \
+ _(faceCount) \
+ _(arraySize) \
+ _(mipCount) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageAcquireInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageWaitInfo(_) \
+ _(type) \
+ _(next) \
+ _(timeout) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageReleaseInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSessionBeginInfo(_) \
+ _(type) \
+ _(next) \
+ _(primaryViewConfigurationType) \
+
+#define XR_LIST_STRUCT_XrFrameWaitInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrFrameState(_) \
+ _(type) \
+ _(next) \
+ _(predictedDisplayTime) \
+ _(predictedDisplayPeriod) \
+ _(shouldRender) \
+
+#define XR_LIST_STRUCT_XrFrameBeginInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerBaseHeader(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+
+#define XR_LIST_STRUCT_XrFrameEndInfo(_) \
+ _(type) \
+ _(next) \
+ _(displayTime) \
+ _(environmentBlendMode) \
+ _(layerCount) \
+ _(layers) \
+
+#define XR_LIST_STRUCT_XrViewLocateInfo(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(displayTime) \
+ _(space) \
+
+#define XR_LIST_STRUCT_XrViewState(_) \
+ _(type) \
+ _(next) \
+ _(viewStateFlags) \
+
+#define XR_LIST_STRUCT_XrFovf(_) \
+ _(angleLeft) \
+ _(angleRight) \
+ _(angleUp) \
+ _(angleDown) \
+
+#define XR_LIST_STRUCT_XrView(_) \
+ _(type) \
+ _(next) \
+ _(pose) \
+ _(fov) \
+
+#define XR_LIST_STRUCT_XrActionSetCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(actionSetName) \
+ _(localizedActionSetName) \
+ _(priority) \
+
+#define XR_LIST_STRUCT_XrActionCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(actionName) \
+ _(actionType) \
+ _(countSubactionPaths) \
+ _(subactionPaths) \
+ _(localizedActionName) \
+
+#define XR_LIST_STRUCT_XrActionSuggestedBinding(_) \
+ _(action) \
+ _(binding) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileSuggestedBinding(_) \
+ _(type) \
+ _(next) \
+ _(interactionProfile) \
+ _(countSuggestedBindings) \
+ _(suggestedBindings) \
+
+#define XR_LIST_STRUCT_XrSessionActionSetsAttachInfo(_) \
+ _(type) \
+ _(next) \
+ _(countActionSets) \
+ _(actionSets) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileState(_) \
+ _(type) \
+ _(next) \
+ _(interactionProfile) \
+
+#define XR_LIST_STRUCT_XrActionStateGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrActionStateBoolean(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActionStateFloat(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrVector2f(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrActionStateVector2f(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActionStatePose(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActiveActionSet(_) \
+ _(actionSet) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrActionsSyncInfo(_) \
+ _(type) \
+ _(next) \
+ _(countActiveActionSets) \
+ _(activeActionSets) \
+
+#define XR_LIST_STRUCT_XrBoundSourcesForActionEnumerateInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+
+#define XR_LIST_STRUCT_XrInputSourceLocalizedNameGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(sourcePath) \
+ _(whichComponents) \
+
+#define XR_LIST_STRUCT_XrHapticActionInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrHapticBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBaseInStructure(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBaseOutStructure(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrOffset2Di(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrExtent2Di(_) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrRect2Di(_) \
+ _(offset) \
+ _(extent) \
+
+#define XR_LIST_STRUCT_XrSwapchainSubImage(_) \
+ _(swapchain) \
+ _(imageRect) \
+ _(imageArrayIndex) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerProjectionView(_) \
+ _(type) \
+ _(next) \
+ _(pose) \
+ _(fov) \
+ _(subImage) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerProjection(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(viewCount) \
+ _(views) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerQuad(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(size) \
+
+#define XR_LIST_STRUCT_XrEventDataBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrEventDataEventsLost(_) \
+ _(type) \
+ _(next) \
+ _(lostEventCount) \
+
+#define XR_LIST_STRUCT_XrEventDataInstanceLossPending(_) \
+ _(type) \
+ _(next) \
+ _(lossTime) \
+
+#define XR_LIST_STRUCT_XrEventDataSessionStateChanged(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(state) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrEventDataReferenceSpaceChangePending(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(referenceSpaceType) \
+ _(changeTime) \
+ _(poseValid) \
+ _(poseInPreviousSpace) \
+
+#define XR_LIST_STRUCT_XrEventDataInteractionProfileChanged(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+
+#define XR_LIST_STRUCT_XrHapticVibration(_) \
+ _(type) \
+ _(next) \
+ _(duration) \
+ _(frequency) \
+ _(amplitude) \
+
+#define XR_LIST_STRUCT_XrOffset2Df(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrRect2Df(_) \
+ _(offset) \
+ _(extent) \
+
+#define XR_LIST_STRUCT_XrVector4f(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrColor4f(_) \
+ _(r) \
+ _(g) \
+ _(b) \
+ _(a) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerCubeKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(swapchain) \
+ _(imageArrayIndex) \
+ _(orientation) \
+
+#define XR_LIST_STRUCT_XrInstanceCreateInfoAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(applicationVM) \
+ _(applicationActivity) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerDepthInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(subImage) \
+ _(minDepth) \
+ _(maxDepth) \
+ _(nearZ) \
+ _(farZ) \
+
+#define XR_LIST_STRUCT_XrVulkanSwapchainFormatListCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(viewFormatCount) \
+ _(viewFormats) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerCylinderKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(centralAngle) \
+ _(aspectRatio) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerEquirectKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(scale) \
+ _(bias) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWin32KHR(_) \
+ _(type) \
+ _(next) \
+ _(hDC) \
+ _(hGLRC) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXlibKHR(_) \
+ _(type) \
+ _(next) \
+ _(xDisplay) \
+ _(visualid) \
+ _(glxFBConfig) \
+ _(glxDrawable) \
+ _(glxContext) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXcbKHR(_) \
+ _(type) \
+ _(next) \
+ _(connection) \
+ _(screenNumber) \
+ _(fbconfigid) \
+ _(visualid) \
+ _(glxDrawable) \
+ _(glxContext) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWaylandKHR(_) \
+ _(type) \
+ _(next) \
+ _(display) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageOpenGLKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLESAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(display) \
+ _(config) \
+ _(context) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageOpenGLESKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLESKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(instance) \
+ _(physicalDevice) \
+ _(device) \
+ _(queueFamilyIndex) \
+ _(queueIndex) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(device) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(texture) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(adapterLuid) \
+ _(minFeatureLevel) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(device) \
+ _(queue) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(texture) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(adapterLuid) \
+ _(minFeatureLevel) \
+
+#define XR_LIST_STRUCT_XrVisibilityMaskKHR(_) \
+ _(type) \
+ _(next) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrEventDataVisibilityMaskChangedKHR(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(viewConfigurationType) \
+ _(viewIndex) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerColorScaleBiasKHR(_) \
+ _(type) \
+ _(next) \
+ _(colorScale) \
+ _(colorBias) \
+
+#define XR_LIST_STRUCT_XrLoaderInitInfoBaseHeaderKHR(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrLoaderInitInfoAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(applicationVM) \
+ _(applicationContext) \
+
+#define XR_LIST_STRUCT_XrVulkanInstanceCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(createFlags) \
+ _(pfnGetInstanceProcAddr) \
+ _(vulkanCreateInfo) \
+ _(vulkanAllocator) \
+
+#define XR_LIST_STRUCT_XrVulkanDeviceCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(createFlags) \
+ _(pfnGetInstanceProcAddr) \
+ _(vulkanPhysicalDevice) \
+ _(vulkanCreateInfo) \
+ _(vulkanAllocator) \
+
+#define XR_LIST_STRUCT_XrVulkanGraphicsDeviceGetInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(vulkanInstance) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerEquirect2KHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(centralHorizontalAngle) \
+ _(upperVerticalAngle) \
+ _(lowerVerticalAngle) \
+
+#define XR_LIST_STRUCT_XrBindingModificationBaseHeaderKHR(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBindingModificationsKHR(_) \
+ _(type) \
+ _(next) \
+ _(bindingModificationCount) \
+ _(bindingModifications) \
+
+#define XR_LIST_STRUCT_XrEventDataPerfSettingsEXT(_) \
+ _(type) \
+ _(next) \
+ _(domain) \
+ _(subDomain) \
+ _(fromLevel) \
+ _(toLevel) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsObjectNameInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(objectType) \
+ _(objectHandle) \
+ _(objectName) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsLabelEXT(_) \
+ _(type) \
+ _(next) \
+ _(labelName) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsMessengerCallbackDataEXT(_) \
+ _(type) \
+ _(next) \
+ _(messageId) \
+ _(functionName) \
+ _(message) \
+ _(objectCount) \
+ _(objects) \
+ _(sessionLabelCount) \
+ _(sessionLabels) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsMessengerCreateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(messageSeverities) \
+ _(messageTypes) \
+ _(userCallback) \
+ _(userData) \
+
+#define XR_LIST_STRUCT_XrSystemEyeGazeInteractionPropertiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(supportsEyeGazeInteraction) \
+
+#define XR_LIST_STRUCT_XrEyeGazeSampleTimeEXT(_) \
+ _(type) \
+ _(next) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSessionCreateInfoOverlayEXTX(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(sessionLayersPlacement) \
+
+#define XR_LIST_STRUCT_XrEventDataMainSessionVisibilityChangedEXTX(_) \
+ _(type) \
+ _(next) \
+ _(visible) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(pose) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(anchor) \
+ _(poseInAnchorSpace) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerImageLayoutFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerAlphaBlendFB(_) \
+ _(type) \
+ _(next) \
+ _(srcFactorColor) \
+ _(dstFactorColor) \
+ _(srcFactorAlpha) \
+ _(dstFactorAlpha) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationDepthRangeEXT(_) \
+ _(type) \
+ _(next) \
+ _(recommendedNearZ) \
+ _(minNearZ) \
+ _(recommendedFarZ) \
+ _(maxFarZ) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingEGLMNDX(_) \
+ _(type) \
+ _(next) \
+ _(getProcAddress) \
+ _(display) \
+ _(config) \
+ _(context) \
+
+#define XR_LIST_STRUCT_XrSpatialGraphNodeSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeType) \
+ _(nodeId) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(supportsHandTracking) \
+
+#define XR_LIST_STRUCT_XrHandTrackerCreateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(hand) \
+ _(handJointSet) \
+
+#define XR_LIST_STRUCT_XrHandJointsLocateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrHandJointLocationEXT(_) \
+ _(locationFlags) \
+ _(pose) \
+ _(radius) \
+
+#define XR_LIST_STRUCT_XrHandJointVelocityEXT(_) \
+ _(velocityFlags) \
+ _(linearVelocity) \
+ _(angularVelocity) \
+
+#define XR_LIST_STRUCT_XrHandJointLocationsEXT(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(jointCount) \
+ _(jointLocations) \
+
+#define XR_LIST_STRUCT_XrHandJointVelocitiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(jointCount) \
+ _(jointVelocities) \
+
+#define XR_LIST_STRUCT_XrSystemHandTrackingMeshPropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(supportsHandTrackingMesh) \
+ _(maxHandMeshIndexCount) \
+ _(maxHandMeshVertexCount) \
+
+#define XR_LIST_STRUCT_XrHandMeshSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(handPoseType) \
+ _(poseInHandMeshSpace) \
+
+#define XR_LIST_STRUCT_XrHandMeshUpdateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(time) \
+ _(handPoseType) \
+
+#define XR_LIST_STRUCT_XrHandMeshIndexBufferMSFT(_) \
+ _(indexBufferKey) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrHandMeshVertexMSFT(_) \
+ _(position) \
+ _(normal) \
+
+#define XR_LIST_STRUCT_XrHandMeshVertexBufferMSFT(_) \
+ _(vertexUpdateTime) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+
+#define XR_LIST_STRUCT_XrHandMeshMSFT(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(indexBufferChanged) \
+ _(vertexBufferChanged) \
+ _(indexBuffer) \
+ _(vertexBuffer) \
+
+#define XR_LIST_STRUCT_XrHandPoseTypeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(handPoseType) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSessionBeginInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(enabledViewConfigurationTypes) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(active) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(viewConfigurationStates) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationLayerInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(environmentBlendMode) \
+ _(layerCount) \
+ _(layers) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameEndInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(viewConfigurationLayersInfo) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSwapchainCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+
+#define XR_LIST_STRUCT_XrControllerModelKeyStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(modelKey) \
+
+#define XR_LIST_STRUCT_XrControllerModelNodePropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(parentNodeName) \
+ _(nodeName) \
+
+#define XR_LIST_STRUCT_XrControllerModelPropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeCapacityInput) \
+ _(nodeCountOutput) \
+ _(nodeProperties) \
+
+#define XR_LIST_STRUCT_XrControllerModelNodeStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodePose) \
+
+#define XR_LIST_STRUCT_XrControllerModelStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeCapacityInput) \
+ _(nodeCountOutput) \
+ _(nodeStates) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationViewFovEPIC(_) \
+ _(type) \
+ _(next) \
+ _(recommendedFov) \
+ _(maxMutableFov) \
+
+#define XR_LIST_STRUCT_XrHolographicWindowAttachmentMSFT(_) \
+ _(type) \
+ _(next) \
+ _(holographicSpace) \
+ _(coreWindow) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerReprojectionInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(reprojectionMode) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerReprojectionPlaneOverrideMSFT(_) \
+ _(type) \
+ _(next) \
+ _(position) \
+ _(normal) \
+ _(velocity) \
+
+#define XR_LIST_STRUCT_XrAndroidSurfaceSwapchainCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateBaseHeaderFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerSecureContentFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(binding) \
+ _(onThreshold) \
+ _(offThreshold) \
+ _(onHaptic) \
+ _(offHaptic) \
+
+#define XR_LIST_STRUCT_XrHandJointsMotionRangeInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(handJointsMotionRange) \
+
+#define XR_LIST_STRUCT_XrUuidMSFT(_) \
+ _(bytes) \
+
+#define XR_LIST_STRUCT_XrSceneObserverCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneSphereBoundMSFT(_) \
+ _(center) \
+ _(radius) \
+
+#define XR_LIST_STRUCT_XrSceneOrientedBoxBoundMSFT(_) \
+ _(pose) \
+ _(extents) \
+
+#define XR_LIST_STRUCT_XrSceneFrustumBoundMSFT(_) \
+ _(pose) \
+ _(fov) \
+ _(farDistance) \
+
+#define XR_LIST_STRUCT_XrSceneBoundsMSFT(_) \
+ _(space) \
+ _(time) \
+ _(sphereCount) \
+ _(spheres) \
+ _(boxCount) \
+ _(boxes) \
+ _(frustumCount) \
+ _(frustums) \
+
+#define XR_LIST_STRUCT_XrNewSceneComputeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(requestedFeatureCount) \
+ _(requestedFeatures) \
+ _(consistency) \
+ _(bounds) \
+
+#define XR_LIST_STRUCT_XrVisualMeshComputeLodInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(lod) \
+
+#define XR_LIST_STRUCT_XrSceneComponentMSFT(_) \
+ _(componentType) \
+ _(id) \
+ _(parentId) \
+ _(updateTime) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(componentCapacityInput) \
+ _(componentCountOutput) \
+ _(components) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(componentType) \
+
+#define XR_LIST_STRUCT_XrSceneComponentLocationMSFT(_) \
+ _(flags) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrSceneComponentLocationsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(locationCount) \
+ _(locations) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsLocateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+ _(componentIdCount) \
+ _(componentIds) \
+
+#define XR_LIST_STRUCT_XrSceneObjectMSFT(_) \
+ _(objectType) \
+
+#define XR_LIST_STRUCT_XrSceneObjectsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneObjectCount) \
+ _(sceneObjects) \
+
+#define XR_LIST_STRUCT_XrSceneComponentParentFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(parentId) \
+
+#define XR_LIST_STRUCT_XrSceneObjectTypesFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(objectTypeCount) \
+ _(objectTypes) \
+
+#define XR_LIST_STRUCT_XrScenePlaneMSFT(_) \
+ _(alignment) \
+ _(size) \
+ _(meshBufferId) \
+ _(supportsIndicesUint16) \
+
+#define XR_LIST_STRUCT_XrScenePlanesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(scenePlaneCount) \
+ _(scenePlanes) \
+
+#define XR_LIST_STRUCT_XrScenePlaneAlignmentFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(alignmentCount) \
+ _(alignments) \
+
+#define XR_LIST_STRUCT_XrSceneMeshMSFT(_) \
+ _(meshBufferId) \
+ _(supportsIndicesUint16) \
+
+#define XR_LIST_STRUCT_XrSceneMeshesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneMeshCount) \
+ _(sceneMeshes) \
+
+#define XR_LIST_STRUCT_XrSceneMeshBuffersGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(meshBufferId) \
+
+#define XR_LIST_STRUCT_XrSceneMeshBuffersMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneMeshVertexBufferMSFT(_) \
+ _(type) \
+ _(next) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+
+#define XR_LIST_STRUCT_XrSceneMeshIndicesUint32MSFT(_) \
+ _(type) \
+ _(next) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrSceneMeshIndicesUint16MSFT(_) \
+ _(type) \
+ _(next) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrSerializedSceneFragmentDataGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneFragmentId) \
+
+#define XR_LIST_STRUCT_XrDeserializeSceneFragmentMSFT(_) \
+ _(bufferSize) \
+ _(buffer) \
+
+#define XR_LIST_STRUCT_XrSceneDeserializeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(fragmentCount) \
+ _(fragments) \
+
+#define XR_LIST_STRUCT_XrEventDataDisplayRefreshRateChangedFB(_) \
+ _(type) \
+ _(next) \
+ _(fromDisplayRefreshRate) \
+ _(toDisplayRefreshRate) \
+
+#define XR_LIST_STRUCT_XrViveTrackerPathsHTCX(_) \
+ _(type) \
+ _(next) \
+ _(persistentPath) \
+ _(rolePath) \
+
+#define XR_LIST_STRUCT_XrEventDataViveTrackerConnectedHTCX(_) \
+ _(type) \
+ _(next) \
+ _(paths) \
+
+#define XR_LIST_STRUCT_XrSystemFacialTrackingPropertiesHTC(_) \
+ _(type) \
+ _(next) \
+ _(supportEyeFacialTracking) \
+ _(supportLipFacialTracking) \
+
+#define XR_LIST_STRUCT_XrFacialExpressionsHTC(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(sampleTime) \
+ _(expressionCount) \
+ _(expressionWeightings) \
+
+#define XR_LIST_STRUCT_XrFacialTrackerCreateInfoHTC(_) \
+ _(type) \
+ _(next) \
+ _(facialTrackingType) \
+
+#define XR_LIST_STRUCT_XrSystemColorSpacePropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(colorSpace) \
+
+#define XR_LIST_STRUCT_XrVector4sFB(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrHandTrackingMeshFB(_) \
+ _(type) \
+ _(next) \
+ _(jointCapacityInput) \
+ _(jointCountOutput) \
+ _(jointBindPoses) \
+ _(jointRadii) \
+ _(jointParents) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertexPositions) \
+ _(vertexNormals) \
+ _(vertexUVs) \
+ _(vertexBlendIndices) \
+ _(vertexBlendWeights) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrHandTrackingScaleFB(_) \
+ _(type) \
+ _(next) \
+ _(sensorOutput) \
+ _(currentOutput) \
+ _(overrideHandScale) \
+ _(overrideValueInput) \
+
+#define XR_LIST_STRUCT_XrHandTrackingAimStateFB(_) \
+ _(type) \
+ _(next) \
+ _(status) \
+ _(aimPose) \
+ _(pinchStrengthIndex) \
+ _(pinchStrengthMiddle) \
+ _(pinchStrengthRing) \
+ _(pinchStrengthLittle) \
+
+#define XR_LIST_STRUCT_XrHandCapsuleFB(_) \
+ _(points) \
+ _(radius) \
+ _(joint) \
+
+#define XR_LIST_STRUCT_XrHandTrackingCapsulesStateFB(_) \
+ _(type) \
+ _(next) \
+ _(capsules) \
+
+#define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainCreateInfoFoveationFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateFoveationFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(profile) \
+
+#define XR_LIST_STRUCT_XrFoveationLevelProfileCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(level) \
+ _(verticalOffset) \
+ _(dynamic) \
+
+#define XR_LIST_STRUCT_XrSystemKeyboardTrackingPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsKeyboardTracking) \
+
+#define XR_LIST_STRUCT_XrKeyboardTrackingDescriptionFB(_) \
+ _(trackedKeyboardId) \
+ _(size) \
+ _(flags) \
+ _(name) \
+
+#define XR_LIST_STRUCT_XrKeyboardSpaceCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(trackedKeyboardId) \
+
+#define XR_LIST_STRUCT_XrKeyboardTrackingQueryFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrTriangleMeshCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(windingOrder) \
+ _(vertexCount) \
+ _(vertexBuffer) \
+ _(triangleCount) \
+ _(indexBuffer) \
+
+#define XR_LIST_STRUCT_XrSystemPassthroughPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsPassthrough) \
+
+#define XR_LIST_STRUCT_XrPassthroughCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrPassthroughLayerCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(passthrough) \
+ _(flags) \
+ _(purpose) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerPassthroughFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(space) \
+ _(layerHandle) \
+
+#define XR_LIST_STRUCT_XrGeometryInstanceCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(layer) \
+ _(mesh) \
+ _(baseSpace) \
+ _(pose) \
+ _(scale) \
+
+#define XR_LIST_STRUCT_XrGeometryInstanceTransformFB(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+ _(pose) \
+ _(scale) \
+
+#define XR_LIST_STRUCT_XrPassthroughStyleFB(_) \
+ _(type) \
+ _(next) \
+ _(textureOpacityFactor) \
+ _(edgeColor) \
+
+#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToRgbaFB(_) \
+ _(type) \
+ _(next) \
+ _(textureColorMap) \
+
+#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToMonoFB(_) \
+ _(type) \
+ _(next) \
+ _(textureColorMap) \
+
+#define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrRenderModelPathInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(path) \
+
+#define XR_LIST_STRUCT_XrRenderModelPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(vendorId) \
+ _(modelName) \
+ _(modelKey) \
+ _(modelVersion) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrRenderModelBufferFB(_) \
+ _(type) \
+ _(next) \
+ _(bufferCapacityInput) \
+ _(bufferCountOutput) \
+ _(buffer) \
+
+#define XR_LIST_STRUCT_XrRenderModelLoadInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(modelKey) \
+
+#define XR_LIST_STRUCT_XrSystemRenderModelPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsRenderModelLoading) \
+
+#define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \
+ _(type) \
+ _(next) \
+ _(foveatedRenderingActive) \
+
+#define XR_LIST_STRUCT_XrFoveatedViewConfigurationViewVARJO(_) \
+ _(type) \
+ _(next) \
+ _(foveatedRenderingActive) \
+
+#define XR_LIST_STRUCT_XrSystemFoveatedRenderingPropertiesVARJO(_) \
+ _(type) \
+ _(next) \
+ _(supportsFoveatedRendering) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerDepthTestVARJO(_) \
+ _(type) \
+ _(next) \
+ _(depthTestRangeNearZ) \
+ _(depthTestRangeFarZ) \
+
+#define XR_LIST_STRUCT_XrSystemMarkerTrackingPropertiesVARJO(_) \
+ _(type) \
+ _(next) \
+ _(supportsMarkerTracking) \
+
+#define XR_LIST_STRUCT_XrEventDataMarkerTrackingUpdateVARJO(_) \
+ _(type) \
+ _(next) \
+ _(markerId) \
+ _(isActive) \
+ _(isPredicted) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrMarkerSpaceCreateInfoVARJO(_) \
+ _(type) \
+ _(next) \
+ _(markerId) \
+ _(poseInMarkerSpace) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceNameMSFT(_) \
+ _(name) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(spatialAnchorPersistenceName) \
+ _(spatialAnchor) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(spatialAnchorStore) \
+ _(spatialAnchorPersistenceName) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateAndroidSurfaceDimensionsFB(_) \
+ _(type) \
+ _(next) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateSamplerOpenGLESFB(_) \
+ _(type) \
+ _(next) \
+ _(minFilter) \
+ _(magFilter) \
+ _(wrapModeS) \
+ _(wrapModeT) \
+ _(swizzleRed) \
+ _(swizzleGreen) \
+ _(swizzleBlue) \
+ _(swizzleAlpha) \
+ _(maxAnisotropy) \
+ _(borderColor) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateSamplerVulkanFB(_) \
+ _(type) \
+ _(next) \
+ _(minFilter) \
+ _(magFilter) \
+ _(mipmapMode) \
+ _(wrapModeS) \
+ _(wrapModeT) \
+ _(swizzleRed) \
+ _(swizzleGreen) \
+ _(swizzleBlue) \
+ _(swizzleAlpha) \
+ _(maxAnisotropy) \
+ _(borderColor) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerSpaceWarpInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(motionVectorSubImage) \
+ _(appSpaceDeltaPose) \
+ _(depthSubImage) \
+ _(minDepth) \
+ _(maxDepth) \
+ _(nearZ) \
+ _(farZ) \
+
+#define XR_LIST_STRUCT_XrSystemSpaceWarpPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(recommendedMotionVectorImageRectWidth) \
+ _(recommendedMotionVectorImageRectHeight) \
+
+#define XR_LIST_STRUCT_XrDigitalLensControlALMALENCE(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \
+ _(type) \
+ _(next) \
+ _(leftHandIntensity) \
+ _(rightHandIntensity) \
+
+#define XR_LIST_STRUCT_XrUuidEXT(_) \
+ _(data) \
+
+
+
+#define XR_LIST_STRUCTURE_TYPES_CORE(_) \
+ _(XrApiLayerProperties, XR_TYPE_API_LAYER_PROPERTIES) \
+ _(XrExtensionProperties, XR_TYPE_EXTENSION_PROPERTIES) \
+ _(XrInstanceCreateInfo, XR_TYPE_INSTANCE_CREATE_INFO) \
+ _(XrInstanceProperties, XR_TYPE_INSTANCE_PROPERTIES) \
+ _(XrEventDataBuffer, XR_TYPE_EVENT_DATA_BUFFER) \
+ _(XrSystemGetInfo, XR_TYPE_SYSTEM_GET_INFO) \
+ _(XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES) \
+ _(XrSessionCreateInfo, XR_TYPE_SESSION_CREATE_INFO) \
+ _(XrSpaceVelocity, XR_TYPE_SPACE_VELOCITY) \
+ _(XrReferenceSpaceCreateInfo, XR_TYPE_REFERENCE_SPACE_CREATE_INFO) \
+ _(XrActionSpaceCreateInfo, XR_TYPE_ACTION_SPACE_CREATE_INFO) \
+ _(XrSpaceLocation, XR_TYPE_SPACE_LOCATION) \
+ _(XrViewConfigurationProperties, XR_TYPE_VIEW_CONFIGURATION_PROPERTIES) \
+ _(XrViewConfigurationView, XR_TYPE_VIEW_CONFIGURATION_VIEW) \
+ _(XrSwapchainCreateInfo, XR_TYPE_SWAPCHAIN_CREATE_INFO) \
+ _(XrSwapchainImageAcquireInfo, XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO) \
+ _(XrSwapchainImageWaitInfo, XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO) \
+ _(XrSwapchainImageReleaseInfo, XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO) \
+ _(XrSessionBeginInfo, XR_TYPE_SESSION_BEGIN_INFO) \
+ _(XrFrameWaitInfo, XR_TYPE_FRAME_WAIT_INFO) \
+ _(XrFrameState, XR_TYPE_FRAME_STATE) \
+ _(XrFrameBeginInfo, XR_TYPE_FRAME_BEGIN_INFO) \
+ _(XrFrameEndInfo, XR_TYPE_FRAME_END_INFO) \
+ _(XrViewLocateInfo, XR_TYPE_VIEW_LOCATE_INFO) \
+ _(XrViewState, XR_TYPE_VIEW_STATE) \
+ _(XrView, XR_TYPE_VIEW) \
+ _(XrActionSetCreateInfo, XR_TYPE_ACTION_SET_CREATE_INFO) \
+ _(XrActionCreateInfo, XR_TYPE_ACTION_CREATE_INFO) \
+ _(XrInteractionProfileSuggestedBinding, XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING) \
+ _(XrSessionActionSetsAttachInfo, XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO) \
+ _(XrInteractionProfileState, XR_TYPE_INTERACTION_PROFILE_STATE) \
+ _(XrActionStateGetInfo, XR_TYPE_ACTION_STATE_GET_INFO) \
+ _(XrActionStateBoolean, XR_TYPE_ACTION_STATE_BOOLEAN) \
+ _(XrActionStateFloat, XR_TYPE_ACTION_STATE_FLOAT) \
+ _(XrActionStateVector2f, XR_TYPE_ACTION_STATE_VECTOR2F) \
+ _(XrActionStatePose, XR_TYPE_ACTION_STATE_POSE) \
+ _(XrActionsSyncInfo, XR_TYPE_ACTIONS_SYNC_INFO) \
+ _(XrBoundSourcesForActionEnumerateInfo, XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO) \
+ _(XrInputSourceLocalizedNameGetInfo, XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO) \
+ _(XrHapticActionInfo, XR_TYPE_HAPTIC_ACTION_INFO) \
+ _(XrCompositionLayerProjectionView, XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW) \
+ _(XrCompositionLayerProjection, XR_TYPE_COMPOSITION_LAYER_PROJECTION) \
+ _(XrCompositionLayerQuad, XR_TYPE_COMPOSITION_LAYER_QUAD) \
+ _(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST) \
+ _(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) \
+ _(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) \
+ _(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \
+ _(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \
+ _(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \
+ _(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \
+ _(XrCompositionLayerDepthInfoKHR, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) \
+ _(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \
+ _(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \
+ _(XrVisibilityMaskKHR, XR_TYPE_VISIBILITY_MASK_KHR) \
+ _(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) \
+ _(XrCompositionLayerColorScaleBiasKHR, XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR) \
+ _(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \
+ _(XrBindingModificationsKHR, XR_TYPE_BINDING_MODIFICATIONS_KHR) \
+ _(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) \
+ _(XrDebugUtilsObjectNameInfoEXT, XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT) \
+ _(XrDebugUtilsLabelEXT, XR_TYPE_DEBUG_UTILS_LABEL_EXT) \
+ _(XrDebugUtilsMessengerCallbackDataEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT) \
+ _(XrDebugUtilsMessengerCreateInfoEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) \
+ _(XrSystemEyeGazeInteractionPropertiesEXT, XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT) \
+ _(XrEyeGazeSampleTimeEXT, XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT) \
+ _(XrSessionCreateInfoOverlayEXTX, XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX) \
+ _(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \
+ _(XrSpatialAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) \
+ _(XrSpatialAnchorSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) \
+ _(XrCompositionLayerImageLayoutFB, XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) \
+ _(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \
+ _(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \
+ _(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \
+ _(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \
+ _(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \
+ _(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \
+ _(XrHandJointLocationsEXT, XR_TYPE_HAND_JOINT_LOCATIONS_EXT) \
+ _(XrHandJointVelocitiesEXT, XR_TYPE_HAND_JOINT_VELOCITIES_EXT) \
+ _(XrSystemHandTrackingMeshPropertiesMSFT, XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT) \
+ _(XrHandMeshSpaceCreateInfoMSFT, XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT) \
+ _(XrHandMeshUpdateInfoMSFT, XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT) \
+ _(XrHandMeshMSFT, XR_TYPE_HAND_MESH_MSFT) \
+ _(XrHandPoseTypeInfoMSFT, XR_TYPE_HAND_POSE_TYPE_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationSessionBeginInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT) \
+ _(XrSecondaryViewConfigurationFrameStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT) \
+ _(XrSecondaryViewConfigurationLayerInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationFrameEndInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationSwapchainCreateInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT) \
+ _(XrControllerModelKeyStateMSFT, XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT) \
+ _(XrControllerModelNodePropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT) \
+ _(XrControllerModelPropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT) \
+ _(XrControllerModelNodeStateMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) \
+ _(XrControllerModelStateMSFT, XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) \
+ _(XrViewConfigurationViewFovEPIC, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) \
+ _(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \
+ _(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \
+ _(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \
+ _(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \
+ _(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \
+ _(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \
+ _(XrSceneCreateInfoMSFT, XR_TYPE_SCENE_CREATE_INFO_MSFT) \
+ _(XrNewSceneComputeInfoMSFT, XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) \
+ _(XrVisualMeshComputeLodInfoMSFT, XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) \
+ _(XrSceneComponentsMSFT, XR_TYPE_SCENE_COMPONENTS_MSFT) \
+ _(XrSceneComponentsGetInfoMSFT, XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) \
+ _(XrSceneComponentLocationsMSFT, XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) \
+ _(XrSceneComponentsLocateInfoMSFT, XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) \
+ _(XrSceneObjectsMSFT, XR_TYPE_SCENE_OBJECTS_MSFT) \
+ _(XrSceneComponentParentFilterInfoMSFT, XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) \
+ _(XrSceneObjectTypesFilterInfoMSFT, XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) \
+ _(XrScenePlanesMSFT, XR_TYPE_SCENE_PLANES_MSFT) \
+ _(XrScenePlaneAlignmentFilterInfoMSFT, XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) \
+ _(XrSceneMeshesMSFT, XR_TYPE_SCENE_MESHES_MSFT) \
+ _(XrSceneMeshBuffersGetInfoMSFT, XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) \
+ _(XrSceneMeshBuffersMSFT, XR_TYPE_SCENE_MESH_BUFFERS_MSFT) \
+ _(XrSceneMeshVertexBufferMSFT, XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) \
+ _(XrSceneMeshIndicesUint32MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) \
+ _(XrSceneMeshIndicesUint16MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) \
+ _(XrSerializedSceneFragmentDataGetInfoMSFT, XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) \
+ _(XrSceneDeserializeInfoMSFT, XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) \
+ _(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \
+ _(XrViveTrackerPathsHTCX, XR_TYPE_VIVE_TRACKER_PATHS_HTCX) \
+ _(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \
+ _(XrSystemFacialTrackingPropertiesHTC, XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) \
+ _(XrFacialExpressionsHTC, XR_TYPE_FACIAL_EXPRESSIONS_HTC) \
+ _(XrFacialTrackerCreateInfoHTC, XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) \
+ _(XrSystemColorSpacePropertiesFB, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) \
+ _(XrHandTrackingMeshFB, XR_TYPE_HAND_TRACKING_MESH_FB) \
+ _(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \
+ _(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \
+ _(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \
+ _(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \
+ _(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \
+ _(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \
+ _(XrFoveationLevelProfileCreateInfoFB, XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) \
+ _(XrSystemKeyboardTrackingPropertiesFB, XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) \
+ _(XrKeyboardSpaceCreateInfoFB, XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) \
+ _(XrKeyboardTrackingQueryFB, XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) \
+ _(XrTriangleMeshCreateInfoFB, XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) \
+ _(XrSystemPassthroughPropertiesFB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) \
+ _(XrPassthroughCreateInfoFB, XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) \
+ _(XrPassthroughLayerCreateInfoFB, XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) \
+ _(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \
+ _(XrGeometryInstanceCreateInfoFB, XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) \
+ _(XrGeometryInstanceTransformFB, XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) \
+ _(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \
+ _(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \
+ _(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \
+ _(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \
+ _(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \
+ _(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \
+ _(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \
+ _(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \
+ _(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \
+ _(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \
+ _(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \
+ _(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \
+ _(XrCompositionLayerDepthTestVARJO, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) \
+ _(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \
+ _(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \
+ _(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \
+ _(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \
+ _(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \
+ _(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \
+ _(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \
+ _(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \
+ _(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \
+
+
+
+
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \
+ _(XrGraphicsBindingD3D11KHR, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) \
+ _(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \
+ _(XrGraphicsRequirementsD3D11KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \
+ _(XrGraphicsBindingD3D12KHR, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) \
+ _(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \
+ _(XrGraphicsRequirementsD3D12KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \
+ _(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \
+ _(XrGraphicsRequirementsOpenGLKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \
+ _(XrGraphicsBindingOpenGLWaylandKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \
+ _(XrGraphicsBindingOpenGLWin32KHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \
+ _(XrGraphicsBindingOpenGLXcbKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \
+ _(XrGraphicsBindingOpenGLXlibKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \
+ _(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \
+ _(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \
+ _(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \
+ _(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \
+ _(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \
+ _(XrGraphicsBindingVulkanKHR, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) \
+ _(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \
+ _(XrGraphicsRequirementsVulkanKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) \
+ _(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \
+ _(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \
+ _(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \
+ _(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \
+ _(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_ANDROID)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \
+ _(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \
+ _(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \
+ _(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \
+ _(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_EGL)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \
+ _(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_WIN32)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \
+ _(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_)
+#endif
+
+#define XR_LIST_STRUCTURE_TYPES(_) \
+ XR_LIST_STRUCTURE_TYPES_CORE(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \
+
+
+#define XR_LIST_EXTENSIONS(_) \
+ _(XR_KHR_android_thread_settings, 4) \
+ _(XR_KHR_android_surface_swapchain, 5) \
+ _(XR_KHR_composition_layer_cube, 7) \
+ _(XR_KHR_android_create_instance, 9) \
+ _(XR_KHR_composition_layer_depth, 11) \
+ _(XR_KHR_vulkan_swapchain_format_list, 15) \
+ _(XR_EXT_performance_settings, 16) \
+ _(XR_EXT_thermal_query, 17) \
+ _(XR_KHR_composition_layer_cylinder, 18) \
+ _(XR_KHR_composition_layer_equirect, 19) \
+ _(XR_EXT_debug_utils, 20) \
+ _(XR_KHR_opengl_enable, 24) \
+ _(XR_KHR_opengl_es_enable, 25) \
+ _(XR_KHR_vulkan_enable, 26) \
+ _(XR_KHR_D3D11_enable, 28) \
+ _(XR_KHR_D3D12_enable, 29) \
+ _(XR_EXT_eye_gaze_interaction, 31) \
+ _(XR_KHR_visibility_mask, 32) \
+ _(XR_EXTX_overlay, 34) \
+ _(XR_KHR_composition_layer_color_scale_bias, 35) \
+ _(XR_KHR_win32_convert_performance_counter_time, 36) \
+ _(XR_KHR_convert_timespec_time, 37) \
+ _(XR_VARJO_quad_views, 38) \
+ _(XR_MSFT_unbounded_reference_space, 39) \
+ _(XR_MSFT_spatial_anchor, 40) \
+ _(XR_FB_composition_layer_image_layout, 41) \
+ _(XR_FB_composition_layer_alpha_blend, 42) \
+ _(XR_MND_headless, 43) \
+ _(XR_OCULUS_android_session_state_enable, 45) \
+ _(XR_EXT_view_configuration_depth_range, 47) \
+ _(XR_EXT_conformance_automation, 48) \
+ _(XR_MNDX_egl_enable, 49) \
+ _(XR_MSFT_spatial_graph_bridge, 50) \
+ _(XR_MSFT_hand_interaction, 51) \
+ _(XR_EXT_hand_tracking, 52) \
+ _(XR_MSFT_hand_tracking_mesh, 53) \
+ _(XR_MSFT_secondary_view_configuration, 54) \
+ _(XR_MSFT_first_person_observer, 55) \
+ _(XR_MSFT_controller_model, 56) \
+ _(XR_MSFT_perception_anchor_interop, 57) \
+ _(XR_EXT_win32_appcontainer_compatible, 58) \
+ _(XR_EPIC_view_configuration_fov, 60) \
+ _(XR_MSFT_holographic_window_attachment, 64) \
+ _(XR_MSFT_composition_layer_reprojection, 67) \
+ _(XR_HUAWEI_controller_interaction, 70) \
+ _(XR_FB_android_surface_swapchain_create, 71) \
+ _(XR_FB_swapchain_update_state, 72) \
+ _(XR_FB_composition_layer_secure_content, 73) \
+ _(XR_VALVE_analog_threshold, 80) \
+ _(XR_EXT_hand_joints_motion_range, 81) \
+ _(XR_KHR_loader_init, 89) \
+ _(XR_KHR_loader_init_android, 90) \
+ _(XR_KHR_vulkan_enable2, 91) \
+ _(XR_KHR_composition_layer_equirect2, 92) \
+ _(XR_EXT_samsung_odyssey_controller, 95) \
+ _(XR_EXT_hp_mixed_reality_controller, 96) \
+ _(XR_MND_swapchain_usage_input_attachment_bit, 97) \
+ _(XR_MSFT_scene_understanding, 98) \
+ _(XR_MSFT_scene_understanding_serialization, 99) \
+ _(XR_FB_display_refresh_rate, 102) \
+ _(XR_HTC_vive_cosmos_controller_interaction, 103) \
+ _(XR_HTCX_vive_tracker_interaction, 104) \
+ _(XR_HTC_facial_tracking, 105) \
+ _(XR_HTC_vive_focus3_controller_interaction, 106) \
+ _(XR_FB_color_space, 109) \
+ _(XR_FB_hand_tracking_mesh, 111) \
+ _(XR_FB_hand_tracking_aim, 112) \
+ _(XR_FB_hand_tracking_capsules, 113) \
+ _(XR_FB_foveation, 115) \
+ _(XR_FB_foveation_configuration, 116) \
+ _(XR_FB_keyboard_tracking, 117) \
+ _(XR_FB_triangle_mesh, 118) \
+ _(XR_FB_passthrough, 119) \
+ _(XR_FB_render_model, 120) \
+ _(XR_KHR_binding_modification, 121) \
+ _(XR_VARJO_foveated_rendering, 122) \
+ _(XR_VARJO_composition_layer_depth_test, 123) \
+ _(XR_VARJO_environment_depth_estimation, 124) \
+ _(XR_VARJO_marker_tracking, 125) \
+ _(XR_MSFT_spatial_anchor_persistence, 143) \
+ _(XR_OCULUS_audio_device_guid, 160) \
+ _(XR_FB_foveation_vulkan, 161) \
+ _(XR_FB_swapchain_update_state_android_surface, 162) \
+ _(XR_FB_swapchain_update_state_opengl_es, 163) \
+ _(XR_FB_swapchain_update_state_vulkan, 164) \
+ _(XR_KHR_swapchain_usage_input_attachment_bit, 166) \
+ _(XR_FB_space_warp, 172) \
+ _(XR_ALMALENCE_digital_lens_control, 197) \
+ _(XR_FB_passthrough_keyboard_hands, 204) \
+ _(XR_EXT_uuid, 300) \
+
+
+#endif
+
diff --git a/thirdparty/openxr/src/.clang-format b/thirdparty/openxr/src/.clang-format
new file mode 100644
index 0000000000..36546cab92
--- /dev/null
+++ b/thirdparty/openxr/src/.clang-format
@@ -0,0 +1,10 @@
+---
+# Copyright (c) 2017-2022, The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+# Use defaults from the Google style with the following exceptions:
+BasedOnStyle: Google
+IndentWidth: 4
+ColumnLimit: 132
+SortIncludes: false
+...
diff --git a/thirdparty/openxr/src/common/extra_algorithms.h b/thirdparty/openxr/src/common/extra_algorithms.h
new file mode 100644
index 0000000000..64af4d08ff
--- /dev/null
+++ b/thirdparty/openxr/src/common/extra_algorithms.h
@@ -0,0 +1,47 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+/*!
+ * @file
+ *
+ * Additional functions along the lines of the standard library algorithms.
+ */
+
+#pragma once
+
+#include <algorithm>
+#include <vector>
+
+/// Like std::remove_if, except it works on associative containers and it actually removes this.
+///
+/// The iterator stuff in here is subtle - .erase() invalidates only that iterator, but it returns a non-invalidated iterator to the
+/// next valid element which we can use instead of incrementing.
+template <typename T, typename Pred>
+static inline void map_erase_if(T &container, Pred &&predicate) {
+ for (auto it = container.begin(); it != container.end();) {
+ if (predicate(*it)) {
+ it = container.erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
+/*!
+ * Moves all elements matching the predicate to the end of the vector then erases them.
+ *
+ * Combines the two parts of the erase-remove idiom to simplify things and avoid accidentally using the wrong erase overload.
+ */
+template <typename T, typename Alloc, typename Pred>
+static inline void vector_remove_if_and_erase(std::vector<T, Alloc> &vec, Pred &&predicate) {
+ auto b = vec.begin();
+ auto e = vec.end();
+ vec.erase(std::remove_if(b, e, std::forward<Pred>(predicate)), e);
+}
diff --git a/thirdparty/openxr/src/common/filesystem_utils.cpp b/thirdparty/openxr/src/common/filesystem_utils.cpp
new file mode 100644
index 0000000000..d3d4182fb9
--- /dev/null
+++ b/thirdparty/openxr/src/common/filesystem_utils.cpp
@@ -0,0 +1,322 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>
+// Nat Brown <natb@valvesoftware.com>
+//
+
+#include "filesystem_utils.hpp"
+
+#include "platform_utils.hpp"
+
+#include <cstring>
+#include <string>
+
+#if defined DISABLE_STD_FILESYSTEM
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 0
+
+#else
+#include "stdfs_conditions.h"
+#endif
+
+#if USE_FINAL_FS == 1
+#include <filesystem>
+#define FS_PREFIX std::filesystem
+#elif USE_EXPERIMENTAL_FS == 1
+#include <experimental/filesystem>
+#define FS_PREFIX std::experimental::filesystem
+#elif defined(XR_USE_PLATFORM_WIN32)
+// Windows fallback includes
+#include <stdint.h>
+#include <direct.h>
+#else
+// Linux/Apple fallback includes
+#include <sys/stat.h>
+#include <unistd.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <dirent.h>
+#endif
+
+#if defined(XR_USE_PLATFORM_WIN32)
+#define PATH_SEPARATOR ';'
+#define DIRECTORY_SYMBOL '\\'
+#define ALTERNATE_DIRECTORY_SYMBOL '/'
+#else
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+#endif
+
+#if (USE_FINAL_FS == 1) || (USE_EXPERIMENTAL_FS == 1)
+// We can use one of the C++ filesystem packages
+
+bool FileSysUtilsIsRegularFile(const std::string& path) { return FS_PREFIX::is_regular_file(path); }
+
+bool FileSysUtilsIsDirectory(const std::string& path) { return FS_PREFIX::is_directory(path); }
+
+bool FileSysUtilsPathExists(const std::string& path) { return FS_PREFIX::exists(path); }
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) {
+ FS_PREFIX::path file_path(path);
+ return file_path.is_absolute();
+}
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ FS_PREFIX::path cur_path = FS_PREFIX::current_path();
+ path = cur_path.string();
+ return true;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ FS_PREFIX::path path_var(file_path);
+ parent_path = path_var.parent_path().string();
+ return true;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ absolute = FS_PREFIX::absolute(path).string();
+ return true;
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) {
+#if defined(XR_USE_PLATFORM_WIN32)
+ // std::filesystem::canonical fails on UWP and must be avoided. Further, PathCchCanonicalize is not available on Windows 7 and
+ // PathCanonicalizeW is not available on UWP. However, symbolic links are not important on Windows since the loader uses the
+ // registry for indirection instead, and so this function can be a no-op on Windows.
+ canonical = path;
+#else
+ canonical = FS_PREFIX::canonical(path).string();
+#endif
+ return true;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ FS_PREFIX::path parent_path(parent);
+ FS_PREFIX::path child_path(child);
+ FS_PREFIX::path full_path = parent_path / child_path;
+ combined = full_path.string();
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ for (auto& dir_iter : FS_PREFIX::directory_iterator(path)) {
+ files.push_back(dir_iter.path().filename().string());
+ }
+ return true;
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+// For pre C++17 compiler that doesn't support experimental filesystem
+
+bool FileSysUtilsIsRegularFile(const std::string& path) {
+ const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str());
+ return attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY);
+}
+
+bool FileSysUtilsIsDirectory(const std::string& path) {
+ const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str());
+ return attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY);
+}
+
+bool FileSysUtilsPathExists(const std::string& path) {
+ return (GetFileAttributesW(utf8_to_wide(path).c_str()) != INVALID_FILE_ATTRIBUTES);
+}
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) {
+ bool pathStartsWithDir = (path.size() >= 1) && ((path[0] == DIRECTORY_SYMBOL) || (path[0] == ALTERNATE_DIRECTORY_SYMBOL));
+
+ bool pathStartsWithDrive =
+ (path.size() >= 3) && (path[1] == ':' && (path[2] == DIRECTORY_SYMBOL || path[2] == ALTERNATE_DIRECTORY_SYMBOL));
+
+ return pathStartsWithDir || pathStartsWithDrive;
+}
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ wchar_t tmp_path[MAX_PATH];
+ if (nullptr != _wgetcwd(tmp_path, MAX_PATH - 1)) {
+ path = wide_to_utf8(tmp_path);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ std::string full_path;
+ if (FileSysUtilsGetAbsolutePath(file_path, full_path)) {
+ std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL);
+ parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ wchar_t tmp_path[MAX_PATH];
+ if (0 != GetFullPathNameW(utf8_to_wide(path).c_str(), MAX_PATH, tmp_path, NULL)) {
+ absolute = wide_to_utf8(tmp_path);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& absolute) {
+ // PathCchCanonicalize is not available on Windows 7 and PathCanonicalizeW is not available on UWP. However, symbolic links are
+ // not important on Windows since the loader uses the registry for indirection instead, and so this function can be a no-op on
+ // Windows.
+ absolute = path;
+ return true;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ std::string::size_type parent_len = parent.length();
+ if (0 == parent_len || "." == parent || ".\\" == parent || "./" == parent) {
+ combined = child;
+ return true;
+ }
+ char last_char = parent[parent_len - 1];
+ if ((last_char == DIRECTORY_SYMBOL) || (last_char == ALTERNATE_DIRECTORY_SYMBOL)) {
+ parent_len--;
+ }
+ combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child;
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ std::string searchPath;
+ FileSysUtilsCombinePaths(path, "*", searchPath);
+
+ WIN32_FIND_DATAW file_data;
+ HANDLE file_handle = FindFirstFileW(utf8_to_wide(searchPath).c_str(), &file_data);
+ if (file_handle != INVALID_HANDLE_VALUE) {
+ do {
+ if (!(file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ files.push_back(wide_to_utf8(file_data.cFileName));
+ }
+ } while (FindNextFileW(file_handle, &file_data));
+ return true;
+ }
+ return false;
+}
+
+#else // XR_OS_LINUX/XR_OS_APPLE fallback
+
+// simple POSIX-compatible implementation of the <filesystem> pieces used by OpenXR
+
+bool FileSysUtilsIsRegularFile(const std::string& path) {
+ struct stat path_stat;
+ stat(path.c_str(), &path_stat);
+ return S_ISREG(path_stat.st_mode);
+}
+
+bool FileSysUtilsIsDirectory(const std::string& path) {
+ struct stat path_stat;
+ stat(path.c_str(), &path_stat);
+ return S_ISDIR(path_stat.st_mode);
+}
+
+bool FileSysUtilsPathExists(const std::string& path) { return (access(path.c_str(), F_OK) != -1); }
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) { return (path[0] == DIRECTORY_SYMBOL); }
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ char tmp_path[PATH_MAX];
+ if (nullptr != getcwd(tmp_path, PATH_MAX - 1)) {
+ path = tmp_path;
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ std::string full_path;
+ if (FileSysUtilsGetAbsolutePath(file_path, full_path)) {
+ std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL);
+ parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ // canonical path is absolute
+ return FileSysUtilsGetCanonicalPath(path, absolute);
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) {
+ char buf[PATH_MAX];
+ if (nullptr != realpath(path.c_str(), buf)) {
+ canonical = buf;
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ std::string::size_type parent_len = parent.length();
+ if (0 == parent_len || "." == parent || "./" == parent) {
+ combined = child;
+ return true;
+ }
+ char last_char = parent[parent_len - 1];
+ if (last_char == DIRECTORY_SYMBOL) {
+ parent_len--;
+ }
+ combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child;
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ DIR* dir = opendir(path.c_str());
+ if (dir == nullptr) {
+ return false;
+ }
+ struct dirent* entry;
+ while ((entry = readdir(dir)) != nullptr) {
+ files.emplace_back(entry->d_name);
+ }
+ closedir(dir);
+ return true;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/common/filesystem_utils.hpp b/thirdparty/openxr/src/common/filesystem_utils.hpp
new file mode 100644
index 0000000000..4a5c987e7b
--- /dev/null
+++ b/thirdparty/openxr/src/common/filesystem_utils.hpp
@@ -0,0 +1,46 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+// Determine if the path indicates a regular file (not a directory or symbolic link)
+bool FileSysUtilsIsRegularFile(const std::string& path);
+
+// Determine if the path indicates a directory
+bool FileSysUtilsIsDirectory(const std::string& path);
+
+// Determine if the provided path exists on the filesystem
+bool FileSysUtilsPathExists(const std::string& path);
+
+// Get the current directory
+bool FileSysUtilsGetCurrentPath(std::string& path);
+
+// Get the parent path of a file
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path);
+
+// Determine if the provided path is an absolute path
+bool FileSysUtilsIsAbsolutePath(const std::string& path);
+
+// Get the absolute path for a provided file
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute);
+
+// Get the absolute path for a provided file
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical);
+
+// Combine a parent and child directory
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined);
+
+// Parse out individual paths in a path list
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths);
+
+// Record all the filenames for files found in the provided path.
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files);
diff --git a/thirdparty/openxr/src/common/hex_and_handles.h b/thirdparty/openxr/src/common/hex_and_handles.h
new file mode 100644
index 0000000000..341013d32b
--- /dev/null
+++ b/thirdparty/openxr/src/common/hex_and_handles.h
@@ -0,0 +1,108 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+/*!
+ * @file
+ *
+ * Some utilities, primarily for working with OpenXR handles in a generic way.
+ */
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#include <string>
+#include <stdint.h>
+
+inline std::string to_hex(const uint8_t* const data, size_t bytes) {
+ std::string out(2 + bytes * 2, '?');
+ out[0] = '0';
+ out[1] = 'x';
+ static const char* hex = "0123456789abcdef";
+ auto ch = out.end();
+ for (size_t i = 0; i < bytes; ++i) {
+ auto b = data[i];
+ *--ch = hex[(b >> 0) & 0xf];
+ *--ch = hex[(b >> 4) & 0xf];
+ }
+ return out;
+}
+
+template <typename T>
+inline std::string to_hex(const T& data) {
+ return to_hex(reinterpret_cast<const uint8_t* const>(&data), sizeof(data));
+}
+
+#if XR_PTR_SIZE == 8
+/// Convert a handle into a same-sized integer.
+template <typename T>
+static inline uint64_t MakeHandleGeneric(T handle) {
+ return reinterpret_cast<uint64_t>(handle);
+}
+
+/// Treat an integer as a handle
+template <typename T>
+static inline T& TreatIntegerAsHandle(uint64_t& handle) {
+ return reinterpret_cast<T&>(handle);
+}
+
+/// @overload
+template <typename T>
+static inline T const& TreatIntegerAsHandle(uint64_t const& handle) {
+ return reinterpret_cast<T const&>(handle);
+}
+
+/// Does a correctly-sized integer represent a null handle?
+static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == reinterpret_cast<void*>(handle); }
+
+#else
+
+/// Convert a handle into a same-sized integer: no-op on 32-bit systems
+static inline uint64_t MakeHandleGeneric(uint64_t handle) { return handle; }
+
+/// Treat an integer as a handle: no-op on 32-bit systems
+template <typename T>
+static inline T& TreatIntegerAsHandle(uint64_t& handle) {
+ return handle;
+}
+
+/// @overload
+template <typename T>
+static inline T const& TreatIntegerAsHandle(uint64_t const& handle) {
+ return handle;
+}
+
+/// Does a correctly-sized integer represent a null handle?
+static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == handle; }
+
+#endif
+
+/// Turns a uint64_t into a string formatted as hex.
+///
+/// The core of the HandleToHexString implementation is in here.
+inline std::string Uint64ToHexString(uint64_t val) { return to_hex(val); }
+
+/// Turns a uint32_t into a string formatted as hex.
+inline std::string Uint32ToHexString(uint32_t val) { return to_hex(val); }
+
+/// Turns an OpenXR handle into a string formatted as hex.
+template <typename T>
+inline std::string HandleToHexString(T handle) {
+ return to_hex(handle);
+}
+
+/// Turns a pointer-sized integer into a string formatted as hex.
+inline std::string UintptrToHexString(uintptr_t val) { return to_hex(val); }
+
+/// Convert a pointer to a string formatted as hex.
+template <typename T>
+inline std::string PointerToHexString(T const* ptr) {
+ return to_hex(ptr);
+}
diff --git a/thirdparty/openxr/src/common/loader_interfaces.h b/thirdparty/openxr/src/common/loader_interfaces.h
new file mode 100644
index 0000000000..9c74ed16f3
--- /dev/null
+++ b/thirdparty/openxr/src/common/loader_interfaces.h
@@ -0,0 +1,114 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Forward declare.
+typedef struct XrApiLayerCreateInfo XrApiLayerCreateInfo;
+
+// Function pointer prototype for the xrCreateApiLayerInstance function used in place of xrCreateInstance.
+// This function allows us to pass special API layer information to each layer during the process of creating an Instance.
+typedef XrResult(XRAPI_PTR *PFN_xrCreateApiLayerInstance)(const XrInstanceCreateInfo *info,
+ const XrApiLayerCreateInfo *apiLayerInfo, XrInstance *instance);
+
+// Loader/API Layer Interface versions
+// 1 - First version, introduces negotiation structure and functions
+#define XR_CURRENT_LOADER_API_LAYER_VERSION 1
+
+// Loader/Runtime Interface versions
+// 1 - First version, introduces negotiation structure and functions
+#define XR_CURRENT_LOADER_RUNTIME_VERSION 1
+
+// Version negotiation values
+typedef enum XrLoaderInterfaceStructs {
+ XR_LOADER_INTERFACE_STRUCT_UNINTIALIZED = 0,
+ XR_LOADER_INTERFACE_STRUCT_LOADER_INFO,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST,
+ XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO,
+} XrLoaderInterfaceStructs;
+
+#define XR_LOADER_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateLoaderInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_LOADER_INFO
+ uint32_t structVersion; // XR_LOADER_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateLoaderInfo)
+ uint32_t minInterfaceVersion;
+ uint32_t maxInterfaceVersion;
+ XrVersion minApiVersion;
+ XrVersion maxApiVersion;
+} XrNegotiateLoaderInfo;
+
+#define XR_API_LAYER_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateApiLayerRequest {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST
+ uint32_t structVersion; // XR_API_LAYER_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateApiLayerRequest)
+ uint32_t layerInterfaceVersion; // CURRENT_LOADER_API_LAYER_VERSION
+ XrVersion layerApiVersion;
+ PFN_xrGetInstanceProcAddr getInstanceProcAddr;
+ PFN_xrCreateApiLayerInstance createApiLayerInstance;
+} XrNegotiateApiLayerRequest;
+
+#define XR_RUNTIME_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateRuntimeRequest {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST
+ uint32_t structVersion; // XR_RUNTIME_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateRuntimeRequest)
+ uint32_t runtimeInterfaceVersion; // CURRENT_LOADER_RUNTIME_VERSION
+ XrVersion runtimeApiVersion;
+ PFN_xrGetInstanceProcAddr getInstanceProcAddr;
+} XrNegotiateRuntimeRequest;
+
+// Function used to negotiate an interface betewen the loader and an API layer. Each library exposing one or
+// more API layers needs to expose at least this function.
+typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderApiLayerInterface)(const XrNegotiateLoaderInfo *loaderInfo,
+ const char *apiLayerName,
+ XrNegotiateApiLayerRequest *apiLayerRequest);
+
+// Function used to negotiate an interface betewen the loader and a runtime. Each runtime should expose
+// at least this function.
+typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderRuntimeInterface)(const XrNegotiateLoaderInfo *loaderInfo,
+ XrNegotiateRuntimeRequest *runtimeRequest);
+
+// Forward declare.
+typedef struct XrApiLayerNextInfo XrApiLayerNextInfo;
+
+#define XR_API_LAYER_NEXT_INFO_STRUCT_VERSION 1
+struct XrApiLayerNextInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO
+ uint32_t structVersion; // XR_API_LAYER_NEXT_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrApiLayerNextInfo)
+ char layerName[XR_MAX_API_LAYER_NAME_SIZE]; // Name of API layer which should receive this info
+ PFN_xrGetInstanceProcAddr nextGetInstanceProcAddr; // Pointer to next API layer's xrGetInstanceProcAddr
+ PFN_xrCreateApiLayerInstance nextCreateApiLayerInstance; // Pointer to next API layer's xrCreateApiLayerInstance
+ XrApiLayerNextInfo *next; // Pointer to the next API layer info in the sequence
+};
+
+#define XR_API_LAYER_MAX_SETTINGS_PATH_SIZE 512
+#define XR_API_LAYER_CREATE_INFO_STRUCT_VERSION 1
+typedef struct XrApiLayerCreateInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO
+ uint32_t structVersion; // XR_API_LAYER_CREATE_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrApiLayerCreateInfo)
+ void *loaderInstance; // Pointer to the LoaderInstance class
+ char settings_file_location[XR_API_LAYER_MAX_SETTINGS_PATH_SIZE]; // Location to the found settings file (or empty '\0')
+ XrApiLayerNextInfo *nextInfo; // Pointer to the next API layer's Info
+} XrApiLayerCreateInfo;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/thirdparty/openxr/src/common/object_info.cpp b/thirdparty/openxr/src/common/object_info.cpp
new file mode 100644
index 0000000000..95b5aaf404
--- /dev/null
+++ b/thirdparty/openxr/src/common/object_info.cpp
@@ -0,0 +1,276 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>
+// Ryan Pavlik <ryan.pavlik@collabora.com>
+// Dave Houlton <daveh@lunarg.com>
+//
+
+#include "object_info.h"
+
+#include "extra_algorithms.h"
+#include "hex_and_handles.h"
+
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <iterator>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "memory.h"
+
+std::string XrSdkLogObjectInfo::ToString() const {
+ std::ostringstream oss;
+ oss << Uint64ToHexString(handle);
+ if (!name.empty()) {
+ oss << " (" << name << ")";
+ }
+ return oss.str();
+}
+
+void ObjectInfoCollection::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ // If name is empty, we should erase it
+ if (object_name.empty()) {
+ RemoveObject(object_handle, object_type);
+ return;
+ }
+
+ // Otherwise, add it or update the name
+ XrSdkLogObjectInfo new_obj = {object_handle, object_type};
+
+ // If it already exists, update the name
+ auto lookup_info = LookUpStoredObjectInfo(new_obj);
+ if (lookup_info != nullptr) {
+ lookup_info->name = object_name;
+ return;
+ }
+
+ // It doesn't exist, so add a new info block
+ new_obj.name = object_name;
+ object_info_.push_back(new_obj);
+}
+
+void ObjectInfoCollection::RemoveObject(uint64_t object_handle, XrObjectType object_type) {
+ vector_remove_if_and_erase(
+ object_info_, [=](XrSdkLogObjectInfo const& info) { return info.handle == object_handle && info.type == object_type; });
+}
+
+XrSdkLogObjectInfo const* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const {
+ auto e = object_info_.end();
+ auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); });
+ if (it != e) {
+ return &(*it);
+ }
+ return nullptr;
+}
+
+XrSdkLogObjectInfo* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) {
+ auto e = object_info_.end();
+ auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); });
+ if (it != e) {
+ return &(*it);
+ }
+ return nullptr;
+}
+
+bool ObjectInfoCollection::LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const {
+ auto info_lookup = LookUpStoredObjectInfo(info.objectHandle, info.objectType);
+ if (info_lookup != nullptr) {
+ info.objectName = info_lookup->name.c_str();
+ return true;
+ }
+ return false;
+}
+
+bool ObjectInfoCollection::LookUpObjectName(XrSdkLogObjectInfo& info) const {
+ auto info_lookup = LookUpStoredObjectInfo(info);
+ if (info_lookup != nullptr) {
+ info.name = info_lookup->name;
+ return true;
+ }
+ return false;
+}
+
+static std::vector<XrDebugUtilsObjectNameInfoEXT> PopulateObjectNameInfo(std::vector<XrSdkLogObjectInfo> const& obj) {
+ std::vector<XrDebugUtilsObjectNameInfoEXT> ret;
+ ret.reserve(obj.size());
+ std::transform(obj.begin(), obj.end(), std::back_inserter(ret), [](XrSdkLogObjectInfo const& info) {
+ return XrDebugUtilsObjectNameInfoEXT{XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, nullptr, info.type, info.handle,
+ info.name.c_str()};
+ });
+ return ret;
+}
+
+NamesAndLabels::NamesAndLabels(std::vector<XrSdkLogObjectInfo> obj, std::vector<XrDebugUtilsLabelEXT> lab)
+ : sdk_objects(std::move(obj)), objects(PopulateObjectNameInfo(sdk_objects)), labels(std::move(lab)) {}
+
+void NamesAndLabels::PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& callback_data) const {
+ callback_data.objects = objects.empty() ? nullptr : const_cast<XrDebugUtilsObjectNameInfoEXT*>(objects.data());
+ callback_data.objectCount = static_cast<uint32_t>(objects.size());
+ callback_data.sessionLabels = labels.empty() ? nullptr : const_cast<XrDebugUtilsLabelEXT*>(labels.data());
+ callback_data.sessionLabelCount = static_cast<uint32_t>(labels.size());
+}
+
+void DebugUtilsData::LookUpSessionLabels(XrSession session, std::vector<XrDebugUtilsLabelEXT>& labels) const {
+ auto session_label_iterator = session_labels_.find(session);
+ if (session_label_iterator != session_labels_.end()) {
+ auto& XrSdkSessionLabels = *session_label_iterator->second;
+ // Copy the debug utils labels in reverse order in the the labels vector.
+ std::transform(XrSdkSessionLabels.rbegin(), XrSdkSessionLabels.rend(), std::back_inserter(labels),
+ [](XrSdkSessionLabelPtr const& label) { return label->debug_utils_label; });
+ }
+}
+
+XrSdkSessionLabel::XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual)
+ : label_name(label_info.labelName), debug_utils_label(label_info), is_individual_label(individual) {
+ // Update the c string pointer to the one we hold.
+ debug_utils_label.labelName = label_name.c_str();
+}
+
+XrSdkSessionLabelPtr XrSdkSessionLabel::make(const XrDebugUtilsLabelEXT& label_info, bool individual) {
+ XrSdkSessionLabelPtr ret(new XrSdkSessionLabel(label_info, individual));
+ return ret;
+}
+void DebugUtilsData::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ object_info_.AddObjectName(object_handle, object_type, object_name);
+}
+
+// We always want to remove the old individual label before we do anything else.
+// So, do that in it's own method
+void DebugUtilsData::RemoveIndividualLabel(XrSdkSessionLabelList& label_vec) {
+ if (!label_vec.empty() && label_vec.back()->is_individual_label) {
+ label_vec.pop_back();
+ }
+}
+
+XrSdkSessionLabelList* DebugUtilsData::GetSessionLabelList(XrSession session) {
+ auto session_label_iterator = session_labels_.find(session);
+ if (session_label_iterator == session_labels_.end()) {
+ return nullptr;
+ }
+ return session_label_iterator->second.get();
+}
+
+XrSdkSessionLabelList& DebugUtilsData::GetOrCreateSessionLabelList(XrSession session) {
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr == nullptr) {
+ std::unique_ptr<XrSdkSessionLabelList> vec(new XrSdkSessionLabelList);
+ vec_ptr = vec.get();
+ session_labels_[session] = std::move(vec);
+ }
+ return *vec_ptr;
+}
+
+void DebugUtilsData::BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info) {
+ auto& vec = GetOrCreateSessionLabelList(session);
+
+ // Individual labels do not stay around in the transition into a new label region
+ RemoveIndividualLabel(vec);
+
+ // Start the new label region
+ vec.emplace_back(XrSdkSessionLabel::make(label_info, false));
+}
+
+void DebugUtilsData::EndLabelRegion(XrSession session) {
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr == nullptr) {
+ return;
+ }
+
+ // Individual labels do not stay around in the transition out of label region
+ RemoveIndividualLabel(*vec_ptr);
+
+ // Remove the last label region
+ if (!vec_ptr->empty()) {
+ vec_ptr->pop_back();
+ }
+}
+
+void DebugUtilsData::InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info) {
+ auto& vec = GetOrCreateSessionLabelList(session);
+
+ // Remove any individual layer that might already be there
+ RemoveIndividualLabel(vec);
+
+ // Insert a new individual label
+ vec.emplace_back(XrSdkSessionLabel::make(label_info, true));
+}
+
+void DebugUtilsData::DeleteObject(uint64_t object_handle, XrObjectType object_type) {
+ object_info_.RemoveObject(object_handle, object_type);
+
+ if (object_type == XR_OBJECT_TYPE_SESSION) {
+ auto session = TreatIntegerAsHandle<XrSession>(object_handle);
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr != nullptr) {
+ session_labels_.erase(session);
+ }
+ }
+}
+
+void DebugUtilsData::DeleteSessionLabels(XrSession session) { session_labels_.erase(session); }
+
+NamesAndLabels DebugUtilsData::PopulateNamesAndLabels(std::vector<XrSdkLogObjectInfo> objects) const {
+ std::vector<XrDebugUtilsLabelEXT> labels;
+ for (auto& obj : objects) {
+ // Check for any names that have been associated with the objects and set them up here
+ object_info_.LookUpObjectName(obj);
+ // If this is a session, see if there are any labels associated with it for us to add
+ // to the callback content.
+ if (XR_OBJECT_TYPE_SESSION == obj.type) {
+ LookUpSessionLabels(obj.GetTypedHandle<XrSession>(), labels);
+ }
+ }
+
+ return {objects, labels};
+}
+
+void DebugUtilsData::WrapCallbackData(AugmentedCallbackData* aug_data,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) const {
+ // If there's nothing to add, just return the original data as the augmented copy
+ aug_data->exported_data = callback_data;
+ if (object_info_.Empty() || callback_data->objectCount == 0) {
+ return;
+ }
+
+ // Inspect each of the callback objects
+ bool name_found = false;
+ for (uint32_t obj = 0; obj < callback_data->objectCount; ++obj) {
+ auto& current_obj = callback_data->objects[obj];
+ name_found |= (nullptr != object_info_.LookUpStoredObjectInfo(current_obj.objectHandle, current_obj.objectType));
+
+ // If this is a session, record any labels associated with it
+ if (XR_OBJECT_TYPE_SESSION == current_obj.objectType) {
+ XrSession session = TreatIntegerAsHandle<XrSession>(current_obj.objectHandle);
+ LookUpSessionLabels(session, aug_data->labels);
+ }
+ }
+
+ // If we found nothing to add, return the original data
+ if (!name_found && aug_data->labels.empty()) {
+ return;
+ }
+
+ // Found additional data - modify an internal copy and return that as the exported data
+ memcpy(&aug_data->modified_data, callback_data, sizeof(XrDebugUtilsMessengerCallbackDataEXT));
+ aug_data->new_objects.assign(callback_data->objects, callback_data->objects + callback_data->objectCount);
+
+ // Record (overwrite) the names of all incoming objects provided in our internal list
+ for (auto& obj : aug_data->new_objects) {
+ object_info_.LookUpObjectName(obj);
+ }
+
+ // Update local copy & point export to it
+ aug_data->modified_data.objects = aug_data->new_objects.data();
+ aug_data->modified_data.sessionLabelCount = static_cast<uint32_t>(aug_data->labels.size());
+ aug_data->modified_data.sessionLabels = aug_data->labels.empty() ? nullptr : aug_data->labels.data();
+ aug_data->exported_data = &aug_data->modified_data;
+ return;
+}
diff --git a/thirdparty/openxr/src/common/object_info.h b/thirdparty/openxr/src/common/object_info.h
new file mode 100644
index 0000000000..8e9742b605
--- /dev/null
+++ b/thirdparty/openxr/src/common/object_info.h
@@ -0,0 +1,229 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Ryan Pavlik <ryan.pavlik@collabora.com
+//
+/*!
+ * @file
+ *
+ * The core of an XR_EXT_debug_utils implementation, used/shared by the loader and several SDK layers.
+ */
+
+#pragma once
+
+#include "hex_and_handles.h"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+struct XrSdkGenericObject {
+ //! Type-erased handle value
+ uint64_t handle;
+
+ //! Kind of object this handle refers to
+ XrObjectType type;
+ /// Un-erase the type of the handle and get it properly typed again.
+ ///
+ /// Note: Does not check the type before doing it!
+ template <typename HandleType>
+ HandleType& GetTypedHandle() {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! @overload
+ template <typename HandleType>
+ HandleType const& GetTypedHandle() const {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! Create from a typed handle and object type
+ template <typename T>
+ XrSdkGenericObject(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {}
+
+ //! Create from an untyped handle value (integer) and object type
+ XrSdkGenericObject(uint64_t h, XrObjectType t) : handle(h), type(t) {}
+};
+
+struct XrSdkLogObjectInfo {
+ //! Type-erased handle value
+ uint64_t handle;
+
+ //! Kind of object this handle refers to
+ XrObjectType type;
+
+ //! To be assigned by the application - not part of this object's identity
+ std::string name;
+
+ /// Un-erase the type of the handle and get it properly typed again.
+ ///
+ /// Note: Does not check the type before doing it!
+ template <typename HandleType>
+ HandleType& GetTypedHandle() {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! @overload
+ template <typename HandleType>
+ HandleType const& GetTypedHandle() const {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ XrSdkLogObjectInfo() = default;
+
+ //! Create from a typed handle and object type
+ template <typename T>
+ XrSdkLogObjectInfo(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {}
+
+ //! Create from an untyped handle value (integer) and object type
+ XrSdkLogObjectInfo(uint64_t h, XrObjectType t) : handle(h), type(t) {}
+ //! Create from an untyped handle value (integer), object type, and name
+ XrSdkLogObjectInfo(uint64_t h, XrObjectType t, const char* n) : handle(h), type(t), name(n == nullptr ? "" : n) {}
+
+ std::string ToString() const;
+};
+
+//! True if the two object infos have the same handle value and handle type
+static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrSdkLogObjectInfo const& b) {
+ return a.handle == b.handle && a.type == b.type;
+}
+
+//! @overload
+static inline bool Equivalent(XrDebugUtilsObjectNameInfoEXT const& a, XrSdkLogObjectInfo const& b) {
+ return a.objectHandle == b.handle && a.objectType == b.type;
+}
+
+//! @overload
+static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrDebugUtilsObjectNameInfoEXT const& b) { return Equivalent(b, a); }
+
+/// Object info registered with calls to xrSetDebugUtilsObjectNameEXT
+class ObjectInfoCollection {
+ public:
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+
+ void RemoveObject(uint64_t object_handle, XrObjectType object_type);
+
+ //! Find the stored object info, if any, matching handle and type.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo const* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const;
+
+ //! Find the stored object info, if any, matching handle and type.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info);
+
+ //! Find the stored object info, if any.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo const* LookUpStoredObjectInfo(uint64_t handle, XrObjectType type) const {
+ return LookUpStoredObjectInfo({handle, type});
+ }
+
+ //! Find the object name, if any, and update debug utils info accordingly.
+ //! Return true if found and updated.
+ bool LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const;
+
+ //! Find the object name, if any, and update logging info accordingly.
+ //! Return true if found and updated.
+ bool LookUpObjectName(XrSdkLogObjectInfo& info) const;
+
+ //! Is the collection empty?
+ bool Empty() const { return object_info_.empty(); }
+
+ private:
+ // Object names that have been set for given objects
+ std::vector<XrSdkLogObjectInfo> object_info_;
+};
+
+struct XrSdkSessionLabel;
+using XrSdkSessionLabelPtr = std::unique_ptr<XrSdkSessionLabel>;
+using XrSdkSessionLabelList = std::vector<XrSdkSessionLabelPtr>;
+
+struct XrSdkSessionLabel {
+ static XrSdkSessionLabelPtr make(const XrDebugUtilsLabelEXT& label_info, bool individual);
+
+ std::string label_name;
+ XrDebugUtilsLabelEXT debug_utils_label;
+ bool is_individual_label;
+
+ private:
+ XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual);
+};
+
+/// The metadata for a collection of objects. Must persist unmodified during the entire debug messenger call!
+struct NamesAndLabels {
+ NamesAndLabels() = default;
+ NamesAndLabels(std::vector<XrSdkLogObjectInfo> obj, std::vector<XrDebugUtilsLabelEXT> lab);
+ /// C++ structure owning the data (strings) backing the objects vector.
+ std::vector<XrSdkLogObjectInfo> sdk_objects;
+
+ std::vector<XrDebugUtilsObjectNameInfoEXT> objects;
+ std::vector<XrDebugUtilsLabelEXT> labels;
+
+ /// Populate the debug utils callback data structure.
+ void PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& data) const;
+ // XrDebugUtilsMessengerCallbackDataEXT MakeCallbackData() const;
+};
+
+struct AugmentedCallbackData {
+ std::vector<XrDebugUtilsLabelEXT> labels;
+ std::vector<XrDebugUtilsObjectNameInfoEXT> new_objects;
+ XrDebugUtilsMessengerCallbackDataEXT modified_data;
+ const XrDebugUtilsMessengerCallbackDataEXT* exported_data;
+};
+
+/// Tracks all the data (handle names and session labels) required to fully augment XR_EXT_debug_utils-related calls.
+class DebugUtilsData {
+ public:
+ DebugUtilsData() = default;
+
+ DebugUtilsData(const DebugUtilsData&) = delete;
+ DebugUtilsData& operator=(const DebugUtilsData&) = delete;
+
+ bool Empty() const { return object_info_.Empty() && session_labels_.empty(); }
+
+ //! Core of implementation for xrSetDebugUtilsObjectNameEXT
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+
+ /// Core of implementation for xrSessionBeginDebugUtilsLabelRegionEXT
+ void BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info);
+
+ /// Core of implementation for xrSessionEndDebugUtilsLabelRegionEXT
+ void EndLabelRegion(XrSession session);
+
+ /// Core of implementation for xrSessionInsertDebugUtilsLabelEXT
+ void InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info);
+
+ /// Removes all labels associated with a session - call in xrDestroySession and xrDestroyInstance (for all child sessions)
+ void DeleteSessionLabels(XrSession session);
+
+ /// Retrieve labels for the given session, if any, and push them in reverse order on the vector.
+ void LookUpSessionLabels(XrSession session, std::vector<XrDebugUtilsLabelEXT>& labels) const;
+
+ /// Removes all data related to this object - including session labels if it's a session.
+ ///
+ /// Does not take care of handling child objects - you must do this yourself.
+ void DeleteObject(uint64_t object_handle, XrObjectType object_type);
+
+ /// Given the collection of objects, populate their names and list of labels
+ NamesAndLabels PopulateNamesAndLabels(std::vector<XrSdkLogObjectInfo> objects) const;
+
+ void WrapCallbackData(AugmentedCallbackData* aug_data,
+ const XrDebugUtilsMessengerCallbackDataEXT* provided_callback_data) const;
+
+ private:
+ void RemoveIndividualLabel(XrSdkSessionLabelList& label_vec);
+ XrSdkSessionLabelList* GetSessionLabelList(XrSession session);
+ XrSdkSessionLabelList& GetOrCreateSessionLabelList(XrSession session);
+
+ // Session labels: one vector of them per session.
+ std::unordered_map<XrSession, std::unique_ptr<XrSdkSessionLabelList>> session_labels_;
+
+ // Names for objects.
+ ObjectInfoCollection object_info_;
+};
diff --git a/thirdparty/openxr/src/common/platform_utils.hpp b/thirdparty/openxr/src/common/platform_utils.hpp
new file mode 100644
index 0000000000..85d5cdab10
--- /dev/null
+++ b/thirdparty/openxr/src/common/platform_utils.hpp
@@ -0,0 +1,345 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#pragma once
+
+#include "xr_dependencies.h"
+#include <string>
+#include <stdlib.h>
+
+// OpenXR paths and registry key locations
+#define OPENXR_RELATIVE_PATH "openxr/"
+#define OPENXR_IMPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/implicit.d"
+#define OPENXR_EXPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/explicit.d"
+#ifdef XR_OS_WINDOWS
+#define OPENXR_REGISTRY_LOCATION "SOFTWARE\\Khronos\\OpenXR\\"
+#define OPENXR_IMPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Implicit"
+#define OPENXR_EXPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Explicit"
+#endif
+
+// OpenXR Loader environment variables of interest
+#define OPENXR_RUNTIME_JSON_ENV_VAR "XR_RUNTIME_JSON"
+#define OPENXR_API_LAYER_PATH_ENV_VAR "XR_API_LAYER_PATH"
+
+// This is a CMake generated file with #defines for any functions/includes
+// that it found present and build-time configuration.
+// If you don't have this file, on non-Windows you'll need to define
+// one of HAVE_SECURE_GETENV or HAVE___SECURE_GETENV depending on which
+// of secure_getenv or __secure_getenv are present
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+// Environment variables
+#if defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <iostream>
+
+namespace detail {
+
+static inline char* ImplGetEnv(const char* name) { return getenv(name); }
+
+static inline int ImplSetEnv(const char* name, const char* value, int overwrite) { return setenv(name, value, overwrite); }
+
+static inline char* ImplGetSecureEnv(const char* name) {
+#ifdef HAVE_SECURE_GETENV
+ return secure_getenv(name);
+#elif defined(HAVE___SECURE_GETENV)
+ return __secure_getenv(name);
+#else
+#pragma message( \
+ "Warning: Falling back to non-secure getenv for environmental" \
+ "lookups! Consider updating to a different libc.")
+
+ return ImplGetEnv(name);
+#endif
+}
+} // namespace detail
+
+#endif // defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
+#if defined(XR_OS_LINUX)
+
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ auto str = detail::ImplGetEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ auto str = detail::ImplGetSecureEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
+
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const int shouldOverwrite = 1;
+ int result = detail::ImplSetEnv(name, value, shouldOverwrite);
+ return (result == 0);
+}
+
+#elif defined(XR_OS_APPLE)
+
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ auto str = detail::ImplGetEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ auto str = detail::ImplGetSecureEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
+
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const int shouldOverwrite = 1;
+ int result = detail::ImplSetEnv(name, value, shouldOverwrite);
+ return (result == 0);
+}
+
+// Prefix for the Apple global runtime JSON file name
+static const std::string rt_dir_prefix = "/usr/local/share/openxr/";
+static const std::string rt_filename = "/active_runtime.json";
+
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
+ file_name = rt_dir_prefix;
+ file_name += std::to_string(major_version);
+ file_name += rt_filename;
+ return true;
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+#if !defined(NDEBUG)
+inline void LogError(const std::string& error) { OutputDebugStringA(error.c_str()); }
+#else
+#define LogError(x)
+#endif
+
+inline std::wstring utf8_to_wide(const std::string& utf8Text) {
+ if (utf8Text.empty()) {
+ return {};
+ }
+
+ std::wstring wideText;
+ const int wideLength = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), nullptr, 0);
+ if (wideLength == 0) {
+ LogError("utf8_to_wide get size error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ // MultiByteToWideChar returns number of chars of the input buffer, regardless of null terminitor
+ wideText.resize(wideLength, 0);
+ wchar_t* wideString = const_cast<wchar_t*>(wideText.data()); // mutable data() only exists in c++17
+ const int length = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), wideString, wideLength);
+ if (length != wideLength) {
+ LogError("utf8_to_wide convert string error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ return wideText;
+}
+
+inline std::string wide_to_utf8(const std::wstring& wideText) {
+ if (wideText.empty()) {
+ return {};
+ }
+
+ std::string narrowText;
+ int narrowLength = ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), nullptr, 0, nullptr, nullptr);
+ if (narrowLength == 0) {
+ LogError("wide_to_utf8 get size error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ // WideCharToMultiByte returns number of chars of the input buffer, regardless of null terminitor
+ narrowText.resize(narrowLength, 0);
+ char* narrowString = const_cast<char*>(narrowText.data()); // mutable data() only exists in c++17
+ const int length =
+ ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), narrowString, narrowLength, nullptr, nullptr);
+ if (length != narrowLength) {
+ LogError("wide_to_utf8 convert string error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ return narrowText;
+}
+
+// Returns true if the current process has an integrity level > SECURITY_MANDATORY_MEDIUM_RID.
+static inline bool IsHighIntegrityLevel() {
+ // Execute this check once and save the value as a static bool.
+ static bool isHighIntegrityLevel = ([] {
+ HANDLE processToken;
+ if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_QUERY_SOURCE, &processToken)) {
+ // Maximum possible size of SID_AND_ATTRIBUTES is maximum size of a SID + size of attributes DWORD.
+ uint8_t mandatoryLabelBuffer[SECURITY_MAX_SID_SIZE + sizeof(DWORD)]{};
+ DWORD bufferSize;
+ if (GetTokenInformation(processToken, TokenIntegrityLevel, mandatoryLabelBuffer, sizeof(mandatoryLabelBuffer),
+ &bufferSize) != 0) {
+ const auto mandatoryLabel = reinterpret_cast<const TOKEN_MANDATORY_LABEL*>(mandatoryLabelBuffer);
+ if (mandatoryLabel->Label.Sid != 0) {
+ const DWORD subAuthorityCount = *GetSidSubAuthorityCount(mandatoryLabel->Label.Sid);
+ const DWORD integrityLevel = *GetSidSubAuthority(mandatoryLabel->Label.Sid, subAuthorityCount - 1);
+ CloseHandle(processToken);
+ return integrityLevel > SECURITY_MANDATORY_MEDIUM_RID;
+ }
+ }
+
+ CloseHandle(processToken);
+ }
+
+ return false;
+ })();
+
+ return isHighIntegrityLevel;
+}
+
+// Returns true if the given environment variable exists.
+// The name is a case-sensitive UTF8 string.
+static inline bool PlatformUtilsGetEnvSet(const char* name) {
+ const std::wstring wname = utf8_to_wide(name);
+ const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0);
+ // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error.
+ return 0 != valSize;
+}
+
+// Returns the environment variable value for the given name.
+// Returns an empty string if the environment variable doesn't exist or if it exists but is empty.
+// Use PlatformUtilsGetEnvSet to tell if it exists.
+// The name is a case-sensitive UTF8 string.
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ const std::wstring wname = utf8_to_wide(name);
+ const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0);
+ // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error.
+ // The size includes the null-terminator, so a size of 1 is means the variable was explicitly set to empty.
+ if (valSize == 0 || valSize == 1) {
+ return {};
+ }
+
+ // GetEnvironmentVariable returns size including null terminator for "query size" call.
+ std::wstring wValue(valSize, 0);
+ wchar_t* wValueData = &wValue[0];
+
+ // GetEnvironmentVariable returns string length, excluding null terminator for "get value"
+ // call if there was enough capacity. Else it returns the required capacity (including null terminator).
+ const DWORD length = ::GetEnvironmentVariableW(wname.c_str(), wValueData, (DWORD)wValue.size());
+ if ((length == 0) || (length >= wValue.size())) { // If error or the variable increased length between calls...
+ LogError("GetEnvironmentVariable get value error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ wValue.resize(length); // Strip the null terminator.
+
+ return wide_to_utf8(wValue);
+}
+
+// Acts the same as PlatformUtilsGetEnv except returns an empty string if IsHighIntegrityLevel.
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes.
+ if (IsHighIntegrityLevel()) {
+ return {};
+ }
+
+ // No secure version for Windows so the above integrity check is needed.
+ return PlatformUtilsGetEnv(name);
+}
+
+// Sets an environment variable via UTF8 strings.
+// The name is case-sensitive.
+// Overwrites the variable if it already exists.
+// Returns true if it could be set.
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const std::wstring wname = utf8_to_wide(name);
+ const std::wstring wvalue = utf8_to_wide(value);
+ BOOL result = ::SetEnvironmentVariableW(wname.c_str(), wvalue.c_str());
+ return (result != 0);
+}
+
+#elif defined(XR_OS_ANDROID)
+
+static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
+ // Stub func
+ return false;
+}
+
+static inline std::string PlatformUtilsGetEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
+ // Stub func
+ return false;
+}
+
+#include <sys/stat.h>
+
+// Intended to be only used as a fallback on Android, with a more open, "native" technique used in most cases
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
+ // Prefix for the runtime JSON file name
+ static const char* rt_dir_prefixes[] = {"/oem", "/vendor", "/system"};
+ static const std::string rt_filename = "/active_runtime.json";
+ static const std::string subdir = "/etc/openxr/";
+ for (const auto prefix : rt_dir_prefixes) {
+ auto path = prefix + subdir + std::to_string(major_version) + rt_filename;
+ struct stat buf;
+ if (0 == stat(path.c_str(), &buf)) {
+ file_name = path;
+ return true;
+ }
+ }
+ return false;
+}
+#else // Not Linux, Apple, nor Windows
+
+static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
+ // Stub func
+ return false;
+}
+
+static inline std::string PlatformUtilsGetEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
+ // Stub func
+ return false;
+}
+
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t /* major_version */, std::string const& /* file_name */) {
+ // Stub func
+ return false;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/common/stdfs_conditions.h b/thirdparty/openxr/src/common/stdfs_conditions.h
new file mode 100644
index 0000000000..6dc18cc620
--- /dev/null
+++ b/thirdparty/openxr/src/common/stdfs_conditions.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
+#ifndef _STDFS_CONDITIONS_H
+#define _STDFS_CONDITIONS_H
+
+// If the C++ macro is set to the version containing C++17, it must support
+// the final C++17 package
+#if __cplusplus >= 201703L
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+
+#elif defined(_MSC_VER) && _MSC_VER >= 1900
+
+#if defined(_HAS_CXX17) && _HAS_CXX17
+// When MSC supports c++17 use <filesystem> package.
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#endif // !_HAS_CXX17
+
+// GCC supports the experimental filesystem items starting in GCC 6
+#elif (__GNUC__ >= 6)
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+
+// If Clang, check for feature support
+#elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem)
+#if __cpp_lib_filesystem
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#else
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+#endif
+
+// If all above fails, fall back to standard C++ and OS-specific items
+#else
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 0
+#endif
+
+#endif // !_STDFS_CONDITIONS_H
diff --git a/thirdparty/openxr/src/common/xr_dependencies.h b/thirdparty/openxr/src/common/xr_dependencies.h
new file mode 100644
index 0000000000..e34527abc3
--- /dev/null
+++ b/thirdparty/openxr/src/common/xr_dependencies.h
@@ -0,0 +1,89 @@
+// Copyright (c) 2018-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// This file includes headers with types which openxr.h depends on in order
+// to compile when platforms, graphics apis, and the like are enabled.
+
+#pragma once
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#include <android/native_window.h>
+#include <android/window.h>
+#include <android/native_window_jni.h>
+#endif // XR_USE_PLATFORM_ANDROID
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#include <winapifamily.h>
+#if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM))
+// Enable desktop partition APIs, such as RegOpenKeyEx, LoadLibraryEx, PathFileExists etc.
+#undef WINAPI_PARTITION_DESKTOP
+#define WINAPI_PARTITION_DESKTOP 1
+#endif
+
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif // !NOMINMAX
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif // !WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+#include <unknwn.h>
+
+#endif // XR_USE_PLATFORM_WIN32
+
+#ifdef XR_USE_GRAPHICS_API_D3D11
+#include <d3d11.h>
+#endif // XR_USE_GRAPHICS_API_D3D11
+
+#ifdef XR_USE_GRAPHICS_API_D3D12
+#include <d3d12.h>
+#endif // XR_USE_GRAPHICS_API_D3D12
+
+#ifdef XR_USE_PLATFORM_XLIB
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef Success
+#undef Success
+#endif // Success
+
+#ifdef Always
+#undef Always
+#endif // Always
+
+#ifdef None
+#undef None
+#endif // None
+#endif // XR_USE_PLATFORM_XLIB
+
+#ifdef XR_USE_PLATFORM_XCB
+#include <xcb/xcb.h>
+#endif // XR_USE_PLATFORM_XCB
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL
+#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
+#include <GL/glx.h>
+#endif // (XR_USE_PLATFORM_XLIB || XR_USE_PLATFORM_XCB)
+#ifdef XR_USE_PLATFORM_XCB
+#include <xcb/glx.h>
+#endif // XR_USE_PLATFORM_XCB
+#ifdef XR_USE_PLATFORM_MACOS
+#include <CL/cl_gl_ext.h>
+#endif // XR_USE_PLATFORM_MACOS
+#endif // XR_USE_GRAPHICS_API_OPENGL
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+#include <EGL/egl.h>
+#endif // XR_USE_GRAPHICS_API_OPENGL_ES
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+#include <vulkan/vulkan.h>
+#endif // XR_USE_GRAPHICS_API_VULKAN
+
+#ifdef XR_USE_PLATFORM_WAYLAND
+#include "wayland-client.h"
+#endif // XR_USE_PLATFORM_WAYLAND
diff --git a/thirdparty/openxr/src/common/xr_linear.h b/thirdparty/openxr/src/common/xr_linear.h
new file mode 100644
index 0000000000..9ffb49a4b6
--- /dev/null
+++ b/thirdparty/openxr/src/common/xr_linear.h
@@ -0,0 +1,787 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2016 Oculus VR, LLC.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: J.M.P. van Waveren
+//
+
+#ifndef XR_LINEAR_H_
+#define XR_LINEAR_H_
+
+#if defined(OS_LINUX_XCB) || defined(OS_LINUX_XCB_GLX) || defined(OS_LINUX_WAYLAND)
+#pragma GCC diagnostic ignored "-Wunused-function"
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+#include <openxr/openxr.h>
+
+/*
+================================================================================================
+
+Description : Vector, matrix and quaternion math.
+Author : J.M.P. van Waveren
+Date : 12/10/2016
+Language : C99
+Format : Indent 4 spaces - no tabs.
+Copyright : Copyright (c) 2016 Oculus VR, LLC. All Rights reserved.
+
+
+DESCRIPTION
+===========
+
+All matrices are column-major.
+
+INTERFACE
+=========
+
+XrVector2f
+XrVector3f
+XrVector4f
+XrQuaternionf
+XrMatrix4x4f
+
+inline static void XrVector3f_Set(XrVector3f* v, const float value);
+inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value);
+inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction);
+inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor);
+inline static void XrVector3f_Normalize(XrVector3f* v);
+inline static float XrVector3f_Length(const XrVector3f* v);
+
+inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction);
+inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b;
+
+inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result);
+inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z);
+inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
+ const float degreesZ);
+inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z);
+inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation,
+ const XrQuaternionf* rotation, const XrVector3f* scale);
+inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, const float tanAngleLeft, const float tanAngleRight,
+ const float tanAngleUp, float const tanAngleDown, const float nearZ,
+ const float farZ);
+inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, const float fovDegreesLeft, const float fovDegreesRight,
+ const float fovDegreeUp, const float fovDegreesDown, const float nearZ,
+ const float farZ);
+inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* src);
+inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins,
+ const XrVector3f* maxs);
+
+inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon);
+
+inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src);
+
+inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b);
+inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+
+inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v);
+inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v);
+
+inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix,
+ const XrVector3f* mins, const XrVector3f* maxs);
+inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs);
+
+================================================================================================
+*/
+
+#include <assert.h>
+#include <math.h>
+#include <stdbool.h>
+
+#define MATH_PI 3.14159265358979323846f
+
+#define DEFAULT_NEAR_Z 0.015625f // exact floating point representation
+#define INFINITE_FAR_Z 0.0f
+
+static const XrColor4f XrColorRed = {1.0f, 0.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorGreen = {0.0f, 1.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorBlue = {0.0f, 0.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorYellow = {1.0f, 1.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorPurple = {1.0f, 0.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f};
+static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f};
+
+enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D };
+
+// Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience.
+struct XrMatrix4x4f {
+ float m[16];
+};
+
+inline static float XrRcpSqrt(const float x) {
+ const float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 )
+ const float rcp = (x >= SMALLEST_NON_DENORMAL) ? 1.0f / sqrtf(x) : 1.0f;
+ return rcp;
+}
+
+inline static void XrVector3f_Set(XrVector3f* v, const float value) {
+ v->x = value;
+ v->y = value;
+ v->z = value;
+}
+
+inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->x + b->x;
+ result->y = a->y + b->y;
+ result->z = a->z + b->z;
+}
+
+inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->x - b->x;
+ result->y = a->y - b->y;
+ result->z = a->z - b->z;
+}
+
+inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = (a->x < b->x) ? a->x : b->x;
+ result->y = (a->y < b->y) ? a->y : b->y;
+ result->z = (a->z < b->z) ? a->z : b->z;
+}
+
+inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = (a->x > b->x) ? a->x : b->x;
+ result->y = (a->y > b->y) ? a->y : b->y;
+ result->z = (a->z > b->z) ? a->z : b->z;
+}
+
+inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value) {
+ result->x = (fabsf(a->x) > value) ? ((a->x > 0.0f) ? (a->x - value) : (a->x + value)) : 0.0f;
+ result->y = (fabsf(a->y) > value) ? ((a->y > 0.0f) ? (a->y - value) : (a->y + value)) : 0.0f;
+ result->z = (fabsf(a->z) > value) ? ((a->z > 0.0f) ? (a->z - value) : (a->z + value)) : 0.0f;
+}
+
+inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction) {
+ result->x = a->x + fraction * (b->x - a->x);
+ result->y = a->y + fraction * (b->y - a->y);
+ result->z = a->z + fraction * (b->z - a->z);
+}
+
+inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor) {
+ result->x = a->x * scaleFactor;
+ result->y = a->y * scaleFactor;
+ result->z = a->z * scaleFactor;
+}
+
+inline static float XrVector3f_Dot(const XrVector3f* a, const XrVector3f* b) { return a->x * b->x + a->y * b->y + a->z * b->z; }
+
+// Compute cross product, which generates a normal vector.
+// Direction vector can be determined by right-hand rule: Pointing index finder in
+// direction a and middle finger in direction b, thumb will point in Cross(a, b).
+inline static void XrVector3f_Cross(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->y * b->z - a->z * b->y;
+ result->y = a->z * b->x - a->x * b->z;
+ result->z = a->x * b->y - a->y * b->x;
+}
+
+inline static void XrVector3f_Normalize(XrVector3f* v) {
+ const float lengthRcp = XrRcpSqrt(v->x * v->x + v->y * v->y + v->z * v->z);
+ v->x *= lengthRcp;
+ v->y *= lengthRcp;
+ v->z *= lengthRcp;
+}
+
+inline static float XrVector3f_Length(const XrVector3f* v) { return sqrtf(v->x * v->x + v->y * v->y + v->z * v->z); }
+
+inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians) {
+ float s = sinf(angleInRadians / 2.0f);
+ float lengthRcp = XrRcpSqrt(axis->x * axis->x + axis->y * axis->y + axis->z * axis->z);
+ result->x = s * axis->x * lengthRcp;
+ result->y = s * axis->y * lengthRcp;
+ result->z = s * axis->z * lengthRcp;
+ result->w = cosf(angleInRadians / 2.0f);
+}
+
+inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction) {
+ const float s = a->x * b->x + a->y * b->y + a->z * b->z + a->w * b->w;
+ const float fa = 1.0f - fraction;
+ const float fb = (s < 0.0f) ? -fraction : fraction;
+ const float x = a->x * fa + b->x * fb;
+ const float y = a->y * fa + b->y * fb;
+ const float z = a->z * fa + b->z * fb;
+ const float w = a->w * fa + b->w * fb;
+ const float lengthRcp = XrRcpSqrt(x * x + y * y + z * z + w * w);
+ result->x = x * lengthRcp;
+ result->y = y * lengthRcp;
+ result->z = z * lengthRcp;
+ result->w = w * lengthRcp;
+}
+
+inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b) {
+ result->x = (b->w * a->x) + (b->x * a->w) + (b->y * a->z) - (b->z * a->y);
+ result->y = (b->w * a->y) - (b->x * a->z) + (b->y * a->w) + (b->z * a->x);
+ result->z = (b->w * a->z) + (b->x * a->y) - (b->y * a->x) + (b->z * a->w);
+ result->w = (b->w * a->w) - (b->x * a->x) - (b->y * a->y) - (b->z * a->z);
+}
+
+// Use left-multiplication to accumulate transformations.
+inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b) {
+ result->m[0] = a->m[0] * b->m[0] + a->m[4] * b->m[1] + a->m[8] * b->m[2] + a->m[12] * b->m[3];
+ result->m[1] = a->m[1] * b->m[0] + a->m[5] * b->m[1] + a->m[9] * b->m[2] + a->m[13] * b->m[3];
+ result->m[2] = a->m[2] * b->m[0] + a->m[6] * b->m[1] + a->m[10] * b->m[2] + a->m[14] * b->m[3];
+ result->m[3] = a->m[3] * b->m[0] + a->m[7] * b->m[1] + a->m[11] * b->m[2] + a->m[15] * b->m[3];
+
+ result->m[4] = a->m[0] * b->m[4] + a->m[4] * b->m[5] + a->m[8] * b->m[6] + a->m[12] * b->m[7];
+ result->m[5] = a->m[1] * b->m[4] + a->m[5] * b->m[5] + a->m[9] * b->m[6] + a->m[13] * b->m[7];
+ result->m[6] = a->m[2] * b->m[4] + a->m[6] * b->m[5] + a->m[10] * b->m[6] + a->m[14] * b->m[7];
+ result->m[7] = a->m[3] * b->m[4] + a->m[7] * b->m[5] + a->m[11] * b->m[6] + a->m[15] * b->m[7];
+
+ result->m[8] = a->m[0] * b->m[8] + a->m[4] * b->m[9] + a->m[8] * b->m[10] + a->m[12] * b->m[11];
+ result->m[9] = a->m[1] * b->m[8] + a->m[5] * b->m[9] + a->m[9] * b->m[10] + a->m[13] * b->m[11];
+ result->m[10] = a->m[2] * b->m[8] + a->m[6] * b->m[9] + a->m[10] * b->m[10] + a->m[14] * b->m[11];
+ result->m[11] = a->m[3] * b->m[8] + a->m[7] * b->m[9] + a->m[11] * b->m[10] + a->m[15] * b->m[11];
+
+ result->m[12] = a->m[0] * b->m[12] + a->m[4] * b->m[13] + a->m[8] * b->m[14] + a->m[12] * b->m[15];
+ result->m[13] = a->m[1] * b->m[12] + a->m[5] * b->m[13] + a->m[9] * b->m[14] + a->m[13] * b->m[15];
+ result->m[14] = a->m[2] * b->m[12] + a->m[6] * b->m[13] + a->m[10] * b->m[14] + a->m[14] * b->m[15];
+ result->m[15] = a->m[3] * b->m[12] + a->m[7] * b->m[13] + a->m[11] * b->m[14] + a->m[15] * b->m[15];
+}
+
+// Creates the transpose of the given matrix.
+inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ result->m[0] = src->m[0];
+ result->m[1] = src->m[4];
+ result->m[2] = src->m[8];
+ result->m[3] = src->m[12];
+
+ result->m[4] = src->m[1];
+ result->m[5] = src->m[5];
+ result->m[6] = src->m[9];
+ result->m[7] = src->m[13];
+
+ result->m[8] = src->m[2];
+ result->m[9] = src->m[6];
+ result->m[10] = src->m[10];
+ result->m[11] = src->m[14];
+
+ result->m[12] = src->m[3];
+ result->m[13] = src->m[7];
+ result->m[14] = src->m[11];
+ result->m[15] = src->m[15];
+}
+
+// Returns a 3x3 minor of a 4x4 matrix.
+inline static float XrMatrix4x4f_Minor(const XrMatrix4x4f* matrix, int r0, int r1, int r2, int c0, int c1, int c2) {
+ return matrix->m[4 * r0 + c0] *
+ (matrix->m[4 * r1 + c1] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c1] * matrix->m[4 * r1 + c2]) -
+ matrix->m[4 * r0 + c1] *
+ (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c2]) +
+ matrix->m[4 * r0 + c2] *
+ (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c1] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c1]);
+}
+
+// Calculates the inverse of a 4x4 matrix.
+inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ const float rcpDet =
+ 1.0f / (src->m[0] * XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) - src->m[1] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) +
+ src->m[2] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) - src->m[3] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2));
+
+ result->m[0] = XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) * rcpDet;
+ result->m[1] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 1, 2, 3) * rcpDet;
+ result->m[2] = XrMatrix4x4f_Minor(src, 0, 1, 3, 1, 2, 3) * rcpDet;
+ result->m[3] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 1, 2, 3) * rcpDet;
+ result->m[4] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) * rcpDet;
+ result->m[5] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 2, 3) * rcpDet;
+ result->m[6] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 2, 3) * rcpDet;
+ result->m[7] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 2, 3) * rcpDet;
+ result->m[8] = XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) * rcpDet;
+ result->m[9] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 3) * rcpDet;
+ result->m[10] = XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 3) * rcpDet;
+ result->m[11] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 3) * rcpDet;
+ result->m[12] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2) * rcpDet;
+ result->m[13] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 2) * rcpDet;
+ result->m[14] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 2) * rcpDet;
+ result->m[15] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 2) * rcpDet;
+}
+
+// Calculates the inverse of a rigid body transform.
+inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ result->m[0] = src->m[0];
+ result->m[1] = src->m[4];
+ result->m[2] = src->m[8];
+ result->m[3] = 0.0f;
+ result->m[4] = src->m[1];
+ result->m[5] = src->m[5];
+ result->m[6] = src->m[9];
+ result->m[7] = 0.0f;
+ result->m[8] = src->m[2];
+ result->m[9] = src->m[6];
+ result->m[10] = src->m[10];
+ result->m[11] = 0.0f;
+ result->m[12] = -(src->m[0] * src->m[12] + src->m[1] * src->m[13] + src->m[2] * src->m[14]);
+ result->m[13] = -(src->m[4] * src->m[12] + src->m[5] * src->m[13] + src->m[6] * src->m[14]);
+ result->m[14] = -(src->m[8] * src->m[12] + src->m[9] * src->m[13] + src->m[10] * src->m[14]);
+ result->m[15] = 1.0f;
+}
+
+// Creates an identity matrix.
+inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result) {
+ result->m[0] = 1.0f;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = 1.0f;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = 1.0f;
+ result->m[11] = 0.0f;
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a translation matrix.
+inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z) {
+ result->m[0] = 1.0f;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = 1.0f;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = 1.0f;
+ result->m[11] = 0.0f;
+ result->m[12] = x;
+ result->m[13] = y;
+ result->m[14] = z;
+ result->m[15] = 1.0f;
+}
+
+// Creates a rotation matrix.
+// If -Z=forward, +Y=up, +X=right, then degreesX=pitch, degreesY=yaw, degreesZ=roll.
+inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
+ const float degreesZ) {
+ const float sinX = sinf(degreesX * (MATH_PI / 180.0f));
+ const float cosX = cosf(degreesX * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationX = {{1, 0, 0, 0, 0, cosX, sinX, 0, 0, -sinX, cosX, 0, 0, 0, 0, 1}};
+ const float sinY = sinf(degreesY * (MATH_PI / 180.0f));
+ const float cosY = cosf(degreesY * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationY = {{cosY, 0, -sinY, 0, 0, 1, 0, 0, sinY, 0, cosY, 0, 0, 0, 0, 1}};
+ const float sinZ = sinf(degreesZ * (MATH_PI / 180.0f));
+ const float cosZ = cosf(degreesZ * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationZ = {{cosZ, sinZ, 0, 0, -sinZ, cosZ, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}};
+ XrMatrix4x4f rotationXY;
+ XrMatrix4x4f_Multiply(&rotationXY, &rotationY, &rotationX);
+ XrMatrix4x4f_Multiply(result, &rotationZ, &rotationXY);
+}
+
+// Creates a scale matrix.
+inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z) {
+ result->m[0] = x;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = y;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = z;
+ result->m[11] = 0.0f;
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a matrix from a quaternion.
+inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* quat) {
+ const float x2 = quat->x + quat->x;
+ const float y2 = quat->y + quat->y;
+ const float z2 = quat->z + quat->z;
+
+ const float xx2 = quat->x * x2;
+ const float yy2 = quat->y * y2;
+ const float zz2 = quat->z * z2;
+
+ const float yz2 = quat->y * z2;
+ const float wx2 = quat->w * x2;
+ const float xy2 = quat->x * y2;
+ const float wz2 = quat->w * z2;
+ const float xz2 = quat->x * z2;
+ const float wy2 = quat->w * y2;
+
+ result->m[0] = 1.0f - yy2 - zz2;
+ result->m[1] = xy2 + wz2;
+ result->m[2] = xz2 - wy2;
+ result->m[3] = 0.0f;
+
+ result->m[4] = xy2 - wz2;
+ result->m[5] = 1.0f - xx2 - zz2;
+ result->m[6] = yz2 + wx2;
+ result->m[7] = 0.0f;
+
+ result->m[8] = xz2 + wy2;
+ result->m[9] = yz2 - wx2;
+ result->m[10] = 1.0f - xx2 - yy2;
+ result->m[11] = 0.0f;
+
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation,
+ const XrQuaternionf* rotation, const XrVector3f* scale) {
+ XrMatrix4x4f scaleMatrix;
+ XrMatrix4x4f_CreateScale(&scaleMatrix, scale->x, scale->y, scale->z);
+
+ XrMatrix4x4f rotationMatrix;
+ XrMatrix4x4f_CreateFromQuaternion(&rotationMatrix, rotation);
+
+ XrMatrix4x4f translationMatrix;
+ XrMatrix4x4f_CreateTranslation(&translationMatrix, translation->x, translation->y, translation->z);
+
+ XrMatrix4x4f combinedMatrix;
+ XrMatrix4x4f_Multiply(&combinedMatrix, &rotationMatrix, &scaleMatrix);
+ XrMatrix4x4f_Multiply(result, &translationMatrix, &combinedMatrix);
+}
+
+// Creates a projection matrix based on the specified dimensions.
+// The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API.
+// The far plane is placed at infinity if farZ <= nearZ.
+// An infinite projection matrix is preferred for rasterization because, except for
+// things *right* up against the near plane, it always provides better precision:
+// "Tightening the Precision of Perspective Rendering"
+// Paul Upchurch, Mathieu Desbrun
+// Journal of Graphics Tools, Volume 16, Issue 1, 2012
+inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const float tanAngleLeft,
+ const float tanAngleRight, const float tanAngleUp, float const tanAngleDown,
+ const float nearZ, const float farZ) {
+ const float tanAngleWidth = tanAngleRight - tanAngleLeft;
+
+ // Set to tanAngleDown - tanAngleUp for a clip space with positive Y down (Vulkan).
+ // Set to tanAngleUp - tanAngleDown for a clip space with positive Y up (OpenGL / D3D / Metal).
+ const float tanAngleHeight = graphicsApi == GRAPHICS_VULKAN ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown);
+
+ // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES).
+ // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal).
+ const float offsetZ = (graphicsApi == GRAPHICS_OPENGL || graphicsApi == GRAPHICS_OPENGL_ES) ? nearZ : 0;
+
+ if (farZ <= nearZ) {
+ // place the far plane at infinity
+ result->m[0] = 2.0f / tanAngleWidth;
+ result->m[4] = 0.0f;
+ result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
+ result->m[12] = 0.0f;
+
+ result->m[1] = 0.0f;
+ result->m[5] = 2.0f / tanAngleHeight;
+ result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
+ result->m[13] = 0.0f;
+
+ result->m[2] = 0.0f;
+ result->m[6] = 0.0f;
+ result->m[10] = -1.0f;
+ result->m[14] = -(nearZ + offsetZ);
+
+ result->m[3] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[11] = -1.0f;
+ result->m[15] = 0.0f;
+ } else {
+ // normal projection
+ result->m[0] = 2.0f / tanAngleWidth;
+ result->m[4] = 0.0f;
+ result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
+ result->m[12] = 0.0f;
+
+ result->m[1] = 0.0f;
+ result->m[5] = 2.0f / tanAngleHeight;
+ result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
+ result->m[13] = 0.0f;
+
+ result->m[2] = 0.0f;
+ result->m[6] = 0.0f;
+ result->m[10] = -(farZ + offsetZ) / (farZ - nearZ);
+ result->m[14] = -(farZ * (nearZ + offsetZ)) / (farZ - nearZ);
+
+ result->m[3] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[11] = -1.0f;
+ result->m[15] = 0.0f;
+ }
+}
+
+// Creates a projection matrix based on the specified FOV.
+inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const XrFovf fov,
+ const float nearZ, const float farZ) {
+ const float tanLeft = tanf(fov.angleLeft);
+ const float tanRight = tanf(fov.angleRight);
+
+ const float tanDown = tanf(fov.angleDown);
+ const float tanUp = tanf(fov.angleUp);
+
+ XrMatrix4x4f_CreateProjection(result, graphicsApi, tanLeft, tanRight, tanUp, tanDown, nearZ, farZ);
+}
+
+// Creates a matrix that transforms the -1 to 1 cube to cover the given 'mins' and 'maxs' transformed with the given 'matrix'.
+inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins,
+ const XrVector3f* maxs) {
+ const XrVector3f offset = {(maxs->x + mins->x) * 0.5f, (maxs->y + mins->y) * 0.5f, (maxs->z + mins->z) * 0.5f};
+ const XrVector3f scale = {(maxs->x - mins->x) * 0.5f, (maxs->y - mins->y) * 0.5f, (maxs->z - mins->z) * 0.5f};
+
+ result->m[0] = matrix->m[0] * scale.x;
+ result->m[1] = matrix->m[1] * scale.x;
+ result->m[2] = matrix->m[2] * scale.x;
+ result->m[3] = matrix->m[3] * scale.x;
+
+ result->m[4] = matrix->m[4] * scale.y;
+ result->m[5] = matrix->m[5] * scale.y;
+ result->m[6] = matrix->m[6] * scale.y;
+ result->m[7] = matrix->m[7] * scale.y;
+
+ result->m[8] = matrix->m[8] * scale.z;
+ result->m[9] = matrix->m[9] * scale.z;
+ result->m[10] = matrix->m[10] * scale.z;
+ result->m[11] = matrix->m[11] * scale.z;
+
+ result->m[12] = matrix->m[12] + matrix->m[0] * offset.x + matrix->m[4] * offset.y + matrix->m[8] * offset.z;
+ result->m[13] = matrix->m[13] + matrix->m[1] * offset.x + matrix->m[5] * offset.y + matrix->m[9] * offset.z;
+ result->m[14] = matrix->m[14] + matrix->m[2] * offset.x + matrix->m[6] * offset.y + matrix->m[10] * offset.z;
+ result->m[15] = matrix->m[15] + matrix->m[3] * offset.x + matrix->m[7] * offset.y + matrix->m[11] * offset.z;
+}
+
+// Returns true if the given matrix is affine.
+inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon) {
+ return fabsf(matrix->m[3]) <= epsilon && fabsf(matrix->m[7]) <= epsilon && fabsf(matrix->m[11]) <= epsilon &&
+ fabsf(matrix->m[15] - 1.0f) <= epsilon;
+}
+
+// Returns true if the given matrix is orthogonal.
+inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon) {
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 3; j++) {
+ if (i != j) {
+ if (fabsf(matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] +
+ matrix->m[4 * i + 2] * matrix->m[4 * j + 2]) > epsilon) {
+ return false;
+ }
+ if (fabsf(matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] +
+ matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j]) > epsilon) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+
+// Returns true if the given matrix is orthonormal.
+inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon) {
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 3; j++) {
+ const float kd = (i == j) ? 1.0f : 0.0f; // Kronecker delta
+ if (fabsf(kd - (matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] +
+ matrix->m[4 * i + 2] * matrix->m[4 * j + 2])) > epsilon) {
+ return false;
+ }
+ if (fabsf(kd - (matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] +
+ matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j])) > epsilon) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+// Returns true if the given matrix is a rigid body transform.
+inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon) {
+ return XrMatrix4x4f_IsAffine(matrix, epsilon) && XrMatrix4x4f_IsOrthonormal(matrix, epsilon);
+}
+
+// Get the translation from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ result->x = src->m[12];
+ result->y = src->m[13];
+ result->z = src->m[14];
+}
+
+// Get the rotation from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ const float rcpScaleX = XrRcpSqrt(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]);
+ const float rcpScaleY = XrRcpSqrt(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]);
+ const float rcpScaleZ = XrRcpSqrt(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]);
+ const float m[9] = {src->m[0] * rcpScaleX, src->m[1] * rcpScaleX, src->m[2] * rcpScaleX,
+ src->m[4] * rcpScaleY, src->m[5] * rcpScaleY, src->m[6] * rcpScaleY,
+ src->m[8] * rcpScaleZ, src->m[9] * rcpScaleZ, src->m[10] * rcpScaleZ};
+ if (m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] > 0.0f) {
+ float t = +m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->w = s * t;
+ result->z = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s;
+ result->y = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s;
+ result->x = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s;
+ } else if (m[0 * 3 + 0] > m[1 * 3 + 1] && m[0 * 3 + 0] > m[2 * 3 + 2]) {
+ float t = +m[0 * 3 + 0] - m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->x = s * t;
+ result->y = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s;
+ result->z = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s;
+ result->w = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s;
+ } else if (m[1 * 3 + 1] > m[2 * 3 + 2]) {
+ float t = -m[0 * 3 + 0] + m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->y = s * t;
+ result->x = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s;
+ result->w = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s;
+ result->z = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s;
+ } else {
+ float t = -m[0 * 3 + 0] - m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->z = s * t;
+ result->w = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s;
+ result->x = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s;
+ result->y = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s;
+ }
+}
+
+// Get the scale from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ result->x = sqrtf(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]);
+ result->y = sqrtf(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]);
+ result->z = sqrtf(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]);
+}
+
+// Transforms a 3D vector.
+inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v) {
+ const float w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15];
+ const float rcpW = 1.0f / w;
+ result->x = (m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12]) * rcpW;
+ result->y = (m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13]) * rcpW;
+ result->z = (m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14]) * rcpW;
+}
+
+// Transforms a 4D vector.
+inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v) {
+ result->x = m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12] * v->w;
+ result->y = m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13] * v->w;
+ result->z = m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14] * v->w;
+ result->w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15] * v->w;
+}
+
+// Transforms the 'mins' and 'maxs' bounds with the given 'matrix'.
+inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix,
+ const XrVector3f* mins, const XrVector3f* maxs) {
+ assert(XrMatrix4x4f_IsAffine(matrix, 1e-4f));
+
+ const XrVector3f center = {(mins->x + maxs->x) * 0.5f, (mins->y + maxs->y) * 0.5f, (mins->z + maxs->z) * 0.5f};
+ const XrVector3f extents = {maxs->x - center.x, maxs->y - center.y, maxs->z - center.z};
+ const XrVector3f newCenter = {matrix->m[0] * center.x + matrix->m[4] * center.y + matrix->m[8] * center.z + matrix->m[12],
+ matrix->m[1] * center.x + matrix->m[5] * center.y + matrix->m[9] * center.z + matrix->m[13],
+ matrix->m[2] * center.x + matrix->m[6] * center.y + matrix->m[10] * center.z + matrix->m[14]};
+ const XrVector3f newExtents = {
+ fabsf(extents.x * matrix->m[0]) + fabsf(extents.y * matrix->m[4]) + fabsf(extents.z * matrix->m[8]),
+ fabsf(extents.x * matrix->m[1]) + fabsf(extents.y * matrix->m[5]) + fabsf(extents.z * matrix->m[9]),
+ fabsf(extents.x * matrix->m[2]) + fabsf(extents.y * matrix->m[6]) + fabsf(extents.z * matrix->m[10])};
+ XrVector3f_Sub(resultMins, &newCenter, &newExtents);
+ XrVector3f_Add(resultMaxs, &newCenter, &newExtents);
+}
+
+// Returns true if the 'mins' and 'maxs' bounds is completely off to one side of the projection matrix.
+inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs) {
+ if (maxs->x <= mins->x && maxs->y <= mins->y && maxs->z <= mins->z) {
+ return false;
+ }
+
+ XrVector4f c[8];
+ for (int i = 0; i < 8; i++) {
+ const XrVector4f corner = {(i & 1) != 0 ? maxs->x : mins->x, (i & 2) != 0 ? maxs->y : mins->y,
+ (i & 4) != 0 ? maxs->z : mins->z, 1.0f};
+ XrMatrix4x4f_TransformVector4f(&c[i], mvp, &corner);
+ }
+
+ int i;
+ for (i = 0; i < 8; i++) {
+ if (c[i].x > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].x < c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+
+ for (i = 0; i < 8; i++) {
+ if (c[i].y > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].y < c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].z > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].z < c[i].w) {
+ break;
+ }
+ }
+ return i == 8;
+}
+
+#endif // XR_LINEAR_H_
diff --git a/thirdparty/openxr/src/external/jsoncpp/AUTHORS b/thirdparty/openxr/src/external/jsoncpp/AUTHORS
new file mode 100644
index 0000000000..e1fa0fc3ad
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/AUTHORS
@@ -0,0 +1,115 @@
+Baptiste Lepilleur <blep@users.sourceforge.net>
+
+Aaron Jacobs <aaronjjacobs@gmail.com>
+Aaron Jacobs <jacobsa@google.com>
+Adam Boseley <ABoseley@agjunction.com>
+Adam Boseley <adam.boseley@gmail.com>
+Aleksandr Derbenev <13alexac@gmail.com>
+Alexander Gazarov <DrMetallius@users.noreply.github.com>
+Alexander V. Brezgin <abrezgin@appliedtech.ru>
+Alexandr Brezgin <albrezgin@mail.ru>
+Alexey Kruchinin <alexey@mopals.com>
+Anton Indrawan <anton.indrawan@gmail.com>
+Baptiste Jonglez <git@bitsofnetworks.org>
+Baptiste Lepilleur <baptiste.lepilleur@gmail.com>
+Baruch Siach <baruch@tkos.co.il>
+Ben Boeckel <mathstuf@gmail.com>
+Benjamin Knecht <bknecht@logitech.com>
+Bernd Kuhls <bernd.kuhls@t-online.de>
+Billy Donahue <billydonahue@google.com>
+Braden McDorman <bmcdorman@gmail.com>
+Brandon Myers <bmyers1788@gmail.com>
+Brendan Drew <brendan.drew@daqri.com>
+chason <cxchao802@gmail.com>
+chenguoping <chenguopingdota@163.com>
+Chris Gilling <cgilling@iparadigms.com>
+Christopher Dawes <christopher.dawes.1981@googlemail.com>
+Christopher Dunn <cdunn2001@gmail.com>
+Chuck Atkins <chuck.atkins@kitware.com>
+Cody P Schafer <dev@codyps.com>
+Connor Manning <connor@hobu.co>
+Cory Quammen <cory.quammen@kitware.com>
+CristoÌvão B da Cruz e Silva <CrisXed@gmail.com>
+Daniel Krügler <daniel.kruegler@gmail.com>
+Dani-Hub <daniel.kruegler@googlemail.com>
+Dan Liu <gzliudan>
+datadiode <datadiode@users.noreply.github.com>
+datadiode <jochen.neubeck@vodafone.de>
+David Seifert <soap@gentoo.org>
+David West <david-west@idexx.com>
+dawesc <chris.dawes@eftlab.co.uk>
+Devin Jeanpierre <jeanpierreda@google.com>
+Dmitry Marakasov <amdmi3@amdmi3.ru>
+dominicpezzuto <dom@dompezzuto.com>
+Don Milham <dmilham@gmail.com>
+drgler <daniel.kruegler@gmail.com>
+ds283 <D.Seery@sussex.ac.uk>
+Egor Tensin <Egor.Tensin@gmail.com>
+eightnoteight <mr.eightnoteight@gmail.com>
+Evince <baneyue@gmail.com>
+filipjs <filipjs@users.noreply.github.com>
+findblar <ft@finbarr.ca>
+Florian Meier <florian.meier@koalo.de>
+Gaëtan Lehmann <gaetan.lehmann@gmail.com>
+Gaurav <g.gupta@samsung.com>
+Gergely Nagy <ngg@ngg.hu>
+Gida Pataki <gida.pataki@prezi.com>
+I3ck <buckmartin@buckmartin.de>
+Iñaki Baz Castillo <ibc@aliax.net>
+Jacco <jacco@geul.net>
+Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
+Jonas Platte <mail@jonasplatte.de>
+Jordan Bayles <bayles.jordan@gmail.com>
+Jörg Krause <joerg.krause@embedded.rocks>
+Keith Lea <keith@whamcitylights.com>
+Kevin Grant <kbradleygrant@gmail.com>
+Kirill V. Lyadvinsky <jia3ep@gmail.com>
+Kirill V. Lyadvinsky <mail@codeatcpp.com>
+Kobi Gurkan <kobigurk@gmail.com>
+Magnus Bjerke Vik <mbvett@gmail.com>
+Malay Shah <malays@users.sourceforge.net>
+Mara Kim <hacker.root@gmail.com>
+Marek Kotewicz <marek.kotewicz@gmail.com>
+Mark Lakata <mark@lakata.org>
+Mark Zeren <mzeren@vmware.com>
+Martin Buck <buckmartin@buckmartin.de>
+Martyn Gigg <martyn.gigg@gmail.com>
+Mattes D <github@xoft.cz>
+Matthias Loy <matthias.loy@hbm.com>
+Merlyn Morgan-Graham <kavika@gmail.com>
+Michael Shields <mshields@google.com>
+Michał Górny <mgorny@gentoo.org>
+Mike Naberezny <mike@naberezny.com>
+mloy <matthias.loy@googlemail.com>
+Motti <lanzkron@gmail.com>
+nnkur <nnkur@mail.ru>
+Omkar Wagh <owagh@owaghlinux.ny.tower-research.com>
+paulo <paulobrizolara@users.noreply.github.com>
+pavel.pimenov <pavel.pimenov@gmail.com>
+Paweł Bylica <chfast@gmail.com>
+Péricles Lopes Machado <pericles.raskolnikoff@gmail.com>
+Peter Spiess-Knafl <psk@autistici.org>
+pffang <pffang@vip.qq.com>
+Rémi Verschelde <remi@verschelde.fr>
+renu555 <renu.tyagi@samsung.com>
+Robert Dailey <rcdailey@gmail.com>
+Sam Clegg <sbc@chromium.org>
+selaselah <selah@outlook.com>
+Sergiy80 <sil2004@gmail.com>
+sergzub <sergzub@gmail.com>
+Stefan Schweter <stefan@schweter.it>
+Stefano Fiorentino <stefano.fiore84@gmail.com>
+Steffen Kieß <Steffen.Kiess@ipvs.uni-stuttgart.de>
+Steven Hahn <hahnse@ornl.gov>
+Stuart Eichert <stuart@fivemicro.com>
+SuperManitu <supermanitu@gmail.com>
+Techwolf <dring@g33kworld.net>
+Tengiz Sharafiev <btolfa+github@gmail.com>
+Tomasz Maciejewski <tmaciejewsk@gmail.com>
+Vicente Olivert Riera <Vincent.Riera@imgtec.com>
+xiaoyur347 <xiaoyur347@gmail.com>
+ycqiu <429148848@qq.com>
+yiqiju <fred_ju@selinc.com>
+Yu Xiaolei <dreifachstein@gmail.com>
+
+Google Inc.
diff --git a/thirdparty/openxr/src/external/jsoncpp/LICENSE b/thirdparty/openxr/src/external/jsoncpp/LICENSE
new file mode 100644
index 0000000000..c41a1d1c77
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/LICENSE
@@ -0,0 +1,55 @@
+The JsonCpp library's source code, including accompanying documentation,
+tests and demonstration applications, are licensed under the following
+conditions...
+
+Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all
+jurisdictions which recognize such a disclaimer. In such jurisdictions,
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and
+The JsonCpp Authors, and is released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this
+software may choose to accept it either as 1) Public Domain, 2) under the
+conditions of the MIT License (see below), or 3) under the terms of dual
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+ http://en.wikipedia.org/wiki/MIT_License
+
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+
+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.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h b/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h
new file mode 100644
index 0000000000..95ef8a5ec4
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h
@@ -0,0 +1,88 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ALLOCATOR_H_INCLUDED
+#define JSON_ALLOCATOR_H_INCLUDED
+
+#include <cstring>
+#include <memory>
+
+#pragma pack(push, 8)
+
+namespace Json {
+template <typename T> class SecureAllocator {
+public:
+ // Type definitions
+ using value_type = T;
+ using pointer = T*;
+ using const_pointer = const T*;
+ using reference = T&;
+ using const_reference = const T&;
+ using size_type = std::size_t;
+ using difference_type = std::ptrdiff_t;
+
+ /**
+ * Allocate memory for N items using the standard allocator.
+ */
+ pointer allocate(size_type n) {
+ // allocate using "global operator new"
+ return static_cast<pointer>(::operator new(n * sizeof(T)));
+ }
+
+ /**
+ * Release memory which was allocated for N items at pointer P.
+ *
+ * The memory block is filled with zeroes before being released.
+ */
+ void deallocate(pointer p, size_type n) {
+ // memset_s is used because memset may be optimized away by the compiler
+ memset_s(p, n * sizeof(T), 0, n * sizeof(T));
+ // free using "global operator delete"
+ ::operator delete(p);
+ }
+
+ /**
+ * Construct an item in-place at pointer P.
+ */
+ template <typename... Args> void construct(pointer p, Args&&... args) {
+ // construct using "placement new" and "perfect forwarding"
+ ::new (static_cast<void*>(p)) T(std::forward<Args>(args)...);
+ }
+
+ size_type max_size() const { return size_t(-1) / sizeof(T); }
+
+ pointer address(reference x) const { return std::addressof(x); }
+
+ const_pointer address(const_reference x) const { return std::addressof(x); }
+
+ /**
+ * Destroy an item in-place at pointer P.
+ */
+ void destroy(pointer p) {
+ // destroy using "explicit destructor"
+ p->~T();
+ }
+
+ // Boilerplate
+ SecureAllocator() {}
+ template <typename U> SecureAllocator(const SecureAllocator<U>&) {}
+ template <typename U> struct rebind { using other = SecureAllocator<U>; };
+};
+
+template <typename T, typename U>
+bool operator==(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+ return true;
+}
+
+template <typename T, typename U>
+bool operator!=(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+ return false;
+}
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_ALLOCATOR_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h b/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h
new file mode 100644
index 0000000000..666fa7f542
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ASSERTIONS_H_INCLUDED
+#define JSON_ASSERTIONS_H_INCLUDED
+
+#include <cstdlib>
+#include <sstream>
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+/** It should not be possible for a maliciously designed file to
+ * cause an abort() or seg-fault, so these macros are used only
+ * for pre-condition violations and internal logic errors.
+ */
+#if JSON_USE_EXCEPTION
+
+// @todo <= add detail about condition in exception
+#define JSON_ASSERT(condition) \
+ do { \
+ if (!(condition)) { \
+ Json::throwLogicError("assert json failed"); \
+ } \
+ } while (0)
+
+#define JSON_FAIL_MESSAGE(message) \
+ do { \
+ OStringStream oss; \
+ oss << message; \
+ Json::throwLogicError(oss.str()); \
+ abort(); \
+ } while (0)
+
+#else // JSON_USE_EXCEPTION
+
+#define JSON_ASSERT(condition) assert(condition)
+
+// The call to assert() will show the failure message in debug builds. In
+// release builds we abort, for a core-dump or debugger.
+#define JSON_FAIL_MESSAGE(message) \
+ { \
+ OStringStream oss; \
+ oss << message; \
+ assert(false && oss.str().c_str()); \
+ abort(); \
+ }
+
+#endif
+
+#define JSON_ASSERT_MESSAGE(condition, message) \
+ do { \
+ if (!(condition)) { \
+ JSON_FAIL_MESSAGE(message); \
+ } \
+ } while (0)
+
+#endif // JSON_ASSERTIONS_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/config.h b/thirdparty/openxr/src/external/jsoncpp/include/json/config.h
new file mode 100644
index 0000000000..6359273a22
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/config.h
@@ -0,0 +1,150 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+#include <cstddef>
+#include <cstdint>
+#include <istream>
+#include <memory>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <type_traits>
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+// Temporary, tracked for removal with issue #982.
+#ifndef JSON_USE_NULLREF
+#define JSON_USE_NULLREF 1
+#endif
+
+/// If defined, indicates that the source file is amalgamated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgamated header.
+// #define JSON_IS_AMALGAMATION
+
+// Export macros for DLL visibility
+#if defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#elif defined(__GNUC__) || defined(__clang__)
+#define JSON_API __attribute__((visibility("default")))
+#endif // if defined(_MSC_VER)
+
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_DLL_BUILD
+
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1800
+#error \
+ "ERROR: Visual Studio 12 (2013) with _MSC_VER=1800 is the oldest supported compiler with sufficient C++11 capabilities"
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1900
+// As recommended at
+// https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
+extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size,
+ const char* format, ...);
+#define jsoncpp_snprintf msvc_pre1900_c99_snprintf
+#else
+#define jsoncpp_snprintf std::snprintf
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+// JSONCPP_OVERRIDE is maintained for backwards compatibility of external tools.
+// C++11 should be used directly in JSONCPP.
+#define JSONCPP_OVERRIDE override
+
+#ifdef __clang__
+#if __has_extension(attribute_deprecated_with_message)
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#endif
+#elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc)
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__))
+#endif // GNUC version
+#elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates
+ // MSVC)
+#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#endif // __clang__ || __GNUC__ || _MSC_VER
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6))
+#define JSON_USE_INT64_DOUBLE_CONVERSION 1
+#endif
+
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "allocator.h"
+#include "version.h"
+
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+using Int = int;
+using UInt = unsigned int;
+#if defined(JSON_NO_INT64)
+using LargestInt = int;
+using LargestUInt = unsigned int;
+#undef JSON_HAS_INT64
+#else // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+using Int64 = __int64;
+using UInt64 = unsigned __int64;
+#else // if defined(_MSC_VER) // Other platforms, use long long
+using Int64 = int64_t;
+using UInt64 = uint64_t;
+#endif // if defined(_MSC_VER)
+using LargestInt = Int64;
+using LargestUInt = UInt64;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+
+template <typename T>
+using Allocator =
+ typename std::conditional<JSONCPP_USING_SECURE_MEMORY, SecureAllocator<T>,
+ std::allocator<T>>::type;
+using String = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
+using IStringStream =
+ std::basic_istringstream<String::value_type, String::traits_type,
+ String::allocator_type>;
+using OStringStream =
+ std::basic_ostringstream<String::value_type, String::traits_type,
+ String::allocator_type>;
+using IStream = std::istream;
+using OStream = std::ostream;
+} // namespace Json
+
+// Legacy names (formerly macros).
+using JSONCPP_STRING = Json::String;
+using JSONCPP_ISTRINGSTREAM = Json::IStringStream;
+using JSONCPP_OSTRINGSTREAM = Json::OStringStream;
+using JSONCPP_ISTREAM = Json::IStream;
+using JSONCPP_OSTREAM = Json::OStream;
+
+#endif // JSON_CONFIG_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h b/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h
new file mode 100644
index 0000000000..affe33a7f9
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h
@@ -0,0 +1,43 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class StreamWriter;
+class StreamWriterBuilder;
+class Writer;
+class FastWriter;
+class StyledWriter;
+class StyledStreamWriter;
+
+// reader.h
+class Reader;
+class CharReader;
+class CharReaderBuilder;
+
+// json_features.h
+class Features;
+
+// value.h
+using ArrayIndex = unsigned int;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/json.h b/thirdparty/openxr/src/external/jsoncpp/include/json/json.h
new file mode 100644
index 0000000000..5c776a1609
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/json.h
@@ -0,0 +1,15 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_JSON_H_INCLUDED
+#define JSON_JSON_H_INCLUDED
+
+#include "config.h"
+#include "json_features.h"
+#include "reader.h"
+#include "value.h"
+#include "writer.h"
+
+#endif // JSON_JSON_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h b/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h
new file mode 100644
index 0000000000..7c7e9f5de1
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FEATURES_H_INCLUDED
+#define JSON_FEATURES_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Configuration passed to reader and writer.
+ * This configuration object can be used to force the Reader or Writer
+ * to behave in a standard conforming way.
+ */
+class JSON_API Features {
+public:
+ /** \brief A configuration that allows all features and assumes all strings
+ * are UTF-8.
+ * - C & C++ comments are allowed
+ * - Root object can be any JSON value
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features all();
+
+ /** \brief A configuration that is strictly compatible with the JSON
+ * specification.
+ * - Comments are forbidden.
+ * - Root object must be either an array or an object value.
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features strictMode();
+
+ /** \brief Initialize the configuration like JsonConfig::allFeatures;
+ */
+ Features();
+
+ /// \c true if comments are allowed. Default: \c true.
+ bool allowComments_{true};
+
+ /// \c true if root must be either an array or an object value. Default: \c
+ /// false.
+ bool strictRoot_{false};
+
+ /// \c true if dropped null placeholders are allowed. Default: \c false.
+ bool allowDroppedNullPlaceholders_{false};
+
+ /// \c true if numeric object key are allowed. Default: \c false.
+ bool allowNumericKeys_{false};
+};
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_FEATURES_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h b/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h
new file mode 100644
index 0000000000..be0d7676ab
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h
@@ -0,0 +1,405 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_READER_H_INCLUDED
+#define JSON_READER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_features.h"
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <deque>
+#include <iosfwd>
+#include <istream>
+#include <stack>
+#include <string>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
+ * Value.
+ *
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+
+class JSON_API Reader {
+public:
+ using Char = char;
+ using Location = const Char*;
+
+ /** \brief An error tagged with where in the JSON text it was encountered.
+ *
+ * The offsets give the [start, limit) range of bytes within the text. Note
+ * that this is bytes, not codepoints.
+ */
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ /** \brief Constructs a Reader allowing all features for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader();
+
+ /** \brief Constructs a Reader allowing the specified feature set for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader(const Features& features);
+
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document.
+ *
+ * \param document UTF-8 encoded string containing the document
+ * to read.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const std::string& document, Value& root,
+ bool collectComments = true);
+
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded
+ * string of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string
+ * of the document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+
+ /// \brief Parse from input stream.
+ /// \see Json::operator>>(std::istream&, Json::Value&).
+ bool parse(IStream& is, Value& root, bool collectComments = true);
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ * \deprecated Use getFormattedErrorMessages() instead (typo fix).
+ */
+ JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
+ String getFormatedErrorMessages() const;
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ */
+ String getFormattedErrorMessages() const;
+
+ /** \brief Returns a vector of structured errors encountered while parsing.
+ *
+ * \return A (possibly empty) vector of StructuredError objects. Currently
+ * only one error can be returned, but the caller should tolerate multiple
+ * errors. This can occur if the parser recovers from a non-fatal parse
+ * error and then encounters additional errors.
+ */
+ std::vector<StructuredError> getStructuredErrors() const;
+
+ /** \brief Add a semantic error message.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \return \c true if the error was successfully added, \c false if the Value
+ * offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message);
+
+ /** \brief Add a semantic error message with extra context.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \param extra Additional JSON Value location to contextualize the error
+ * \return \c true if the error was successfully added, \c false if either
+ * Value offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message, const Value& extra);
+
+ /** \brief Return whether there are any errors.
+ *
+ * \return \c true if there are no errors to report \c false if errors have
+ * occurred.
+ */
+ bool good() const;
+
+private:
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ using Errors = std::deque<ErrorInfo>;
+
+ bool readToken(Token& token);
+ void skipSpaces();
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment();
+ bool readCppStyleComment();
+ bool readString();
+ void readNumber();
+ bool readValue();
+ bool readObject(Token& token);
+ bool readArray(Token& token);
+ bool decodeNumber(Token& token);
+ bool decodeNumber(Token& token, Value& decoded);
+ bool decodeString(Token& token);
+ bool decodeString(Token& token, String& decoded);
+ bool decodeDouble(Token& token);
+ bool decodeDouble(Token& token, Value& decoded);
+ bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
+ unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end, unsigned int& unicode);
+ bool addError(const String& message, Token& token, Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end, CommentPlacement placement);
+ void skipCommentTokens(Token& token);
+
+ static bool containsNewLine(Location begin, Location end);
+ static String normalizeEOL(Location begin, Location end);
+
+ using Nodes = std::stack<Value*>;
+ Nodes nodes_;
+ Errors errors_;
+ String document_;
+ Location begin_{};
+ Location end_{};
+ Location current_{};
+ Location lastValueEnd_{};
+ Value* lastValue_{};
+ String commentsBefore_;
+ Features features_;
+ bool collectComments_{};
+}; // Reader
+
+/** Interface for reading JSON from a char array.
+ */
+class JSON_API CharReader {
+public:
+ virtual ~CharReader() = default;
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document. The document must be a UTF-8 encoded string containing the
+ * document to read.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded string
+ * of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+ * document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it was
+ * successfully parsed.
+ * \param[out] errs Formatted error messages (if not NULL) a user
+ * friendly string that lists errors in the parsed
+ * document.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ virtual bool parse(char const* beginDoc, char const* endDoc, Value* root,
+ String* errs) = 0;
+
+ class JSON_API Factory {
+ public:
+ virtual ~Factory() = default;
+ /** \brief Allocate a CharReader via operator new().
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ virtual CharReader* newCharReader() const = 0;
+ }; // Factory
+}; // CharReader
+
+/** \brief Build a CharReader implementation.
+ *
+ * Usage:
+ * \code
+ * using namespace Json;
+ * CharReaderBuilder builder;
+ * builder["collectComments"] = false;
+ * Value value;
+ * String errs;
+ * bool ok = parseFromStream(builder, std::cin, &value, &errs);
+ * \endcode
+ */
+class JSON_API CharReaderBuilder : public CharReader::Factory {
+public:
+ // Note: We use a Json::Value so that we can add data-members to this class
+ // without a major version bump.
+ /** Configuration of this builder.
+ * These are case-sensitive.
+ * Available settings (case-sensitive):
+ * - `"collectComments": false or true`
+ * - true to collect comment and allow writing them back during
+ * serialization, false to discard comments. This parameter is ignored
+ * if allowComments is false.
+ * - `"allowComments": false or true`
+ * - true if comments are allowed.
+ * - `"allowTrailingCommas": false or true`
+ * - true if trailing commas in objects and arrays are allowed.
+ * - `"strictRoot": false or true`
+ * - true if root must be either an array or an object value
+ * - `"allowDroppedNullPlaceholders": false or true`
+ * - true if dropped null placeholders are allowed. (See
+ * StreamWriterBuilder.)
+ * - `"allowNumericKeys": false or true`
+ * - true if numeric object keys are allowed.
+ * - `"allowSingleQuotes": false or true`
+ * - true if '' are allowed for strings (both keys and values)
+ * - `"stackLimit": integer`
+ * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an
+ * exception.
+ * - This is a security issue (seg-faults caused by deeply nested JSON), so
+ * the default is low.
+ * - `"failIfExtra": false or true`
+ * - If true, `parse()` returns false when extra non-whitespace trails the
+ * JSON value in the input string.
+ * - `"rejectDupKeys": false or true`
+ * - If true, `parse()` returns false when a key is duplicated within an
+ * object.
+ * - `"allowSpecialFloats": false or true`
+ * - If true, special float values (NaNs and infinities) are allowed and
+ * their values are lossfree restorable.
+ * - `"skipBom": false or true`
+ * - If true, if the input starts with the Unicode byte order mark (BOM),
+ * it is skipped.
+ *
+ * You can examine 'settings_` yourself to see the defaults. You can also
+ * write and read them just like any JSON Value.
+ * \sa setDefaults()
+ */
+ Json::Value settings_;
+
+ CharReaderBuilder();
+ ~CharReaderBuilder() override;
+
+ CharReader* newCharReader() const override;
+
+ /** \return true if 'settings' are legal and consistent;
+ * otherwise, indicate bad settings via 'invalid'.
+ */
+ bool validate(Json::Value* invalid) const;
+
+ /** A simple way to update a specific setting.
+ */
+ Value& operator[](const String& key);
+
+ /** Called by ctor, but you can use this to reset settings_.
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
+ */
+ static void setDefaults(Json::Value* settings);
+ /** Same as old Features::strictMode().
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
+ */
+ static void strictMode(Json::Value* settings);
+};
+
+/** Consume entire stream and use its begin/end.
+ * Someday we might have a real StreamReader, but for now this
+ * is convenient.
+ */
+bool JSON_API parseFromStream(CharReader::Factory const&, IStream&, Value* root,
+ String* errs);
+
+/** \brief Read from 'sin' into 'root'.
+ *
+ * Always keep comments from the input JSON.
+ *
+ * This can be used to read a file into a particular sub-object.
+ * For example:
+ * \code
+ * Json::Value root;
+ * cin >> root["dir"]["file"];
+ * cout << root;
+ * \endcode
+ * Result:
+ * \verbatim
+ * {
+ * "dir": {
+ * "file": {
+ * // The input stream JSON would be nested here.
+ * }
+ * }
+ * }
+ * \endverbatim
+ * \throw std::exception on parse error.
+ * \see Json::operator<<()
+ */
+JSON_API IStream& operator>>(IStream&, Value&);
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_READER_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/value.h b/thirdparty/openxr/src/external/jsoncpp/include/json/value.h
new file mode 100644
index 0000000000..0edeb050ca
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/value.h
@@ -0,0 +1,935 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_H_INCLUDED
+#define JSON_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+// Conditional NORETURN attribute on the throw functions would:
+// a) suppress false positives from static code analysis
+// b) possibly improve optimization opportunities.
+#if !defined(JSONCPP_NORETURN)
+#if defined(_MSC_VER) && _MSC_VER == 1800
+#define JSONCPP_NORETURN __declspec(noreturn)
+#else
+#define JSONCPP_NORETURN [[noreturn]]
+#endif
+#endif
+
+// Support for '= delete' with template declarations was a late addition
+// to the c++11 standard and is rejected by clang 3.8 and Apple clang 8.2
+// even though these declare themselves to be c++11 compilers.
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#if defined(__clang__) && defined(__apple_build_version__)
+#if __apple_build_version__ <= 8000042
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#elif defined(__clang__)
+#if __clang_major__ == 3 && __clang_minor__ <= 8
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#endif
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#define JSONCPP_TEMPLATE_DELETE = delete
+#endif
+#endif
+
+#include <array>
+#include <exception>
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251 4275)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+/** \brief JSON (JavaScript Object Notation).
+ */
+namespace Json {
+
+#if JSON_USE_EXCEPTION
+/** Base class for all exceptions we throw.
+ *
+ * We use nothing but these internally. Of course, STL can throw others.
+ */
+class JSON_API Exception : public std::exception {
+public:
+ Exception(String msg);
+ ~Exception() noexcept override;
+ char const* what() const noexcept override;
+
+protected:
+ String msg_;
+};
+
+/** Exceptions which the user cannot easily avoid.
+ *
+ * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
+ *
+ * \remark derived from Json::Exception
+ */
+class JSON_API RuntimeError : public Exception {
+public:
+ RuntimeError(String const& msg);
+};
+
+/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
+ *
+ * These are precondition-violations (user bugs) and internal errors (our bugs).
+ *
+ * \remark derived from Json::Exception
+ */
+class JSON_API LogicError : public Exception {
+public:
+ LogicError(String const& msg);
+};
+#endif
+
+/// used internally
+JSONCPP_NORETURN void throwRuntimeError(String const& msg);
+/// used internally
+JSONCPP_NORETURN void throwLogicError(String const& msg);
+
+/** \brief Type of the value held by a Value object.
+ */
+enum ValueType {
+ nullValue = 0, ///< 'null' value
+ intValue, ///< signed integer value
+ uintValue, ///< unsigned integer value
+ realValue, ///< double value
+ stringValue, ///< UTF-8 string value
+ booleanValue, ///< bool value
+ arrayValue, ///< array value (ordered list)
+ objectValue ///< object value (collection of name/value pairs).
+};
+
+enum CommentPlacement {
+ commentBefore = 0, ///< a comment placed on the line before a value
+ commentAfterOnSameLine, ///< a comment just after a value on the same line
+ commentAfter, ///< a comment on the line after a value (only make sense for
+ /// root value)
+ numberOfCommentPlacement
+};
+
+/** \brief Type of precision for formatting of real values.
+ */
+enum PrecisionType {
+ significantDigits = 0, ///< we set max number of significant digits in string
+ decimalPlaces ///< we set max number of digits after "." in string
+};
+
+/** \brief Lightweight wrapper to tag static string.
+ *
+ * Value constructor and objectValue member assignment takes advantage of the
+ * StaticString and avoid the cost of string duplication when storing the
+ * string or the member name.
+ *
+ * Example of usage:
+ * \code
+ * Json::Value aValue( StaticString("some text") );
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+class JSON_API StaticString {
+public:
+ explicit StaticString(const char* czstring) : c_str_(czstring) {}
+
+ operator const char*() const { return c_str_; }
+
+ const char* c_str() const { return c_str_; }
+
+private:
+ const char* c_str_;
+};
+
+/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
+ *
+ * This class is a discriminated union wrapper that can represents a:
+ * - signed integer [range: Value::minInt - Value::maxInt]
+ * - unsigned integer (range: 0 - Value::maxUInt)
+ * - double
+ * - UTF-8 string
+ * - boolean
+ * - 'null'
+ * - an ordered list of Value
+ * - collection of name/value pairs (javascript object)
+ *
+ * The type of the held value is represented by a #ValueType and
+ * can be obtained using type().
+ *
+ * Values of an #objectValue or #arrayValue can be accessed using operator[]()
+ * methods.
+ * Non-const methods will automatically create the a #nullValue element
+ * if it does not exist.
+ * The sequence of an #arrayValue will be automatically resized and initialized
+ * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
+ *
+ * The get() methods can be used to obtain default value in the case the
+ * required element does not exist.
+ *
+ * It is possible to iterate over the list of member keys of an object using
+ * the getMemberNames() method.
+ *
+ * \note #Value string-length fit in size_t, but keys must be < 2^30.
+ * (The reason is an implementation detail.) A #CharReader will raise an
+ * exception if a bound is exceeded to avoid security holes in your app,
+ * but the Value API does *not* check bounds. That is the responsibility
+ * of the caller.
+ */
+class JSON_API Value {
+ friend class ValueIteratorBase;
+
+public:
+ using Members = std::vector<String>;
+ using iterator = ValueIterator;
+ using const_iterator = ValueConstIterator;
+ using UInt = Json::UInt;
+ using Int = Json::Int;
+#if defined(JSON_HAS_INT64)
+ using UInt64 = Json::UInt64;
+ using Int64 = Json::Int64;
+#endif // defined(JSON_HAS_INT64)
+ using LargestInt = Json::LargestInt;
+ using LargestUInt = Json::LargestUInt;
+ using ArrayIndex = Json::ArrayIndex;
+
+ // Required for boost integration, e. g. BOOST_TEST
+ using value_type = std::string;
+
+#if JSON_USE_NULLREF
+ // Binary compatibility kludges, do not use.
+ static const Value& null;
+ static const Value& nullRef;
+#endif
+
+ // null and nullRef are deprecated, use this instead.
+ static Value const& nullSingleton();
+
+ /// Minimum signed integer value that can be stored in a Json::Value.
+ static constexpr LargestInt minLargestInt =
+ LargestInt(~(LargestUInt(-1) / 2));
+ /// Maximum signed integer value that can be stored in a Json::Value.
+ static constexpr LargestInt maxLargestInt = LargestInt(LargestUInt(-1) / 2);
+ /// Maximum unsigned integer value that can be stored in a Json::Value.
+ static constexpr LargestUInt maxLargestUInt = LargestUInt(-1);
+
+ /// Minimum signed int value that can be stored in a Json::Value.
+ static constexpr Int minInt = Int(~(UInt(-1) / 2));
+ /// Maximum signed int value that can be stored in a Json::Value.
+ static constexpr Int maxInt = Int(UInt(-1) / 2);
+ /// Maximum unsigned int value that can be stored in a Json::Value.
+ static constexpr UInt maxUInt = UInt(-1);
+
+#if defined(JSON_HAS_INT64)
+ /// Minimum signed 64 bits int value that can be stored in a Json::Value.
+ static constexpr Int64 minInt64 = Int64(~(UInt64(-1) / 2));
+ /// Maximum signed 64 bits int value that can be stored in a Json::Value.
+ static constexpr Int64 maxInt64 = Int64(UInt64(-1) / 2);
+ /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
+ static constexpr UInt64 maxUInt64 = UInt64(-1);
+#endif // defined(JSON_HAS_INT64)
+ /// Default precision for real value for string representation.
+ static constexpr UInt defaultRealPrecision = 17;
+ // The constant is hard-coded because some compiler have trouble
+ // converting Value::maxUInt64 to a double correctly (AIX/xlC).
+ // Assumes that UInt64 is a 64 bits integer.
+ static constexpr double maxUInt64AsDouble = 18446744073709551615.0;
+// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler
+// when using gcc and clang backend compilers. CZString
+// cannot be defined as private. See issue #486
+#ifdef __NVCC__
+public:
+#else
+private:
+#endif
+#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+ class CZString {
+ public:
+ enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy };
+ CZString(ArrayIndex index);
+ CZString(char const* str, unsigned length, DuplicationPolicy allocate);
+ CZString(CZString const& other);
+ CZString(CZString&& other) noexcept;
+ ~CZString();
+ CZString& operator=(const CZString& other);
+ CZString& operator=(CZString&& other) noexcept;
+
+ bool operator<(CZString const& other) const;
+ bool operator==(CZString const& other) const;
+ ArrayIndex index() const;
+ // const char* c_str() const; ///< \deprecated
+ char const* data() const;
+ unsigned length() const;
+ bool isStaticString() const;
+
+ private:
+ void swap(CZString& other);
+
+ struct StringStorage {
+ unsigned policy_ : 2;
+ unsigned length_ : 30; // 1GB max
+ };
+
+ char const* cstr_; // actually, a prefixed string, unless policy is noDup
+ union {
+ ArrayIndex index_;
+ StringStorage storage_;
+ };
+ };
+
+public:
+ typedef std::map<CZString, Value> ObjectValues;
+#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+public:
+ /**
+ * \brief Create a default Value of the given type.
+ *
+ * This is a very useful constructor.
+ * To create an empty array, pass arrayValue.
+ * To create an empty object, pass objectValue.
+ * Another Value can then be set to this one by assignment.
+ * This is useful since clear() and resize() will not alter types.
+ *
+ * Examples:
+ * \code
+ * Json::Value null_value; // null
+ * Json::Value arr_value(Json::arrayValue); // []
+ * Json::Value obj_value(Json::objectValue); // {}
+ * \endcode
+ */
+ Value(ValueType type = nullValue);
+ Value(Int value);
+ Value(UInt value);
+#if defined(JSON_HAS_INT64)
+ Value(Int64 value);
+ Value(UInt64 value);
+#endif // if defined(JSON_HAS_INT64)
+ Value(double value);
+ Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
+ Value(const char* begin, const char* end); ///< Copy all, incl zeroes.
+ /**
+ * \brief Constructs a value from a static string.
+ *
+ * Like other value string constructor but do not duplicate the string for
+ * internal storage. The given string must remain alive after the call to
+ * this constructor.
+ *
+ * \note This works only for null-terminated strings. (We cannot change the
+ * size of this class, so we have nowhere to store the length, which might be
+ * computed later for various operations.)
+ *
+ * Example of usage:
+ * \code
+ * static StaticString foo("some text");
+ * Json::Value aValue(foo);
+ * \endcode
+ */
+ Value(const StaticString& value);
+ Value(const String& value);
+ Value(bool value);
+ Value(std::nullptr_t ptr) = delete;
+ Value(const Value& other);
+ Value(Value&& other) noexcept;
+ ~Value();
+
+ /// \note Overwrite existing comments. To preserve comments, use
+ /// #swapPayload().
+ Value& operator=(const Value& other);
+ Value& operator=(Value&& other) noexcept;
+
+ /// Swap everything.
+ void swap(Value& other);
+ /// Swap values but leave comments and source offsets in place.
+ void swapPayload(Value& other);
+
+ /// copy everything.
+ void copy(const Value& other);
+ /// copy values but leave comments and source offsets in place.
+ void copyPayload(const Value& other);
+
+ ValueType type() const;
+
+ /// Compare payload only, not comments etc.
+ bool operator<(const Value& other) const;
+ bool operator<=(const Value& other) const;
+ bool operator>=(const Value& other) const;
+ bool operator>(const Value& other) const;
+ bool operator==(const Value& other) const;
+ bool operator!=(const Value& other) const;
+ int compare(const Value& other) const;
+
+ const char* asCString() const; ///< Embedded zeroes could cause you trouble!
+#if JSONCPP_USING_SECURE_MEMORY
+ unsigned getCStringLength() const; // Allows you to understand the length of
+ // the CString
+#endif
+ String asString() const; ///< Embedded zeroes are possible.
+ /** Get raw char* of string-value.
+ * \return false if !string. (Seg-fault if str or end are NULL.)
+ */
+ bool getString(char const** begin, char const** end) const;
+ Int asInt() const;
+ UInt asUInt() const;
+#if defined(JSON_HAS_INT64)
+ Int64 asInt64() const;
+ UInt64 asUInt64() const;
+#endif // if defined(JSON_HAS_INT64)
+ LargestInt asLargestInt() const;
+ LargestUInt asLargestUInt() const;
+ float asFloat() const;
+ double asDouble() const;
+ bool asBool() const;
+
+ bool isNull() const;
+ bool isBool() const;
+ bool isInt() const;
+ bool isInt64() const;
+ bool isUInt() const;
+ bool isUInt64() const;
+ bool isIntegral() const;
+ bool isDouble() const;
+ bool isNumeric() const;
+ bool isString() const;
+ bool isArray() const;
+ bool isObject() const;
+
+ /// The `as<T>` and `is<T>` member function templates and specializations.
+ template <typename T> T as() const JSONCPP_TEMPLATE_DELETE;
+ template <typename T> bool is() const JSONCPP_TEMPLATE_DELETE;
+
+ bool isConvertibleTo(ValueType other) const;
+
+ /// Number of values in array or object
+ ArrayIndex size() const;
+
+ /// \brief Return true if empty array, empty object, or null;
+ /// otherwise, false.
+ bool empty() const;
+
+ /// Return !isNull()
+ explicit operator bool() const;
+
+ /// Remove all object members and array elements.
+ /// \pre type() is arrayValue, objectValue, or nullValue
+ /// \post type() is unchanged
+ void clear();
+
+ /// Resize the array to newSize elements.
+ /// New elements are initialized to null.
+ /// May only be called on nullValue or arrayValue.
+ /// \pre type() is arrayValue or nullValue
+ /// \post type() is arrayValue
+ void resize(ArrayIndex newSize);
+
+ //@{
+ /// Access an array element (zero based index). If the array contains less
+ /// than index element, then null value are inserted in the array so that
+ /// its size is index+1.
+ /// (You may need to say 'value[0u]' to get your compiler to distinguish
+ /// this from the operator[] which takes a string.)
+ Value& operator[](ArrayIndex index);
+ Value& operator[](int index);
+ //@}
+
+ //@{
+ /// Access an array element (zero based index).
+ /// (You may need to say 'value[0u]' to get your compiler to distinguish
+ /// this from the operator[] which takes a string.)
+ const Value& operator[](ArrayIndex index) const;
+ const Value& operator[](int index) const;
+ //@}
+
+ /// If the array contains at least index+1 elements, returns the element
+ /// value, otherwise returns defaultValue.
+ Value get(ArrayIndex index, const Value& defaultValue) const;
+ /// Return true if index < size().
+ bool isValidIndex(ArrayIndex index) const;
+ /// \brief Append value to array at the end.
+ ///
+ /// Equivalent to jsonvalue[jsonvalue.size()] = value;
+ Value& append(const Value& value);
+ Value& append(Value&& value);
+
+ /// \brief Insert value in array at specific index
+ bool insert(ArrayIndex index, const Value& newValue);
+ bool insert(ArrayIndex index, Value&& newValue);
+
+ /// Access an object value by name, create a null member if it does not exist.
+ /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
+ /// Exceeding that will cause an exception.
+ Value& operator[](const char* key);
+ /// Access an object value by name, returns null if there is no member with
+ /// that name.
+ const Value& operator[](const char* key) const;
+ /// Access an object value by name, create a null member if it does not exist.
+ /// \param key may contain embedded nulls.
+ Value& operator[](const String& key);
+ /// Access an object value by name, returns null if there is no member with
+ /// that name.
+ /// \param key may contain embedded nulls.
+ const Value& operator[](const String& key) const;
+ /** \brief Access an object value by name, create a null member if it does not
+ * exist.
+ *
+ * If the object has no entry for that name, then the member name used to
+ * store the new entry is not duplicated.
+ * Example of use:
+ * \code
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+ Value& operator[](const StaticString& key);
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ Value get(const char* key, const Value& defaultValue) const;
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ /// \note key may contain embedded nulls.
+ Value get(const char* begin, const char* end,
+ const Value& defaultValue) const;
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ /// \param key may contain embedded nulls.
+ Value get(const String& key, const Value& defaultValue) const;
+ /// Most general and efficient version of isMember()const, get()const,
+ /// and operator[]const
+ /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+ Value const* find(char const* begin, char const* end) const;
+ /// Most general and efficient version of object-mutators.
+ /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+ /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
+ Value* demand(char const* begin, char const* end);
+ /// \brief Remove and return the named member.
+ ///
+ /// Do nothing if it did not exist.
+ /// \pre type() is objectValue or nullValue
+ /// \post type() is unchanged
+ void removeMember(const char* key);
+ /// Same as removeMember(const char*)
+ /// \param key may contain embedded nulls.
+ void removeMember(const String& key);
+ /// Same as removeMember(const char* begin, const char* end, Value* removed),
+ /// but 'key' is null-terminated.
+ bool removeMember(const char* key, Value* removed);
+ /** \brief Remove the named map member.
+ *
+ * Update 'removed' iff removed.
+ * \param key may contain embedded nulls.
+ * \return true iff removed (no exceptions)
+ */
+ bool removeMember(String const& key, Value* removed);
+ /// Same as removeMember(String const& key, Value* removed)
+ bool removeMember(const char* begin, const char* end, Value* removed);
+ /** \brief Remove the indexed array element.
+ *
+ * O(n) expensive operations.
+ * Update 'removed' iff removed.
+ * \return true if removed (no exceptions)
+ */
+ bool removeIndex(ArrayIndex index, Value* removed);
+
+ /// Return true if the object has a member named key.
+ /// \note 'key' must be null-terminated.
+ bool isMember(const char* key) const;
+ /// Return true if the object has a member named key.
+ /// \param key may contain embedded nulls.
+ bool isMember(const String& key) const;
+ /// Same as isMember(String const& key)const
+ bool isMember(const char* begin, const char* end) const;
+
+ /// \brief Return a list of the member names.
+ ///
+ /// If null, return an empty list.
+ /// \pre type() is objectValue or nullValue
+ /// \post if type() was nullValue, it remains nullValue
+ Members getMemberNames() const;
+
+ /// \deprecated Always pass len.
+ JSONCPP_DEPRECATED("Use setComment(String const&) instead.")
+ void setComment(const char* comment, CommentPlacement placement) {
+ setComment(String(comment, strlen(comment)), placement);
+ }
+ /// Comments must be //... or /* ... */
+ void setComment(const char* comment, size_t len, CommentPlacement placement) {
+ setComment(String(comment, len), placement);
+ }
+ /// Comments must be //... or /* ... */
+ void setComment(String comment, CommentPlacement placement);
+ bool hasComment(CommentPlacement placement) const;
+ /// Include delimiters and embedded newlines.
+ String getComment(CommentPlacement placement) const;
+
+ String toStyledString() const;
+
+ const_iterator begin() const;
+ const_iterator end() const;
+
+ iterator begin();
+ iterator end();
+
+ // Accessors for the [start, limit) range of bytes within the JSON text from
+ // which this value was parsed, if any.
+ void setOffsetStart(ptrdiff_t start);
+ void setOffsetLimit(ptrdiff_t limit);
+ ptrdiff_t getOffsetStart() const;
+ ptrdiff_t getOffsetLimit() const;
+
+private:
+ void setType(ValueType v) {
+ bits_.value_type_ = static_cast<unsigned char>(v);
+ }
+ bool isAllocated() const { return bits_.allocated_; }
+ void setIsAllocated(bool v) { bits_.allocated_ = v; }
+
+ void initBasic(ValueType type, bool allocated = false);
+ void dupPayload(const Value& other);
+ void releasePayload();
+ void dupMeta(const Value& other);
+
+ Value& resolveReference(const char* key);
+ Value& resolveReference(const char* key, const char* end);
+
+ // struct MemberNamesTransform
+ //{
+ // typedef const char *result_type;
+ // const char *operator()( const CZString &name ) const
+ // {
+ // return name.c_str();
+ // }
+ //};
+
+ union ValueHolder {
+ LargestInt int_;
+ LargestUInt uint_;
+ double real_;
+ bool bool_;
+ char* string_; // if allocated_, ptr to { unsigned, char[] }.
+ ObjectValues* map_;
+ } value_;
+
+ struct {
+ // Really a ValueType, but types should agree for bitfield packing.
+ unsigned int value_type_ : 8;
+ // Unless allocated_, string_ must be null-terminated.
+ unsigned int allocated_ : 1;
+ } bits_;
+
+ class Comments {
+ public:
+ Comments() = default;
+ Comments(const Comments& that);
+ Comments(Comments&& that) noexcept;
+ Comments& operator=(const Comments& that);
+ Comments& operator=(Comments&& that) noexcept;
+ bool has(CommentPlacement slot) const;
+ String get(CommentPlacement slot) const;
+ void set(CommentPlacement slot, String comment);
+
+ private:
+ using Array = std::array<String, numberOfCommentPlacement>;
+ std::unique_ptr<Array> ptr_;
+ };
+ Comments comments_;
+
+ // [start, limit) byte offsets in the source JSON text from which this Value
+ // was extracted.
+ ptrdiff_t start_;
+ ptrdiff_t limit_;
+};
+
+template <> inline bool Value::as<bool>() const { return asBool(); }
+template <> inline bool Value::is<bool>() const { return isBool(); }
+
+template <> inline Int Value::as<Int>() const { return asInt(); }
+template <> inline bool Value::is<Int>() const { return isInt(); }
+
+template <> inline UInt Value::as<UInt>() const { return asUInt(); }
+template <> inline bool Value::is<UInt>() const { return isUInt(); }
+
+#if defined(JSON_HAS_INT64)
+template <> inline Int64 Value::as<Int64>() const { return asInt64(); }
+template <> inline bool Value::is<Int64>() const { return isInt64(); }
+
+template <> inline UInt64 Value::as<UInt64>() const { return asUInt64(); }
+template <> inline bool Value::is<UInt64>() const { return isUInt64(); }
+#endif
+
+template <> inline double Value::as<double>() const { return asDouble(); }
+template <> inline bool Value::is<double>() const { return isDouble(); }
+
+template <> inline String Value::as<String>() const { return asString(); }
+template <> inline bool Value::is<String>() const { return isString(); }
+
+/// These `as` specializations are type conversions, and do not have a
+/// corresponding `is`.
+template <> inline float Value::as<float>() const { return asFloat(); }
+template <> inline const char* Value::as<const char*>() const {
+ return asCString();
+}
+
+/** \brief Experimental and untested: represents an element of the "path" to
+ * access a node.
+ */
+class JSON_API PathArgument {
+public:
+ friend class Path;
+
+ PathArgument();
+ PathArgument(ArrayIndex index);
+ PathArgument(const char* key);
+ PathArgument(String key);
+
+private:
+ enum Kind { kindNone = 0, kindIndex, kindKey };
+ String key_;
+ ArrayIndex index_{};
+ Kind kind_{kindNone};
+};
+
+/** \brief Experimental and untested: represents a "path" to access a node.
+ *
+ * Syntax:
+ * - "." => root node
+ * - ".[n]" => elements at index 'n' of root node (an array value)
+ * - ".name" => member named 'name' of root node (an object value)
+ * - ".name1.name2.name3"
+ * - ".[0][1][2].name1[3]"
+ * - ".%" => member name is provided as parameter
+ * - ".[%]" => index is provided as parameter
+ */
+class JSON_API Path {
+public:
+ Path(const String& path, const PathArgument& a1 = PathArgument(),
+ const PathArgument& a2 = PathArgument(),
+ const PathArgument& a3 = PathArgument(),
+ const PathArgument& a4 = PathArgument(),
+ const PathArgument& a5 = PathArgument());
+
+ const Value& resolve(const Value& root) const;
+ Value resolve(const Value& root, const Value& defaultValue) const;
+ /// Creates the "path" to access the specified node and returns a reference on
+ /// the node.
+ Value& make(Value& root) const;
+
+private:
+ using InArgs = std::vector<const PathArgument*>;
+ using Args = std::vector<PathArgument>;
+
+ void makePath(const String& path, const InArgs& in);
+ void addPathInArg(const String& path, const InArgs& in,
+ InArgs::const_iterator& itInArg, PathArgument::Kind kind);
+ static void invalidPath(const String& path, int location);
+
+ Args args_;
+};
+
+/** \brief base class for Value iterators.
+ *
+ */
+class JSON_API ValueIteratorBase {
+public:
+ using iterator_category = std::bidirectional_iterator_tag;
+ using size_t = unsigned int;
+ using difference_type = int;
+ using SelfType = ValueIteratorBase;
+
+ bool operator==(const SelfType& other) const { return isEqual(other); }
+
+ bool operator!=(const SelfType& other) const { return !isEqual(other); }
+
+ difference_type operator-(const SelfType& other) const {
+ return other.computeDistance(*this);
+ }
+
+ /// Return either the index or the member name of the referenced value as a
+ /// Value.
+ Value key() const;
+
+ /// Return the index of the referenced Value, or -1 if it is not an
+ /// arrayValue.
+ UInt index() const;
+
+ /// Return the member name of the referenced Value, or "" if it is not an
+ /// objectValue.
+ /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
+ String name() const;
+
+ /// Return the member name of the referenced Value. "" if it is not an
+ /// objectValue.
+ /// \deprecated This cannot be used for UTF-8 strings, since there can be
+ /// embedded nulls.
+ JSONCPP_DEPRECATED("Use `key = name();` instead.")
+ char const* memberName() const;
+ /// Return the member name of the referenced Value, or NULL if it is not an
+ /// objectValue.
+ /// \note Better version than memberName(). Allows embedded nulls.
+ char const* memberName(char const** end) const;
+
+protected:
+ /*! Internal utility functions to assist with implementing
+ * other iterator functions. The const and non-const versions
+ * of the "deref" protected methods expose the protected
+ * current_ member variable in a way that can often be
+ * optimized away by the compiler.
+ */
+ const Value& deref() const;
+ Value& deref();
+
+ void increment();
+
+ void decrement();
+
+ difference_type computeDistance(const SelfType& other) const;
+
+ bool isEqual(const SelfType& other) const;
+
+ void copy(const SelfType& other);
+
+private:
+ Value::ObjectValues::iterator current_;
+ // Indicates that iterator is for a null value.
+ bool isNull_{true};
+
+public:
+ // For some reason, BORLAND needs these at the end, rather
+ // than earlier. No idea why.
+ ValueIteratorBase();
+ explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
+};
+
+/** \brief const iterator for object and array value.
+ *
+ */
+class JSON_API ValueConstIterator : public ValueIteratorBase {
+ friend class Value;
+
+public:
+ using value_type = const Value;
+ // typedef unsigned int size_t;
+ // typedef int difference_type;
+ using reference = const Value&;
+ using pointer = const Value*;
+ using SelfType = ValueConstIterator;
+
+ ValueConstIterator();
+ ValueConstIterator(ValueIterator const& other);
+
+private:
+ /*! \internal Use by Value to create an iterator.
+ */
+ explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
+
+public:
+ SelfType& operator=(const ValueIteratorBase& other);
+
+ SelfType operator++(int) {
+ SelfType temp(*this);
+ ++*this;
+ return temp;
+ }
+
+ SelfType operator--(int) {
+ SelfType temp(*this);
+ --*this;
+ return temp;
+ }
+
+ SelfType& operator--() {
+ decrement();
+ return *this;
+ }
+
+ SelfType& operator++() {
+ increment();
+ return *this;
+ }
+
+ reference operator*() const { return deref(); }
+
+ pointer operator->() const { return &deref(); }
+};
+
+/** \brief Iterator for object and array value.
+ */
+class JSON_API ValueIterator : public ValueIteratorBase {
+ friend class Value;
+
+public:
+ using value_type = Value;
+ using size_t = unsigned int;
+ using difference_type = int;
+ using reference = Value&;
+ using pointer = Value*;
+ using SelfType = ValueIterator;
+
+ ValueIterator();
+ explicit ValueIterator(const ValueConstIterator& other);
+ ValueIterator(const ValueIterator& other);
+
+private:
+ /*! \internal Use by Value to create an iterator.
+ */
+ explicit ValueIterator(const Value::ObjectValues::iterator& current);
+
+public:
+ SelfType& operator=(const SelfType& other);
+
+ SelfType operator++(int) {
+ SelfType temp(*this);
+ ++*this;
+ return temp;
+ }
+
+ SelfType operator--(int) {
+ SelfType temp(*this);
+ --*this;
+ return temp;
+ }
+
+ SelfType& operator--() {
+ decrement();
+ return *this;
+ }
+
+ SelfType& operator++() {
+ increment();
+ return *this;
+ }
+
+ /*! The return value of non-const iterators can be
+ * changed, so the these functions are not const
+ * because the returned references/pointers can be used
+ * to change state of the base class.
+ */
+ reference operator*() const { return const_cast<reference>(deref()); }
+ pointer operator->() const { return const_cast<pointer>(&deref()); }
+};
+
+inline void swap(Value& a, Value& b) { a.swap(b); }
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/version.h b/thirdparty/openxr/src/external/jsoncpp/include/json/version.h
new file mode 100644
index 0000000000..e931d0383e
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/version.h
@@ -0,0 +1,28 @@
+#ifndef JSON_VERSION_H_INCLUDED
+#define JSON_VERSION_H_INCLUDED
+
+// Note: version must be updated in three places when doing a release. This
+// annoying process ensures that amalgamate, CMake, and meson all report the
+// correct version.
+// 1. /meson.build
+// 2. /include/json/version.h
+// 3. /CMakeLists.txt
+// IMPORTANT: also update the SOVERSION!!
+
+#define JSONCPP_VERSION_STRING "1.9.5"
+#define JSONCPP_VERSION_MAJOR 1
+#define JSONCPP_VERSION_MINOR 9
+#define JSONCPP_VERSION_PATCH 5
+#define JSONCPP_VERSION_QUALIFIER
+#define JSONCPP_VERSION_HEXA \
+ ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \
+ (JSONCPP_VERSION_PATCH << 8))
+
+#ifdef JSONCPP_USING_SECURE_MEMORY
+#undef JSONCPP_USING_SECURE_MEMORY
+#endif
+#define JSONCPP_USING_SECURE_MEMORY 0
+// If non-zero, the library zeroes any memory that it has allocated before
+// it frees its memory.
+
+#endif // JSON_VERSION_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h b/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h
new file mode 100644
index 0000000000..88a3b12e9d
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h
@@ -0,0 +1,369 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_WRITER_H_INCLUDED
+#define JSON_WRITER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <ostream>
+#include <string>
+#include <vector>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) && defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+class Value;
+
+/**
+ *
+ * Usage:
+ * \code
+ * using namespace Json;
+ * void writeToStdout(StreamWriter::Factory const& factory, Value const& value)
+ * { std::unique_ptr<StreamWriter> const writer( factory.newStreamWriter());
+ * writer->write(value, &std::cout);
+ * std::cout << std::endl; // add lf and flush
+ * }
+ * \endcode
+ */
+class JSON_API StreamWriter {
+protected:
+ OStream* sout_; // not owned; will not delete
+public:
+ StreamWriter();
+ virtual ~StreamWriter();
+ /** Write Value into document as configured in sub-class.
+ * Do not take ownership of sout, but maintain a reference during function.
+ * \pre sout != NULL
+ * \return zero on success (For now, we always return zero, so check the
+ * stream instead.) \throw std::exception possibly, depending on
+ * configuration
+ */
+ virtual int write(Value const& root, OStream* sout) = 0;
+
+ /** \brief A simple abstract factory.
+ */
+ class JSON_API Factory {
+ public:
+ virtual ~Factory();
+ /** \brief Allocate a CharReader via operator new().
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ virtual StreamWriter* newStreamWriter() const = 0;
+ }; // Factory
+}; // StreamWriter
+
+/** \brief Write into stringstream, then return string, for convenience.
+ * A StreamWriter will be created from the factory, used, and then deleted.
+ */
+String JSON_API writeString(StreamWriter::Factory const& factory,
+ Value const& root);
+
+/** \brief Build a StreamWriter implementation.
+
+* Usage:
+* \code
+* using namespace Json;
+* Value value = ...;
+* StreamWriterBuilder builder;
+* builder["commentStyle"] = "None";
+* builder["indentation"] = " "; // or whatever you like
+* std::unique_ptr<Json::StreamWriter> writer(
+* builder.newStreamWriter());
+* writer->write(value, &std::cout);
+* std::cout << std::endl; // add lf and flush
+* \endcode
+*/
+class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
+public:
+ // Note: We use a Json::Value so that we can add data-members to this class
+ // without a major version bump.
+ /** Configuration of this builder.
+ * Available settings (case-sensitive):
+ * - "commentStyle": "None" or "All"
+ * - "indentation": "<anything>".
+ * - Setting this to an empty string also omits newline characters.
+ * - "enableYAMLCompatibility": false or true
+ * - slightly change the whitespace around colons
+ * - "dropNullPlaceholders": false or true
+ * - Drop the "null" string from the writer's output for nullValues.
+ * Strictly speaking, this is not valid JSON. But when the output is being
+ * fed to a browser's JavaScript, it makes for smaller output and the
+ * browser can handle the output just fine.
+ * - "useSpecialFloats": false or true
+ * - If true, outputs non-finite floating point values in the following way:
+ * NaN values as "NaN", positive infinity as "Infinity", and negative
+ * infinity as "-Infinity".
+ * - "precision": int
+ * - Number of precision digits for formatting of real values.
+ * - "precisionType": "significant"(default) or "decimal"
+ * - Type of precision for formatting of real values.
+ * - "emitUTF8": false or true
+ * - If true, outputs raw UTF8 strings instead of escaping them.
+
+ * You can examine 'settings_` yourself
+ * to see the defaults. You can also write and read them just like any
+ * JSON Value.
+ * \sa setDefaults()
+ */
+ Json::Value settings_;
+
+ StreamWriterBuilder();
+ ~StreamWriterBuilder() override;
+
+ /**
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ StreamWriter* newStreamWriter() const override;
+
+ /** \return true if 'settings' are legal and consistent;
+ * otherwise, indicate bad settings via 'invalid'.
+ */
+ bool validate(Json::Value* invalid) const;
+ /** A simple way to update a specific setting.
+ */
+ Value& operator[](const String& key);
+
+ /** Called by ctor, but you can use this to reset settings_.
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
+ */
+ static void setDefaults(Json::Value* settings);
+};
+
+/** \brief Abstract class for writers.
+ * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
+ */
+class JSON_API Writer {
+public:
+ virtual ~Writer();
+
+ virtual String write(const Value& root) = 0;
+};
+
+/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
+ *without formatting (not human friendly).
+ *
+ * The JSON document is written in a single line. It is not intended for 'human'
+ *consumption,
+ * but may be useful to support feature such as RPC where bandwidth is limited.
+ * \sa Reader, Value
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API FastWriter
+ : public Writer {
+public:
+ FastWriter();
+ ~FastWriter() override = default;
+
+ void enableYAMLCompatibility();
+
+ /** \brief Drop the "null" string from the writer's output for nullValues.
+ * Strictly speaking, this is not valid JSON. But when the output is being
+ * fed to a browser's JavaScript, it makes for smaller output and the
+ * browser can handle the output just fine.
+ */
+ void dropNullPlaceholders();
+
+ void omitEndingLineFeed();
+
+public: // overridden from Writer
+ String write(const Value& root) override;
+
+private:
+ void writeValue(const Value& value);
+
+ String document_;
+ bool yamlCompatibilityEnabled_{false};
+ bool dropNullPlaceholders_{false};
+ bool omitEndingLineFeed_{false};
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ *human friendly way.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ * - if empty then print {} without indent and line break
+ * - if not empty the print '{', line break & indent, print one value per
+ *line
+ * and then unindent and line break and print '}'.
+ * - Array value:
+ * - if empty then print [] without indent and line break
+ * - if the array contains no object value, empty array or some other value
+ *types,
+ * and all the values fit on one lines, then print the array on a single
+ *line.
+ * - otherwise, it the values do not fit on one line, or the array contains
+ * object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ *#CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API
+ StyledWriter : public Writer {
+public:
+ StyledWriter();
+ ~StyledWriter() override = default;
+
+public: // overridden from Writer
+ /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+ * \param root Value to serialize.
+ * \return String containing the JSON document that represents the root value.
+ */
+ String write(const Value& root) override;
+
+private:
+ void writeValue(const Value& value);
+ void writeArrayValue(const Value& value);
+ bool isMultilineArray(const Value& value);
+ void pushValue(const String& value);
+ void writeIndent();
+ void writeWithIndent(const String& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(const Value& root);
+ void writeCommentAfterValueOnSameLine(const Value& root);
+ static bool hasCommentForValue(const Value& value);
+ static String normalizeEOL(const String& text);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ String document_;
+ String indentString_;
+ unsigned int rightMargin_{74};
+ unsigned int indentSize_{3};
+ bool addChildValues_{false};
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ human friendly way,
+ to a stream rather than to a string.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ * - if empty then print {} without indent and line break
+ * - if not empty the print '{', line break & indent, print one value per
+ line
+ * and then unindent and line break and print '}'.
+ * - Array value:
+ * - if empty then print [] without indent and line break
+ * - if the array contains no object value, empty array or some other value
+ types,
+ * and all the values fit on one lines, then print the array on a single
+ line.
+ * - otherwise, it the values do not fit on one line, or the array contains
+ * object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ #CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API
+ StyledStreamWriter {
+public:
+ /**
+ * \param indentation Each level will be indented by this amount extra.
+ */
+ StyledStreamWriter(String indentation = "\t");
+ ~StyledStreamWriter() = default;
+
+public:
+ /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+ * \param out Stream to write to. (Can be ostringstream, e.g.)
+ * \param root Value to serialize.
+ * \note There is no point in deriving from Writer, since write() should not
+ * return a value.
+ */
+ void write(OStream& out, const Value& root);
+
+private:
+ void writeValue(const Value& value);
+ void writeArrayValue(const Value& value);
+ bool isMultilineArray(const Value& value);
+ void pushValue(const String& value);
+ void writeIndent();
+ void writeWithIndent(const String& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(const Value& root);
+ void writeCommentAfterValueOnSameLine(const Value& root);
+ static bool hasCommentForValue(const Value& value);
+ static String normalizeEOL(const String& text);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ OStream* document_;
+ String indentString_;
+ unsigned int rightMargin_{74};
+ String indentation_;
+ bool addChildValues_ : 1;
+ bool indented_ : 1;
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#if defined(JSON_HAS_INT64)
+String JSON_API valueToString(Int value);
+String JSON_API valueToString(UInt value);
+#endif // if defined(JSON_HAS_INT64)
+String JSON_API valueToString(LargestInt value);
+String JSON_API valueToString(LargestUInt value);
+String JSON_API valueToString(
+ double value, unsigned int precision = Value::defaultRealPrecision,
+ PrecisionType precisionType = PrecisionType::significantDigits);
+String JSON_API valueToString(bool value);
+String JSON_API valueToQuotedString(const char* value);
+
+/// \brief Output using the StyledStreamWriter.
+/// \see Json::operator>>()
+JSON_API OStream& operator<<(OStream&, const Value& root);
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_WRITER_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp
new file mode 100644
index 0000000000..a6a3f4e30d
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp
@@ -0,0 +1,1992 @@
+// Copyright 2007-2011 Baptiste Lepilleur and The JsonCpp Authors
+// Copyright (C) 2016 InfoTeCS JSC. All rights reserved.
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_tool.h"
+#include <json/assertions.h>
+#include <json/reader.h>
+#include <json/value.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <iostream>
+#include <istream>
+#include <limits>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <utility>
+
+#include <cstdio>
+#if __cplusplus >= 201103L
+
+#if !defined(sscanf)
+#define sscanf std::sscanf
+#endif
+
+#endif //__cplusplus
+
+#if defined(_MSC_VER)
+#if !defined(_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
+#endif //_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
+#endif //_MSC_VER
+
+#if defined(_MSC_VER)
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+// Define JSONCPP_DEPRECATED_STACK_LIMIT as an appropriate integer at compile
+// time to change the stack limit
+#if !defined(JSONCPP_DEPRECATED_STACK_LIMIT)
+#define JSONCPP_DEPRECATED_STACK_LIMIT 1000
+#endif
+
+static size_t const stackLimit_g =
+ JSONCPP_DEPRECATED_STACK_LIMIT; // see readValue()
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+using CharReaderPtr = std::unique_ptr<CharReader>;
+#else
+using CharReaderPtr = std::auto_ptr<CharReader>;
+#endif
+
+// Implementation of class Features
+// ////////////////////////////////
+
+Features::Features() = default;
+
+Features Features::all() { return {}; }
+
+Features Features::strictMode() {
+ Features features;
+ features.allowComments_ = false;
+ features.strictRoot_ = true;
+ features.allowDroppedNullPlaceholders_ = false;
+ features.allowNumericKeys_ = false;
+ return features;
+}
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+bool Reader::containsNewLine(Reader::Location begin, Reader::Location end) {
+ return std::any_of(begin, end, [](char b) { return b == '\n' || b == '\r'; });
+}
+
+// Class Reader
+// //////////////////////////////////////////////////////////////////
+
+Reader::Reader() : features_(Features::all()) {}
+
+Reader::Reader(const Features& features) : features_(features) {}
+
+bool Reader::parse(const std::string& document, Value& root,
+ bool collectComments) {
+ document_.assign(document.begin(), document.end());
+ const char* begin = document_.c_str();
+ const char* end = begin + document_.length();
+ return parse(begin, end, root, collectComments);
+}
+
+bool Reader::parse(std::istream& is, Value& root, bool collectComments) {
+ // std::istream_iterator<char> begin(is);
+ // std::istream_iterator<char> end;
+ // Those would allow streamed input from a file, if parse() were a
+ // template function.
+
+ // Since String is reference-counted, this at least does not
+ // create an extra copy.
+ String doc(std::istreambuf_iterator<char>(is), {});
+ return parse(doc.data(), doc.data() + doc.size(), root, collectComments);
+}
+
+bool Reader::parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments) {
+ if (!features_.allowComments_) {
+ collectComments = false;
+ }
+
+ begin_ = beginDoc;
+ end_ = endDoc;
+ collectComments_ = collectComments;
+ current_ = begin_;
+ lastValueEnd_ = nullptr;
+ lastValue_ = nullptr;
+ commentsBefore_.clear();
+ errors_.clear();
+ while (!nodes_.empty())
+ nodes_.pop();
+ nodes_.push(&root);
+
+ bool successful = readValue();
+ Token token;
+ skipCommentTokens(token);
+ if (collectComments_ && !commentsBefore_.empty())
+ root.setComment(commentsBefore_, commentAfter);
+ if (features_.strictRoot_) {
+ if (!root.isArray() && !root.isObject()) {
+ // Set error location to start of doc, ideally should be first token found
+ // in doc
+ token.type_ = tokenError;
+ token.start_ = beginDoc;
+ token.end_ = endDoc;
+ addError(
+ "A valid JSON document must be either an array or an object value.",
+ token);
+ return false;
+ }
+ }
+ return successful;
+}
+
+bool Reader::readValue() {
+ // readValue() may call itself only if it calls readObject() or ReadArray().
+ // These methods execute nodes_.push() just before and nodes_.pop)() just
+ // after calling readValue(). parse() executes one nodes_.push(), so > instead
+ // of >=.
+ if (nodes_.size() > stackLimit_g)
+ throwRuntimeError("Exceeded stackLimit in readValue().");
+
+ Token token;
+ skipCommentTokens(token);
+ bool successful = true;
+
+ if (collectComments_ && !commentsBefore_.empty()) {
+ currentValue().setComment(commentsBefore_, commentBefore);
+ commentsBefore_.clear();
+ }
+
+ switch (token.type_) {
+ case tokenObjectBegin:
+ successful = readObject(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenArrayBegin:
+ successful = readArray(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenNumber:
+ successful = decodeNumber(token);
+ break;
+ case tokenString:
+ successful = decodeString(token);
+ break;
+ case tokenTrue: {
+ Value v(true);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenFalse: {
+ Value v(false);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNull: {
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenArraySeparator:
+ case tokenObjectEnd:
+ case tokenArrayEnd:
+ if (features_.allowDroppedNullPlaceholders_) {
+ // "Un-read" the current token and mark the current value as a null
+ // token.
+ current_--;
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(current_ - begin_ - 1);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ } // Else, fall through...
+ default:
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return addError("Syntax error: value, object or array expected.", token);
+ }
+
+ if (collectComments_) {
+ lastValueEnd_ = current_;
+ lastValue_ = &currentValue();
+ }
+
+ return successful;
+}
+
+void Reader::skipCommentTokens(Token& token) {
+ if (features_.allowComments_) {
+ do {
+ readToken(token);
+ } while (token.type_ == tokenComment);
+ } else {
+ readToken(token);
+ }
+}
+
+bool Reader::readToken(Token& token) {
+ skipSpaces();
+ token.start_ = current_;
+ Char c = getNextChar();
+ bool ok = true;
+ switch (c) {
+ case '{':
+ token.type_ = tokenObjectBegin;
+ break;
+ case '}':
+ token.type_ = tokenObjectEnd;
+ break;
+ case '[':
+ token.type_ = tokenArrayBegin;
+ break;
+ case ']':
+ token.type_ = tokenArrayEnd;
+ break;
+ case '"':
+ token.type_ = tokenString;
+ ok = readString();
+ break;
+ case '/':
+ token.type_ = tokenComment;
+ ok = readComment();
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '-':
+ token.type_ = tokenNumber;
+ readNumber();
+ break;
+ case 't':
+ token.type_ = tokenTrue;
+ ok = match("rue", 3);
+ break;
+ case 'f':
+ token.type_ = tokenFalse;
+ ok = match("alse", 4);
+ break;
+ case 'n':
+ token.type_ = tokenNull;
+ ok = match("ull", 3);
+ break;
+ case ',':
+ token.type_ = tokenArraySeparator;
+ break;
+ case ':':
+ token.type_ = tokenMemberSeparator;
+ break;
+ case 0:
+ token.type_ = tokenEndOfStream;
+ break;
+ default:
+ ok = false;
+ break;
+ }
+ if (!ok)
+ token.type_ = tokenError;
+ token.end_ = current_;
+ return ok;
+}
+
+void Reader::skipSpaces() {
+ while (current_ != end_) {
+ Char c = *current_;
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ ++current_;
+ else
+ break;
+ }
+}
+
+bool Reader::match(const Char* pattern, int patternLength) {
+ if (end_ - current_ < patternLength)
+ return false;
+ int index = patternLength;
+ while (index--)
+ if (current_[index] != pattern[index])
+ return false;
+ current_ += patternLength;
+ return true;
+}
+
+bool Reader::readComment() {
+ Location commentBegin = current_ - 1;
+ Char c = getNextChar();
+ bool successful = false;
+ if (c == '*')
+ successful = readCStyleComment();
+ else if (c == '/')
+ successful = readCppStyleComment();
+ if (!successful)
+ return false;
+
+ if (collectComments_) {
+ CommentPlacement placement = commentBefore;
+ if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+ if (c != '*' || !containsNewLine(commentBegin, current_))
+ placement = commentAfterOnSameLine;
+ }
+
+ addComment(commentBegin, current_, placement);
+ }
+ return true;
+}
+
+String Reader::normalizeEOL(Reader::Location begin, Reader::Location end) {
+ String normalized;
+ normalized.reserve(static_cast<size_t>(end - begin));
+ Reader::Location current = begin;
+ while (current != end) {
+ char c = *current++;
+ if (c == '\r') {
+ if (current != end && *current == '\n')
+ // convert dos EOL
+ ++current;
+ // convert Mac EOL
+ normalized += '\n';
+ } else {
+ normalized += c;
+ }
+ }
+ return normalized;
+}
+
+void Reader::addComment(Location begin, Location end,
+ CommentPlacement placement) {
+ assert(collectComments_);
+ const String& normalized = normalizeEOL(begin, end);
+ if (placement == commentAfterOnSameLine) {
+ assert(lastValue_ != nullptr);
+ lastValue_->setComment(normalized, placement);
+ } else {
+ commentsBefore_ += normalized;
+ }
+}
+
+bool Reader::readCStyleComment() {
+ while ((current_ + 1) < end_) {
+ Char c = getNextChar();
+ if (c == '*' && *current_ == '/')
+ break;
+ }
+ return getNextChar() == '/';
+}
+
+bool Reader::readCppStyleComment() {
+ while (current_ != end_) {
+ Char c = getNextChar();
+ if (c == '\n')
+ break;
+ if (c == '\r') {
+ // Consume DOS EOL. It will be normalized in addComment.
+ if (current_ != end_ && *current_ == '\n')
+ getNextChar();
+ // Break on Moc OS 9 EOL.
+ break;
+ }
+ }
+ return true;
+}
+
+void Reader::readNumber() {
+ Location p = current_;
+ char c = '0'; // stopgap for already consumed character
+ // integral part
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ // fractional part
+ if (c == '.') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ // exponential part
+ if (c == 'e' || c == 'E') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ if (c == '+' || c == '-')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+}
+
+bool Reader::readString() {
+ Char c = '\0';
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '"')
+ break;
+ }
+ return c == '"';
+}
+
+bool Reader::readObject(Token& token) {
+ Token tokenName;
+ String name;
+ Value init(objectValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ while (readToken(tokenName)) {
+ bool initialTokenOk = true;
+ while (tokenName.type_ == tokenComment && initialTokenOk)
+ initialTokenOk = readToken(tokenName);
+ if (!initialTokenOk)
+ break;
+ if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+ return true;
+ name.clear();
+ if (tokenName.type_ == tokenString) {
+ if (!decodeString(tokenName, name))
+ return recoverFromError(tokenObjectEnd);
+ } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+ Value numberName;
+ if (!decodeNumber(tokenName, numberName))
+ return recoverFromError(tokenObjectEnd);
+ name = numberName.asString();
+ } else {
+ break;
+ }
+
+ Token colon;
+ if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+ return addErrorAndRecover("Missing ':' after object member name", colon,
+ tokenObjectEnd);
+ }
+ Value& value = currentValue()[name];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenObjectEnd);
+
+ Token comma;
+ if (!readToken(comma) ||
+ (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+ comma.type_ != tokenComment)) {
+ return addErrorAndRecover("Missing ',' or '}' in object declaration",
+ comma, tokenObjectEnd);
+ }
+ bool finalizeTokenOk = true;
+ while (comma.type_ == tokenComment && finalizeTokenOk)
+ finalizeTokenOk = readToken(comma);
+ if (comma.type_ == tokenObjectEnd)
+ return true;
+ }
+ return addErrorAndRecover("Missing '}' or object member name", tokenName,
+ tokenObjectEnd);
+}
+
+bool Reader::readArray(Token& token) {
+ Value init(arrayValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ skipSpaces();
+ if (current_ != end_ && *current_ == ']') // empty array
+ {
+ Token endArray;
+ readToken(endArray);
+ return true;
+ }
+ int index = 0;
+ for (;;) {
+ Value& value = currentValue()[index++];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenArrayEnd);
+
+ Token currentToken;
+ // Accept Comment after last item in the array.
+ ok = readToken(currentToken);
+ while (currentToken.type_ == tokenComment && ok) {
+ ok = readToken(currentToken);
+ }
+ bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
+ currentToken.type_ != tokenArrayEnd);
+ if (!ok || badTokenType) {
+ return addErrorAndRecover("Missing ',' or ']' in array declaration",
+ currentToken, tokenArrayEnd);
+ }
+ if (currentToken.type_ == tokenArrayEnd)
+ break;
+ }
+ return true;
+}
+
+bool Reader::decodeNumber(Token& token) {
+ Value decoded;
+ if (!decodeNumber(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeNumber(Token& token, Value& decoded) {
+ // Attempts to parse the number as an integer. If the number is
+ // larger than the maximum supported value of an integer then
+ // we decode the number as a double.
+ Location current = token.start_;
+ bool isNegative = *current == '-';
+ if (isNegative)
+ ++current;
+ // TODO: Help the compiler do the div and mod at compile time or get rid of
+ // them.
+ Value::LargestUInt maxIntegerValue =
+ isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
+ : Value::maxLargestUInt;
+ Value::LargestUInt threshold = maxIntegerValue / 10;
+ Value::LargestUInt value = 0;
+ while (current < token.end_) {
+ Char c = *current++;
+ if (c < '0' || c > '9')
+ return decodeDouble(token, decoded);
+ auto digit(static_cast<Value::UInt>(c - '0'));
+ if (value >= threshold) {
+ // We've hit or exceeded the max value divided by 10 (rounded down). If
+ // a) we've only just touched the limit, b) this is the last digit, and
+ // c) it's small enough to fit in that rounding delta, we're okay.
+ // Otherwise treat this number as a double to avoid overflow.
+ if (value > threshold || current != token.end_ ||
+ digit > maxIntegerValue % 10) {
+ return decodeDouble(token, decoded);
+ }
+ }
+ value = value * 10 + digit;
+ }
+ if (isNegative && value == maxIntegerValue)
+ decoded = Value::minLargestInt;
+ else if (isNegative)
+ decoded = -Value::LargestInt(value);
+ else if (value <= Value::LargestUInt(Value::maxInt))
+ decoded = Value::LargestInt(value);
+ else
+ decoded = value;
+ return true;
+}
+
+bool Reader::decodeDouble(Token& token) {
+ Value decoded;
+ if (!decodeDouble(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeDouble(Token& token, Value& decoded) {
+ double value = 0;
+ String buffer(token.start_, token.end_);
+ IStringStream is(buffer);
+ if (!(is >> value))
+ return addError(
+ "'" + String(token.start_, token.end_) + "' is not a number.", token);
+ decoded = value;
+ return true;
+}
+
+bool Reader::decodeString(Token& token) {
+ String decoded_string;
+ if (!decodeString(token, decoded_string))
+ return false;
+ Value decoded(decoded_string);
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeString(Token& token, String& decoded) {
+ decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+ Location current = token.start_ + 1; // skip '"'
+ Location end = token.end_ - 1; // do not include '"'
+ while (current != end) {
+ Char c = *current++;
+ if (c == '"')
+ break;
+ if (c == '\\') {
+ if (current == end)
+ return addError("Empty escape sequence in string", token, current);
+ Char escape = *current++;
+ switch (escape) {
+ case '"':
+ decoded += '"';
+ break;
+ case '/':
+ decoded += '/';
+ break;
+ case '\\':
+ decoded += '\\';
+ break;
+ case 'b':
+ decoded += '\b';
+ break;
+ case 'f':
+ decoded += '\f';
+ break;
+ case 'n':
+ decoded += '\n';
+ break;
+ case 'r':
+ decoded += '\r';
+ break;
+ case 't':
+ decoded += '\t';
+ break;
+ case 'u': {
+ unsigned int unicode;
+ if (!decodeUnicodeCodePoint(token, current, end, unicode))
+ return false;
+ decoded += codePointToUTF8(unicode);
+ } break;
+ default:
+ return addError("Bad escape sequence in string", token, current);
+ }
+ } else {
+ decoded += c;
+ }
+ }
+ return true;
+}
+
+bool Reader::decodeUnicodeCodePoint(Token& token, Location& current,
+ Location end, unsigned int& unicode) {
+
+ if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+ return false;
+ if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+ // surrogate pairs
+ if (end - current < 6)
+ return addError(
+ "additional six characters expected to parse unicode surrogate pair.",
+ token, current);
+ if (*(current++) == '\\' && *(current++) == 'u') {
+ unsigned int surrogatePair;
+ if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+ unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+ } else
+ return false;
+ } else
+ return addError("expecting another \\u token to begin the second half of "
+ "a unicode surrogate pair",
+ token, current);
+ }
+ return true;
+}
+
+bool Reader::decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end,
+ unsigned int& ret_unicode) {
+ if (end - current < 4)
+ return addError(
+ "Bad unicode escape sequence in string: four digits expected.", token,
+ current);
+ int unicode = 0;
+ for (int index = 0; index < 4; ++index) {
+ Char c = *current++;
+ unicode *= 16;
+ if (c >= '0' && c <= '9')
+ unicode += c - '0';
+ else if (c >= 'a' && c <= 'f')
+ unicode += c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ unicode += c - 'A' + 10;
+ else
+ return addError(
+ "Bad unicode escape sequence in string: hexadecimal digit expected.",
+ token, current);
+ }
+ ret_unicode = static_cast<unsigned int>(unicode);
+ return true;
+}
+
+bool Reader::addError(const String& message, Token& token, Location extra) {
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = extra;
+ errors_.push_back(info);
+ return false;
+}
+
+bool Reader::recoverFromError(TokenType skipUntilToken) {
+ size_t const errorCount = errors_.size();
+ Token skip;
+ for (;;) {
+ if (!readToken(skip))
+ errors_.resize(errorCount); // discard errors caused by recovery
+ if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+ break;
+ }
+ errors_.resize(errorCount);
+ return false;
+}
+
+bool Reader::addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken) {
+ addError(message, token);
+ return recoverFromError(skipUntilToken);
+}
+
+Value& Reader::currentValue() { return *(nodes_.top()); }
+
+Reader::Char Reader::getNextChar() {
+ if (current_ == end_)
+ return 0;
+ return *current_++;
+}
+
+void Reader::getLocationLineAndColumn(Location location, int& line,
+ int& column) const {
+ Location current = begin_;
+ Location lastLineStart = current;
+ line = 0;
+ while (current < location && current != end_) {
+ Char c = *current++;
+ if (c == '\r') {
+ if (*current == '\n')
+ ++current;
+ lastLineStart = current;
+ ++line;
+ } else if (c == '\n') {
+ lastLineStart = current;
+ ++line;
+ }
+ }
+ // column & line start at 1
+ column = int(location - lastLineStart) + 1;
+ ++line;
+}
+
+String Reader::getLocationLineAndColumn(Location location) const {
+ int line, column;
+ getLocationLineAndColumn(location, line, column);
+ char buffer[18 + 16 + 16 + 1];
+ jsoncpp_snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+ return buffer;
+}
+
+// Deprecated. Preserved for backward compatibility
+String Reader::getFormatedErrorMessages() const {
+ return getFormattedErrorMessages();
+}
+
+String Reader::getFormattedErrorMessages() const {
+ String formattedMessage;
+ for (const auto& error : errors_) {
+ formattedMessage +=
+ "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+ formattedMessage += " " + error.message_ + "\n";
+ if (error.extra_)
+ formattedMessage +=
+ "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+ }
+ return formattedMessage;
+}
+
+std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
+ std::vector<Reader::StructuredError> allErrors;
+ for (const auto& error : errors_) {
+ Reader::StructuredError structured;
+ structured.offset_start = error.token_.start_ - begin_;
+ structured.offset_limit = error.token_.end_ - begin_;
+ structured.message = error.message_;
+ allErrors.push_back(structured);
+ }
+ return allErrors;
+}
+
+bool Reader::pushError(const Value& value, const String& message) {
+ ptrdiff_t const length = end_ - begin_;
+ if (value.getOffsetStart() > length || value.getOffsetLimit() > length)
+ return false;
+ Token token;
+ token.type_ = tokenError;
+ token.start_ = begin_ + value.getOffsetStart();
+ token.end_ = begin_ + value.getOffsetLimit();
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = nullptr;
+ errors_.push_back(info);
+ return true;
+}
+
+bool Reader::pushError(const Value& value, const String& message,
+ const Value& extra) {
+ ptrdiff_t const length = end_ - begin_;
+ if (value.getOffsetStart() > length || value.getOffsetLimit() > length ||
+ extra.getOffsetLimit() > length)
+ return false;
+ Token token;
+ token.type_ = tokenError;
+ token.start_ = begin_ + value.getOffsetStart();
+ token.end_ = begin_ + value.getOffsetLimit();
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = begin_ + extra.getOffsetStart();
+ errors_.push_back(info);
+ return true;
+}
+
+bool Reader::good() const { return errors_.empty(); }
+
+// Originally copied from the Features class (now deprecated), used internally
+// for features implementation.
+class OurFeatures {
+public:
+ static OurFeatures all();
+ bool allowComments_;
+ bool allowTrailingCommas_;
+ bool strictRoot_;
+ bool allowDroppedNullPlaceholders_;
+ bool allowNumericKeys_;
+ bool allowSingleQuotes_;
+ bool failIfExtra_;
+ bool rejectDupKeys_;
+ bool allowSpecialFloats_;
+ bool skipBom_;
+ size_t stackLimit_;
+}; // OurFeatures
+
+OurFeatures OurFeatures::all() { return {}; }
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+// Originally copied from the Reader class (now deprecated), used internally
+// for implementing JSON reading.
+class OurReader {
+public:
+ using Char = char;
+ using Location = const Char*;
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ explicit OurReader(OurFeatures const& features);
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+ String getFormattedErrorMessages() const;
+ std::vector<StructuredError> getStructuredErrors() const;
+
+private:
+ OurReader(OurReader const&); // no impl
+ void operator=(OurReader const&); // no impl
+
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenNaN,
+ tokenPosInf,
+ tokenNegInf,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ using Errors = std::deque<ErrorInfo>;
+
+ bool readToken(Token& token);
+ void skipSpaces();
+ void skipBom(bool skipBom);
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment(bool* containsNewLineResult);
+ bool readCppStyleComment();
+ bool readString();
+ bool readStringSingleQuote();
+ bool readNumber(bool checkInf);
+ bool readValue();
+ bool readObject(Token& token);
+ bool readArray(Token& token);
+ bool decodeNumber(Token& token);
+ bool decodeNumber(Token& token, Value& decoded);
+ bool decodeString(Token& token);
+ bool decodeString(Token& token, String& decoded);
+ bool decodeDouble(Token& token);
+ bool decodeDouble(Token& token, Value& decoded);
+ bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
+ unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end, unsigned int& unicode);
+ bool addError(const String& message, Token& token, Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end, CommentPlacement placement);
+ void skipCommentTokens(Token& token);
+
+ static String normalizeEOL(Location begin, Location end);
+ static bool containsNewLine(Location begin, Location end);
+
+ using Nodes = std::stack<Value*>;
+
+ Nodes nodes_{};
+ Errors errors_{};
+ String document_{};
+ Location begin_ = nullptr;
+ Location end_ = nullptr;
+ Location current_ = nullptr;
+ Location lastValueEnd_ = nullptr;
+ Value* lastValue_ = nullptr;
+ bool lastValueHasAComment_ = false;
+ String commentsBefore_{};
+
+ OurFeatures const features_;
+ bool collectComments_ = false;
+}; // OurReader
+
+// complete copy of Read impl, for OurReader
+
+bool OurReader::containsNewLine(OurReader::Location begin,
+ OurReader::Location end) {
+ return std::any_of(begin, end, [](char b) { return b == '\n' || b == '\r'; });
+}
+
+OurReader::OurReader(OurFeatures const& features) : features_(features) {}
+
+bool OurReader::parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments) {
+ if (!features_.allowComments_) {
+ collectComments = false;
+ }
+
+ begin_ = beginDoc;
+ end_ = endDoc;
+ collectComments_ = collectComments;
+ current_ = begin_;
+ lastValueEnd_ = nullptr;
+ lastValue_ = nullptr;
+ commentsBefore_.clear();
+ errors_.clear();
+ while (!nodes_.empty())
+ nodes_.pop();
+ nodes_.push(&root);
+
+ // skip byte order mark if it exists at the beginning of the UTF-8 text.
+ skipBom(features_.skipBom_);
+ bool successful = readValue();
+ nodes_.pop();
+ Token token;
+ skipCommentTokens(token);
+ if (features_.failIfExtra_ && (token.type_ != tokenEndOfStream)) {
+ addError("Extra non-whitespace after JSON value.", token);
+ return false;
+ }
+ if (collectComments_ && !commentsBefore_.empty())
+ root.setComment(commentsBefore_, commentAfter);
+ if (features_.strictRoot_) {
+ if (!root.isArray() && !root.isObject()) {
+ // Set error location to start of doc, ideally should be first token found
+ // in doc
+ token.type_ = tokenError;
+ token.start_ = beginDoc;
+ token.end_ = endDoc;
+ addError(
+ "A valid JSON document must be either an array or an object value.",
+ token);
+ return false;
+ }
+ }
+ return successful;
+}
+
+bool OurReader::readValue() {
+ // To preserve the old behaviour we cast size_t to int.
+ if (nodes_.size() > features_.stackLimit_)
+ throwRuntimeError("Exceeded stackLimit in readValue().");
+ Token token;
+ skipCommentTokens(token);
+ bool successful = true;
+
+ if (collectComments_ && !commentsBefore_.empty()) {
+ currentValue().setComment(commentsBefore_, commentBefore);
+ commentsBefore_.clear();
+ }
+
+ switch (token.type_) {
+ case tokenObjectBegin:
+ successful = readObject(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenArrayBegin:
+ successful = readArray(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenNumber:
+ successful = decodeNumber(token);
+ break;
+ case tokenString:
+ successful = decodeString(token);
+ break;
+ case tokenTrue: {
+ Value v(true);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenFalse: {
+ Value v(false);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNull: {
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNaN: {
+ Value v(std::numeric_limits<double>::quiet_NaN());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenPosInf: {
+ Value v(std::numeric_limits<double>::infinity());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNegInf: {
+ Value v(-std::numeric_limits<double>::infinity());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenArraySeparator:
+ case tokenObjectEnd:
+ case tokenArrayEnd:
+ if (features_.allowDroppedNullPlaceholders_) {
+ // "Un-read" the current token and mark the current value as a null
+ // token.
+ current_--;
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(current_ - begin_ - 1);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ } // else, fall through ...
+ default:
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return addError("Syntax error: value, object or array expected.", token);
+ }
+
+ if (collectComments_) {
+ lastValueEnd_ = current_;
+ lastValueHasAComment_ = false;
+ lastValue_ = &currentValue();
+ }
+
+ return successful;
+}
+
+void OurReader::skipCommentTokens(Token& token) {
+ if (features_.allowComments_) {
+ do {
+ readToken(token);
+ } while (token.type_ == tokenComment);
+ } else {
+ readToken(token);
+ }
+}
+
+bool OurReader::readToken(Token& token) {
+ skipSpaces();
+ token.start_ = current_;
+ Char c = getNextChar();
+ bool ok = true;
+ switch (c) {
+ case '{':
+ token.type_ = tokenObjectBegin;
+ break;
+ case '}':
+ token.type_ = tokenObjectEnd;
+ break;
+ case '[':
+ token.type_ = tokenArrayBegin;
+ break;
+ case ']':
+ token.type_ = tokenArrayEnd;
+ break;
+ case '"':
+ token.type_ = tokenString;
+ ok = readString();
+ break;
+ case '\'':
+ if (features_.allowSingleQuotes_) {
+ token.type_ = tokenString;
+ ok = readStringSingleQuote();
+ } else {
+ // If we don't allow single quotes, this is a failure case.
+ ok = false;
+ }
+ break;
+ case '/':
+ token.type_ = tokenComment;
+ ok = readComment();
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ token.type_ = tokenNumber;
+ readNumber(false);
+ break;
+ case '-':
+ if (readNumber(true)) {
+ token.type_ = tokenNumber;
+ } else {
+ token.type_ = tokenNegInf;
+ ok = features_.allowSpecialFloats_ && match("nfinity", 7);
+ }
+ break;
+ case '+':
+ if (readNumber(true)) {
+ token.type_ = tokenNumber;
+ } else {
+ token.type_ = tokenPosInf;
+ ok = features_.allowSpecialFloats_ && match("nfinity", 7);
+ }
+ break;
+ case 't':
+ token.type_ = tokenTrue;
+ ok = match("rue", 3);
+ break;
+ case 'f':
+ token.type_ = tokenFalse;
+ ok = match("alse", 4);
+ break;
+ case 'n':
+ token.type_ = tokenNull;
+ ok = match("ull", 3);
+ break;
+ case 'N':
+ if (features_.allowSpecialFloats_) {
+ token.type_ = tokenNaN;
+ ok = match("aN", 2);
+ } else {
+ ok = false;
+ }
+ break;
+ case 'I':
+ if (features_.allowSpecialFloats_) {
+ token.type_ = tokenPosInf;
+ ok = match("nfinity", 7);
+ } else {
+ ok = false;
+ }
+ break;
+ case ',':
+ token.type_ = tokenArraySeparator;
+ break;
+ case ':':
+ token.type_ = tokenMemberSeparator;
+ break;
+ case 0:
+ token.type_ = tokenEndOfStream;
+ break;
+ default:
+ ok = false;
+ break;
+ }
+ if (!ok)
+ token.type_ = tokenError;
+ token.end_ = current_;
+ return ok;
+}
+
+void OurReader::skipSpaces() {
+ while (current_ != end_) {
+ Char c = *current_;
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ ++current_;
+ else
+ break;
+ }
+}
+
+void OurReader::skipBom(bool skipBom) {
+ // The default behavior is to skip BOM.
+ if (skipBom) {
+ if ((end_ - begin_) >= 3 && strncmp(begin_, "\xEF\xBB\xBF", 3) == 0) {
+ begin_ += 3;
+ current_ = begin_;
+ }
+ }
+}
+
+bool OurReader::match(const Char* pattern, int patternLength) {
+ if (end_ - current_ < patternLength)
+ return false;
+ int index = patternLength;
+ while (index--)
+ if (current_[index] != pattern[index])
+ return false;
+ current_ += patternLength;
+ return true;
+}
+
+bool OurReader::readComment() {
+ const Location commentBegin = current_ - 1;
+ const Char c = getNextChar();
+ bool successful = false;
+ bool cStyleWithEmbeddedNewline = false;
+
+ const bool isCStyleComment = (c == '*');
+ const bool isCppStyleComment = (c == '/');
+ if (isCStyleComment) {
+ successful = readCStyleComment(&cStyleWithEmbeddedNewline);
+ } else if (isCppStyleComment) {
+ successful = readCppStyleComment();
+ }
+
+ if (!successful)
+ return false;
+
+ if (collectComments_) {
+ CommentPlacement placement = commentBefore;
+
+ if (!lastValueHasAComment_) {
+ if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+ if (isCppStyleComment || !cStyleWithEmbeddedNewline) {
+ placement = commentAfterOnSameLine;
+ lastValueHasAComment_ = true;
+ }
+ }
+ }
+
+ addComment(commentBegin, current_, placement);
+ }
+ return true;
+}
+
+String OurReader::normalizeEOL(OurReader::Location begin,
+ OurReader::Location end) {
+ String normalized;
+ normalized.reserve(static_cast<size_t>(end - begin));
+ OurReader::Location current = begin;
+ while (current != end) {
+ char c = *current++;
+ if (c == '\r') {
+ if (current != end && *current == '\n')
+ // convert dos EOL
+ ++current;
+ // convert Mac EOL
+ normalized += '\n';
+ } else {
+ normalized += c;
+ }
+ }
+ return normalized;
+}
+
+void OurReader::addComment(Location begin, Location end,
+ CommentPlacement placement) {
+ assert(collectComments_);
+ const String& normalized = normalizeEOL(begin, end);
+ if (placement == commentAfterOnSameLine) {
+ assert(lastValue_ != nullptr);
+ lastValue_->setComment(normalized, placement);
+ } else {
+ commentsBefore_ += normalized;
+ }
+}
+
+bool OurReader::readCStyleComment(bool* containsNewLineResult) {
+ *containsNewLineResult = false;
+
+ while ((current_ + 1) < end_) {
+ Char c = getNextChar();
+ if (c == '*' && *current_ == '/')
+ break;
+ if (c == '\n')
+ *containsNewLineResult = true;
+ }
+
+ return getNextChar() == '/';
+}
+
+bool OurReader::readCppStyleComment() {
+ while (current_ != end_) {
+ Char c = getNextChar();
+ if (c == '\n')
+ break;
+ if (c == '\r') {
+ // Consume DOS EOL. It will be normalized in addComment.
+ if (current_ != end_ && *current_ == '\n')
+ getNextChar();
+ // Break on Moc OS 9 EOL.
+ break;
+ }
+ }
+ return true;
+}
+
+bool OurReader::readNumber(bool checkInf) {
+ Location p = current_;
+ if (checkInf && p != end_ && *p == 'I') {
+ current_ = ++p;
+ return false;
+ }
+ char c = '0'; // stopgap for already consumed character
+ // integral part
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ // fractional part
+ if (c == '.') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ // exponential part
+ if (c == 'e' || c == 'E') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ if (c == '+' || c == '-')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ return true;
+}
+bool OurReader::readString() {
+ Char c = 0;
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '"')
+ break;
+ }
+ return c == '"';
+}
+
+bool OurReader::readStringSingleQuote() {
+ Char c = 0;
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '\'')
+ break;
+ }
+ return c == '\'';
+}
+
+bool OurReader::readObject(Token& token) {
+ Token tokenName;
+ String name;
+ Value init(objectValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ while (readToken(tokenName)) {
+ bool initialTokenOk = true;
+ while (tokenName.type_ == tokenComment && initialTokenOk)
+ initialTokenOk = readToken(tokenName);
+ if (!initialTokenOk)
+ break;
+ if (tokenName.type_ == tokenObjectEnd &&
+ (name.empty() ||
+ features_.allowTrailingCommas_)) // empty object or trailing comma
+ return true;
+ name.clear();
+ if (tokenName.type_ == tokenString) {
+ if (!decodeString(tokenName, name))
+ return recoverFromError(tokenObjectEnd);
+ } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+ Value numberName;
+ if (!decodeNumber(tokenName, numberName))
+ return recoverFromError(tokenObjectEnd);
+ name = numberName.asString();
+ } else {
+ break;
+ }
+ if (name.length() >= (1U << 30))
+ throwRuntimeError("keylength >= 2^30");
+ if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
+ String msg = "Duplicate key: '" + name + "'";
+ return addErrorAndRecover(msg, tokenName, tokenObjectEnd);
+ }
+
+ Token colon;
+ if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+ return addErrorAndRecover("Missing ':' after object member name", colon,
+ tokenObjectEnd);
+ }
+ Value& value = currentValue()[name];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenObjectEnd);
+
+ Token comma;
+ if (!readToken(comma) ||
+ (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+ comma.type_ != tokenComment)) {
+ return addErrorAndRecover("Missing ',' or '}' in object declaration",
+ comma, tokenObjectEnd);
+ }
+ bool finalizeTokenOk = true;
+ while (comma.type_ == tokenComment && finalizeTokenOk)
+ finalizeTokenOk = readToken(comma);
+ if (comma.type_ == tokenObjectEnd)
+ return true;
+ }
+ return addErrorAndRecover("Missing '}' or object member name", tokenName,
+ tokenObjectEnd);
+}
+
+bool OurReader::readArray(Token& token) {
+ Value init(arrayValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ int index = 0;
+ for (;;) {
+ skipSpaces();
+ if (current_ != end_ && *current_ == ']' &&
+ (index == 0 ||
+ (features_.allowTrailingCommas_ &&
+ !features_.allowDroppedNullPlaceholders_))) // empty array or trailing
+ // comma
+ {
+ Token endArray;
+ readToken(endArray);
+ return true;
+ }
+ Value& value = currentValue()[index++];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenArrayEnd);
+
+ Token currentToken;
+ // Accept Comment after last item in the array.
+ ok = readToken(currentToken);
+ while (currentToken.type_ == tokenComment && ok) {
+ ok = readToken(currentToken);
+ }
+ bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
+ currentToken.type_ != tokenArrayEnd);
+ if (!ok || badTokenType) {
+ return addErrorAndRecover("Missing ',' or ']' in array declaration",
+ currentToken, tokenArrayEnd);
+ }
+ if (currentToken.type_ == tokenArrayEnd)
+ break;
+ }
+ return true;
+}
+
+bool OurReader::decodeNumber(Token& token) {
+ Value decoded;
+ if (!decodeNumber(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeNumber(Token& token, Value& decoded) {
+ // Attempts to parse the number as an integer. If the number is
+ // larger than the maximum supported value of an integer then
+ // we decode the number as a double.
+ Location current = token.start_;
+ const bool isNegative = *current == '-';
+ if (isNegative) {
+ ++current;
+ }
+
+ // We assume we can represent the largest and smallest integer types as
+ // unsigned integers with separate sign. This is only true if they can fit
+ // into an unsigned integer.
+ static_assert(Value::maxLargestInt <= Value::maxLargestUInt,
+ "Int must be smaller than UInt");
+
+ // We need to convert minLargestInt into a positive number. The easiest way
+ // to do this conversion is to assume our "threshold" value of minLargestInt
+ // divided by 10 can fit in maxLargestInt when absolute valued. This should
+ // be a safe assumption.
+ static_assert(Value::minLargestInt <= -Value::maxLargestInt,
+ "The absolute value of minLargestInt must be greater than or "
+ "equal to maxLargestInt");
+ static_assert(Value::minLargestInt / 10 >= -Value::maxLargestInt,
+ "The absolute value of minLargestInt must be only 1 magnitude "
+ "larger than maxLargest Int");
+
+ static constexpr Value::LargestUInt positive_threshold =
+ Value::maxLargestUInt / 10;
+ static constexpr Value::UInt positive_last_digit = Value::maxLargestUInt % 10;
+
+ // For the negative values, we have to be more careful. Since typically
+ // -Value::minLargestInt will cause an overflow, we first divide by 10 and
+ // then take the inverse. This assumes that minLargestInt is only a single
+ // power of 10 different in magnitude, which we check above. For the last
+ // digit, we take the modulus before negating for the same reason.
+ static constexpr auto negative_threshold =
+ Value::LargestUInt(-(Value::minLargestInt / 10));
+ static constexpr auto negative_last_digit =
+ Value::UInt(-(Value::minLargestInt % 10));
+
+ const Value::LargestUInt threshold =
+ isNegative ? negative_threshold : positive_threshold;
+ const Value::UInt max_last_digit =
+ isNegative ? negative_last_digit : positive_last_digit;
+
+ Value::LargestUInt value = 0;
+ while (current < token.end_) {
+ Char c = *current++;
+ if (c < '0' || c > '9')
+ return decodeDouble(token, decoded);
+
+ const auto digit(static_cast<Value::UInt>(c - '0'));
+ if (value >= threshold) {
+ // We've hit or exceeded the max value divided by 10 (rounded down). If
+ // a) we've only just touched the limit, meaing value == threshold,
+ // b) this is the last digit, or
+ // c) it's small enough to fit in that rounding delta, we're okay.
+ // Otherwise treat this number as a double to avoid overflow.
+ if (value > threshold || current != token.end_ ||
+ digit > max_last_digit) {
+ return decodeDouble(token, decoded);
+ }
+ }
+ value = value * 10 + digit;
+ }
+
+ if (isNegative) {
+ // We use the same magnitude assumption here, just in case.
+ const auto last_digit = static_cast<Value::UInt>(value % 10);
+ decoded = -Value::LargestInt(value / 10) * 10 - last_digit;
+ } else if (value <= Value::LargestUInt(Value::maxLargestInt)) {
+ decoded = Value::LargestInt(value);
+ } else {
+ decoded = value;
+ }
+
+ return true;
+}
+
+bool OurReader::decodeDouble(Token& token) {
+ Value decoded;
+ if (!decodeDouble(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeDouble(Token& token, Value& decoded) {
+ double value = 0;
+ const String buffer(token.start_, token.end_);
+ IStringStream is(buffer);
+ if (!(is >> value)) {
+ return addError(
+ "'" + String(token.start_, token.end_) + "' is not a number.", token);
+ }
+ decoded = value;
+ return true;
+}
+
+bool OurReader::decodeString(Token& token) {
+ String decoded_string;
+ if (!decodeString(token, decoded_string))
+ return false;
+ Value decoded(decoded_string);
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeString(Token& token, String& decoded) {
+ decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+ Location current = token.start_ + 1; // skip '"'
+ Location end = token.end_ - 1; // do not include '"'
+ while (current != end) {
+ Char c = *current++;
+ if (c == '"')
+ break;
+ if (c == '\\') {
+ if (current == end)
+ return addError("Empty escape sequence in string", token, current);
+ Char escape = *current++;
+ switch (escape) {
+ case '"':
+ decoded += '"';
+ break;
+ case '/':
+ decoded += '/';
+ break;
+ case '\\':
+ decoded += '\\';
+ break;
+ case 'b':
+ decoded += '\b';
+ break;
+ case 'f':
+ decoded += '\f';
+ break;
+ case 'n':
+ decoded += '\n';
+ break;
+ case 'r':
+ decoded += '\r';
+ break;
+ case 't':
+ decoded += '\t';
+ break;
+ case 'u': {
+ unsigned int unicode;
+ if (!decodeUnicodeCodePoint(token, current, end, unicode))
+ return false;
+ decoded += codePointToUTF8(unicode);
+ } break;
+ default:
+ return addError("Bad escape sequence in string", token, current);
+ }
+ } else {
+ decoded += c;
+ }
+ }
+ return true;
+}
+
+bool OurReader::decodeUnicodeCodePoint(Token& token, Location& current,
+ Location end, unsigned int& unicode) {
+
+ if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+ return false;
+ if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+ // surrogate pairs
+ if (end - current < 6)
+ return addError(
+ "additional six characters expected to parse unicode surrogate pair.",
+ token, current);
+ if (*(current++) == '\\' && *(current++) == 'u') {
+ unsigned int surrogatePair;
+ if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+ unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+ } else
+ return false;
+ } else
+ return addError("expecting another \\u token to begin the second half of "
+ "a unicode surrogate pair",
+ token, current);
+ }
+ return true;
+}
+
+bool OurReader::decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end,
+ unsigned int& ret_unicode) {
+ if (end - current < 4)
+ return addError(
+ "Bad unicode escape sequence in string: four digits expected.", token,
+ current);
+ int unicode = 0;
+ for (int index = 0; index < 4; ++index) {
+ Char c = *current++;
+ unicode *= 16;
+ if (c >= '0' && c <= '9')
+ unicode += c - '0';
+ else if (c >= 'a' && c <= 'f')
+ unicode += c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ unicode += c - 'A' + 10;
+ else
+ return addError(
+ "Bad unicode escape sequence in string: hexadecimal digit expected.",
+ token, current);
+ }
+ ret_unicode = static_cast<unsigned int>(unicode);
+ return true;
+}
+
+bool OurReader::addError(const String& message, Token& token, Location extra) {
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = extra;
+ errors_.push_back(info);
+ return false;
+}
+
+bool OurReader::recoverFromError(TokenType skipUntilToken) {
+ size_t errorCount = errors_.size();
+ Token skip;
+ for (;;) {
+ if (!readToken(skip))
+ errors_.resize(errorCount); // discard errors caused by recovery
+ if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+ break;
+ }
+ errors_.resize(errorCount);
+ return false;
+}
+
+bool OurReader::addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken) {
+ addError(message, token);
+ return recoverFromError(skipUntilToken);
+}
+
+Value& OurReader::currentValue() { return *(nodes_.top()); }
+
+OurReader::Char OurReader::getNextChar() {
+ if (current_ == end_)
+ return 0;
+ return *current_++;
+}
+
+void OurReader::getLocationLineAndColumn(Location location, int& line,
+ int& column) const {
+ Location current = begin_;
+ Location lastLineStart = current;
+ line = 0;
+ while (current < location && current != end_) {
+ Char c = *current++;
+ if (c == '\r') {
+ if (*current == '\n')
+ ++current;
+ lastLineStart = current;
+ ++line;
+ } else if (c == '\n') {
+ lastLineStart = current;
+ ++line;
+ }
+ }
+ // column & line start at 1
+ column = int(location - lastLineStart) + 1;
+ ++line;
+}
+
+String OurReader::getLocationLineAndColumn(Location location) const {
+ int line, column;
+ getLocationLineAndColumn(location, line, column);
+ char buffer[18 + 16 + 16 + 1];
+ jsoncpp_snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+ return buffer;
+}
+
+String OurReader::getFormattedErrorMessages() const {
+ String formattedMessage;
+ for (const auto& error : errors_) {
+ formattedMessage +=
+ "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+ formattedMessage += " " + error.message_ + "\n";
+ if (error.extra_)
+ formattedMessage +=
+ "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+ }
+ return formattedMessage;
+}
+
+std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
+ std::vector<OurReader::StructuredError> allErrors;
+ for (const auto& error : errors_) {
+ OurReader::StructuredError structured;
+ structured.offset_start = error.token_.start_ - begin_;
+ structured.offset_limit = error.token_.end_ - begin_;
+ structured.message = error.message_;
+ allErrors.push_back(structured);
+ }
+ return allErrors;
+}
+
+class OurCharReader : public CharReader {
+ bool const collectComments_;
+ OurReader reader_;
+
+public:
+ OurCharReader(bool collectComments, OurFeatures const& features)
+ : collectComments_(collectComments), reader_(features) {}
+ bool parse(char const* beginDoc, char const* endDoc, Value* root,
+ String* errs) override {
+ bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
+ if (errs) {
+ *errs = reader_.getFormattedErrorMessages();
+ }
+ return ok;
+ }
+};
+
+CharReaderBuilder::CharReaderBuilder() { setDefaults(&settings_); }
+CharReaderBuilder::~CharReaderBuilder() = default;
+CharReader* CharReaderBuilder::newCharReader() const {
+ bool collectComments = settings_["collectComments"].asBool();
+ OurFeatures features = OurFeatures::all();
+ features.allowComments_ = settings_["allowComments"].asBool();
+ features.allowTrailingCommas_ = settings_["allowTrailingCommas"].asBool();
+ features.strictRoot_ = settings_["strictRoot"].asBool();
+ features.allowDroppedNullPlaceholders_ =
+ settings_["allowDroppedNullPlaceholders"].asBool();
+ features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
+ features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
+
+ // Stack limit is always a size_t, so we get this as an unsigned int
+ // regardless of it we have 64-bit integer support enabled.
+ features.stackLimit_ = static_cast<size_t>(settings_["stackLimit"].asUInt());
+ features.failIfExtra_ = settings_["failIfExtra"].asBool();
+ features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
+ features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool();
+ features.skipBom_ = settings_["skipBom"].asBool();
+ return new OurCharReader(collectComments, features);
+}
+
+bool CharReaderBuilder::validate(Json::Value* invalid) const {
+ static const auto& valid_keys = *new std::set<String>{
+ "collectComments",
+ "allowComments",
+ "allowTrailingCommas",
+ "strictRoot",
+ "allowDroppedNullPlaceholders",
+ "allowNumericKeys",
+ "allowSingleQuotes",
+ "stackLimit",
+ "failIfExtra",
+ "rejectDupKeys",
+ "allowSpecialFloats",
+ "skipBom",
+ };
+ for (auto si = settings_.begin(); si != settings_.end(); ++si) {
+ auto key = si.name();
+ if (valid_keys.count(key))
+ continue;
+ if (invalid)
+ (*invalid)[key] = *si;
+ else
+ return false;
+ }
+ return invalid ? invalid->empty() : true;
+}
+
+Value& CharReaderBuilder::operator[](const String& key) {
+ return settings_[key];
+}
+// static
+void CharReaderBuilder::strictMode(Json::Value* settings) {
+ //! [CharReaderBuilderStrictMode]
+ (*settings)["allowComments"] = false;
+ (*settings)["allowTrailingCommas"] = false;
+ (*settings)["strictRoot"] = true;
+ (*settings)["allowDroppedNullPlaceholders"] = false;
+ (*settings)["allowNumericKeys"] = false;
+ (*settings)["allowSingleQuotes"] = false;
+ (*settings)["stackLimit"] = 1000;
+ (*settings)["failIfExtra"] = true;
+ (*settings)["rejectDupKeys"] = true;
+ (*settings)["allowSpecialFloats"] = false;
+ (*settings)["skipBom"] = true;
+ //! [CharReaderBuilderStrictMode]
+}
+// static
+void CharReaderBuilder::setDefaults(Json::Value* settings) {
+ //! [CharReaderBuilderDefaults]
+ (*settings)["collectComments"] = true;
+ (*settings)["allowComments"] = true;
+ (*settings)["allowTrailingCommas"] = true;
+ (*settings)["strictRoot"] = false;
+ (*settings)["allowDroppedNullPlaceholders"] = false;
+ (*settings)["allowNumericKeys"] = false;
+ (*settings)["allowSingleQuotes"] = false;
+ (*settings)["stackLimit"] = 1000;
+ (*settings)["failIfExtra"] = false;
+ (*settings)["rejectDupKeys"] = false;
+ (*settings)["allowSpecialFloats"] = false;
+ (*settings)["skipBom"] = true;
+ //! [CharReaderBuilderDefaults]
+}
+
+//////////////////////////////////
+// global functions
+
+bool parseFromStream(CharReader::Factory const& fact, IStream& sin, Value* root,
+ String* errs) {
+ OStringStream ssin;
+ ssin << sin.rdbuf();
+ String doc = ssin.str();
+ char const* begin = doc.data();
+ char const* end = begin + doc.size();
+ // Note that we do not actually need a null-terminator.
+ CharReaderPtr const reader(fact.newCharReader());
+ return reader->parse(begin, end, root, errs);
+}
+
+IStream& operator>>(IStream& sin, Value& root) {
+ CharReaderBuilder b;
+ String errs;
+ bool ok = parseFromStream(b, sin, &root, &errs);
+ if (!ok) {
+ throwRuntimeError(errs);
+ }
+ return sin;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h
new file mode 100644
index 0000000000..b952c19167
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h
@@ -0,0 +1,138 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/config.h>
+#endif
+
+// Also support old flag NO_LOCALE_SUPPORT
+#ifdef NO_LOCALE_SUPPORT
+#define JSONCPP_NO_LOCALE_SUPPORT
+#endif
+
+#ifndef JSONCPP_NO_LOCALE_SUPPORT
+#include <clocale>
+#endif
+
+/* This header provides common string manipulation support, such as UTF-8,
+ * portable conversion from/to string...
+ *
+ * It is an internal header that must not be exposed.
+ */
+
+namespace Json {
+static inline char getDecimalPoint() {
+#ifdef JSONCPP_NO_LOCALE_SUPPORT
+ return '\0';
+#else
+ struct lconv* lc = localeconv();
+ return lc ? *(lc->decimal_point) : '\0';
+#endif
+}
+
+/// Converts a unicode code-point to UTF-8.
+static inline String codePointToUTF8(unsigned int cp) {
+ String result;
+
+ // based on description from http://en.wikipedia.org/wiki/UTF-8
+
+ if (cp <= 0x7f) {
+ result.resize(1);
+ result[0] = static_cast<char>(cp);
+ } else if (cp <= 0x7FF) {
+ result.resize(2);
+ result[1] = static_cast<char>(0x80 | (0x3f & cp));
+ result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
+ } else if (cp <= 0xFFFF) {
+ result.resize(3);
+ result[2] = static_cast<char>(0x80 | (0x3f & cp));
+ result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+ result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
+ } else if (cp <= 0x10FFFF) {
+ result.resize(4);
+ result[3] = static_cast<char>(0x80 | (0x3f & cp));
+ result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+ result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
+ result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
+ }
+
+ return result;
+}
+
+enum {
+ /// Constant that specify the size of the buffer that must be passed to
+ /// uintToString.
+ uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
+};
+
+// Defines a char buffer for use with uintToString().
+using UIntToStringBuffer = char[uintToStringBufferSize];
+
+/** Converts an unsigned integer to string.
+ * @param value Unsigned integer to convert to string
+ * @param current Input/Output string buffer.
+ * Must have at least uintToStringBufferSize chars free.
+ */
+static inline void uintToString(LargestUInt value, char*& current) {
+ *--current = 0;
+ do {
+ *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0'));
+ value /= 10;
+ } while (value != 0);
+}
+
+/** Change ',' to '.' everywhere in buffer.
+ *
+ * We had a sophisticated way, but it did not work in WinCE.
+ * @see https://github.com/open-source-parsers/jsoncpp/pull/9
+ */
+template <typename Iter> Iter fixNumericLocale(Iter begin, Iter end) {
+ for (; begin != end; ++begin) {
+ if (*begin == ',') {
+ *begin = '.';
+ }
+ }
+ return begin;
+}
+
+template <typename Iter> void fixNumericLocaleInput(Iter begin, Iter end) {
+ char decimalPoint = getDecimalPoint();
+ if (decimalPoint == '\0' || decimalPoint == '.') {
+ return;
+ }
+ for (; begin != end; ++begin) {
+ if (*begin == '.') {
+ *begin = decimalPoint;
+ }
+ }
+}
+
+/**
+ * Return iterator that would be the new end of the range [begin,end), if we
+ * were to delete zeros in the end of string, but not the last zero before '.'.
+ */
+template <typename Iter>
+Iter fixZerosInTheEnd(Iter begin, Iter end, unsigned int precision) {
+ for (; begin != end; --end) {
+ if (*(end - 1) != '0') {
+ return end;
+ }
+ // Don't delete the last zero before the decimal point.
+ if (begin != (end - 1) && begin != (end - 2) && *(end - 2) == '.') {
+ if (precision) {
+ return end;
+ }
+ return end - 2;
+ }
+ }
+ return end;
+}
+
+} // namespace Json
+
+#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp
new file mode 100644
index 0000000000..aa2b744ca8
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp
@@ -0,0 +1,1634 @@
+// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/value.h>
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cmath>
+#include <cstddef>
+#include <cstring>
+#include <iostream>
+#include <sstream>
+#include <utility>
+
+// Provide implementation equivalent of std::snprintf for older _MSC compilers
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#include <stdarg.h>
+static int msvc_pre1900_c99_vsnprintf(char* outBuf, size_t size,
+ const char* format, va_list ap) {
+ int count = -1;
+ if (size != 0)
+ count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
+ if (count == -1)
+ count = _vscprintf(format, ap);
+ return count;
+}
+
+int JSON_API msvc_pre1900_c99_snprintf(char* outBuf, size_t size,
+ const char* format, ...) {
+ va_list ap;
+ va_start(ap, format);
+ const int count = msvc_pre1900_c99_vsnprintf(outBuf, size, format, ap);
+ va_end(ap);
+ return count;
+}
+#endif
+
+// Disable warning C4702 : unreachable code
+#if defined(_MSC_VER)
+#pragma warning(disable : 4702)
+#endif
+
+#define JSON_ASSERT_UNREACHABLE assert(false)
+
+namespace Json {
+template <typename T>
+static std::unique_ptr<T> cloneUnique(const std::unique_ptr<T>& p) {
+ std::unique_ptr<T> r;
+ if (p) {
+ r = std::unique_ptr<T>(new T(*p));
+ }
+ return r;
+}
+
+// This is a walkaround to avoid the static initialization of Value::null.
+// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of
+// 8 (instead of 4) as a bit of future-proofing.
+#if defined(__ARMEL__)
+#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
+#else
+#define ALIGNAS(byte_alignment)
+#endif
+
+// static
+Value const& Value::nullSingleton() {
+ static Value const nullStatic;
+ return nullStatic;
+}
+
+#if JSON_USE_NULLREF
+// for backwards compatibility, we'll leave these global references around, but
+// DO NOT use them in JSONCPP library code any more!
+// static
+Value const& Value::null = Value::nullSingleton();
+
+// static
+Value const& Value::nullRef = Value::nullSingleton();
+#endif
+
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+ // The casts can lose precision, but we are looking only for
+ // an approximate range. Might fail on edge cases though. ~cdunn
+ return d >= static_cast<double>(min) && d <= static_cast<double>(max);
+}
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+static inline double integerToDouble(Json::UInt64 value) {
+ return static_cast<double>(Int64(value / 2)) * 2.0 +
+ static_cast<double>(Int64(value & 1));
+}
+
+template <typename T> static inline double integerToDouble(T value) {
+ return static_cast<double>(value);
+}
+
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+ return d >= integerToDouble(min) && d <= integerToDouble(max);
+}
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+
+/** Duplicates the specified string value.
+ * @param value Pointer to the string to duplicate. Must be zero-terminated if
+ * length is "unknown".
+ * @param length Length of the value. if equals to unknown, then it will be
+ * computed using strlen(value).
+ * @return Pointer on the duplicate instance of string.
+ */
+static inline char* duplicateStringValue(const char* value, size_t length) {
+ // Avoid an integer overflow in the call to malloc below by limiting length
+ // to a sane value.
+ if (length >= static_cast<size_t>(Value::maxInt))
+ length = Value::maxInt - 1;
+
+ auto newString = static_cast<char*>(malloc(length + 1));
+ if (newString == nullptr) {
+ throwRuntimeError("in Json::Value::duplicateStringValue(): "
+ "Failed to allocate string value buffer");
+ }
+ memcpy(newString, value, length);
+ newString[length] = 0;
+ return newString;
+}
+
+/* Record the length as a prefix.
+ */
+static inline char* duplicateAndPrefixStringValue(const char* value,
+ unsigned int length) {
+ // Avoid an integer overflow in the call to malloc below by limiting length
+ // to a sane value.
+ JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) -
+ sizeof(unsigned) - 1U,
+ "in Json::Value::duplicateAndPrefixStringValue(): "
+ "length too big for prefixing");
+ size_t actualLength = sizeof(length) + length + 1;
+ auto newString = static_cast<char*>(malloc(actualLength));
+ if (newString == nullptr) {
+ throwRuntimeError("in Json::Value::duplicateAndPrefixStringValue(): "
+ "Failed to allocate string value buffer");
+ }
+ *reinterpret_cast<unsigned*>(newString) = length;
+ memcpy(newString + sizeof(unsigned), value, length);
+ newString[actualLength - 1U] =
+ 0; // to avoid buffer over-run accidents by users later
+ return newString;
+}
+inline static void decodePrefixedString(bool isPrefixed, char const* prefixed,
+ unsigned* length, char const** value) {
+ if (!isPrefixed) {
+ *length = static_cast<unsigned>(strlen(prefixed));
+ *value = prefixed;
+ } else {
+ *length = *reinterpret_cast<unsigned const*>(prefixed);
+ *value = prefixed + sizeof(unsigned);
+ }
+}
+/** Free the string duplicated by
+ * duplicateStringValue()/duplicateAndPrefixStringValue().
+ */
+#if JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) {
+ unsigned length = 0;
+ char const* valueDecoded;
+ decodePrefixedString(true, value, &length, &valueDecoded);
+ size_t const size = sizeof(unsigned) + length + 1U;
+ memset(value, 0, size);
+ free(value);
+}
+static inline void releaseStringValue(char* value, unsigned length) {
+ // length==0 => we allocated the strings memory
+ size_t size = (length == 0) ? strlen(value) : length;
+ memset(value, 0, size);
+ free(value);
+}
+#else // !JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) { free(value); }
+static inline void releaseStringValue(char* value, unsigned) { free(value); }
+#endif // JSONCPP_USING_SECURE_MEMORY
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// ValueInternals...
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "json_valueiterator.inl"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+#if JSON_USE_EXCEPTION
+Exception::Exception(String msg) : msg_(std::move(msg)) {}
+Exception::~Exception() noexcept = default;
+char const* Exception::what() const noexcept { return msg_.c_str(); }
+RuntimeError::RuntimeError(String const& msg) : Exception(msg) {}
+LogicError::LogicError(String const& msg) : Exception(msg) {}
+JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
+ throw RuntimeError(msg);
+}
+JSONCPP_NORETURN void throwLogicError(String const& msg) {
+ throw LogicError(msg);
+}
+#else // !JSON_USE_EXCEPTION
+JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
+ std::cerr << msg << std::endl;
+ abort();
+}
+JSONCPP_NORETURN void throwLogicError(String const& msg) {
+ std::cerr << msg << std::endl;
+ abort();
+}
+#endif
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CZString
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+// Notes: policy_ indicates if the string was allocated when
+// a string is stored.
+
+Value::CZString::CZString(ArrayIndex index) : cstr_(nullptr), index_(index) {}
+
+Value::CZString::CZString(char const* str, unsigned length,
+ DuplicationPolicy allocate)
+ : cstr_(str) {
+ // allocate != duplicate
+ storage_.policy_ = allocate & 0x3;
+ storage_.length_ = length & 0x3FFFFFFF;
+}
+
+Value::CZString::CZString(const CZString& other) {
+ cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != nullptr
+ ? duplicateStringValue(other.cstr_, other.storage_.length_)
+ : other.cstr_);
+ storage_.policy_ =
+ static_cast<unsigned>(
+ other.cstr_
+ ? (static_cast<DuplicationPolicy>(other.storage_.policy_) ==
+ noDuplication
+ ? noDuplication
+ : duplicate)
+ : static_cast<DuplicationPolicy>(other.storage_.policy_)) &
+ 3U;
+ storage_.length_ = other.storage_.length_;
+}
+
+Value::CZString::CZString(CZString&& other) noexcept
+ : cstr_(other.cstr_), index_(other.index_) {
+ other.cstr_ = nullptr;
+}
+
+Value::CZString::~CZString() {
+ if (cstr_ && storage_.policy_ == duplicate) {
+ releaseStringValue(const_cast<char*>(cstr_),
+ storage_.length_ + 1U); // +1 for null terminating
+ // character for sake of
+ // completeness but not actually
+ // necessary
+ }
+}
+
+void Value::CZString::swap(CZString& other) {
+ std::swap(cstr_, other.cstr_);
+ std::swap(index_, other.index_);
+}
+
+Value::CZString& Value::CZString::operator=(const CZString& other) {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
+ return *this;
+}
+
+Value::CZString& Value::CZString::operator=(CZString&& other) noexcept {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
+ other.cstr_ = nullptr;
+ return *this;
+}
+
+bool Value::CZString::operator<(const CZString& other) const {
+ if (!cstr_)
+ return index_ < other.index_;
+ // return strcmp(cstr_, other.cstr_) < 0;
+ // Assume both are strings.
+ unsigned this_len = this->storage_.length_;
+ unsigned other_len = other.storage_.length_;
+ unsigned min_len = std::min<unsigned>(this_len, other_len);
+ JSON_ASSERT(this->cstr_ && other.cstr_);
+ int comp = memcmp(this->cstr_, other.cstr_, min_len);
+ if (comp < 0)
+ return true;
+ if (comp > 0)
+ return false;
+ return (this_len < other_len);
+}
+
+bool Value::CZString::operator==(const CZString& other) const {
+ if (!cstr_)
+ return index_ == other.index_;
+ // return strcmp(cstr_, other.cstr_) == 0;
+ // Assume both are strings.
+ unsigned this_len = this->storage_.length_;
+ unsigned other_len = other.storage_.length_;
+ if (this_len != other_len)
+ return false;
+ JSON_ASSERT(this->cstr_ && other.cstr_);
+ int comp = memcmp(this->cstr_, other.cstr_, this_len);
+ return comp == 0;
+}
+
+ArrayIndex Value::CZString::index() const { return index_; }
+
+// const char* Value::CZString::c_str() const { return cstr_; }
+const char* Value::CZString::data() const { return cstr_; }
+unsigned Value::CZString::length() const { return storage_.length_; }
+bool Value::CZString::isStaticString() const {
+ return storage_.policy_ == noDuplication;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::Value
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/*! \internal Default constructor initialization must be equivalent to:
+ * memset( this, 0, sizeof(Value) )
+ * This optimization is used in ValueInternalMap fast allocator.
+ */
+Value::Value(ValueType type) {
+ static char const emptyString[] = "";
+ initBasic(type);
+ switch (type) {
+ case nullValue:
+ break;
+ case intValue:
+ case uintValue:
+ value_.int_ = 0;
+ break;
+ case realValue:
+ value_.real_ = 0.0;
+ break;
+ case stringValue:
+ // allocated_ == false, so this is safe.
+ value_.string_ = const_cast<char*>(static_cast<char const*>(emptyString));
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues();
+ break;
+ case booleanValue:
+ value_.bool_ = false;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+Value::Value(Int value) {
+ initBasic(intValue);
+ value_.int_ = value;
+}
+
+Value::Value(UInt value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
+}
+#if defined(JSON_HAS_INT64)
+Value::Value(Int64 value) {
+ initBasic(intValue);
+ value_.int_ = value;
+}
+Value::Value(UInt64 value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
+}
+#endif // defined(JSON_HAS_INT64)
+
+Value::Value(double value) {
+ initBasic(realValue);
+ value_.real_ = value;
+}
+
+Value::Value(const char* value) {
+ initBasic(stringValue, true);
+ JSON_ASSERT_MESSAGE(value != nullptr,
+ "Null Value Passed to Value Constructor");
+ value_.string_ = duplicateAndPrefixStringValue(
+ value, static_cast<unsigned>(strlen(value)));
+}
+
+Value::Value(const char* begin, const char* end) {
+ initBasic(stringValue, true);
+ value_.string_ =
+ duplicateAndPrefixStringValue(begin, static_cast<unsigned>(end - begin));
+}
+
+Value::Value(const String& value) {
+ initBasic(stringValue, true);
+ value_.string_ = duplicateAndPrefixStringValue(
+ value.data(), static_cast<unsigned>(value.length()));
+}
+
+Value::Value(const StaticString& value) {
+ initBasic(stringValue);
+ value_.string_ = const_cast<char*>(value.c_str());
+}
+
+Value::Value(bool value) {
+ initBasic(booleanValue);
+ value_.bool_ = value;
+}
+
+Value::Value(const Value& other) {
+ dupPayload(other);
+ dupMeta(other);
+}
+
+Value::Value(Value&& other) noexcept {
+ initBasic(nullValue);
+ swap(other);
+}
+
+Value::~Value() {
+ releasePayload();
+ value_.uint_ = 0;
+}
+
+Value& Value::operator=(const Value& other) {
+ Value(other).swap(*this);
+ return *this;
+}
+
+Value& Value::operator=(Value&& other) noexcept {
+ other.swap(*this);
+ return *this;
+}
+
+void Value::swapPayload(Value& other) {
+ std::swap(bits_, other.bits_);
+ std::swap(value_, other.value_);
+}
+
+void Value::copyPayload(const Value& other) {
+ releasePayload();
+ dupPayload(other);
+}
+
+void Value::swap(Value& other) {
+ swapPayload(other);
+ std::swap(comments_, other.comments_);
+ std::swap(start_, other.start_);
+ std::swap(limit_, other.limit_);
+}
+
+void Value::copy(const Value& other) {
+ copyPayload(other);
+ dupMeta(other);
+}
+
+ValueType Value::type() const {
+ return static_cast<ValueType>(bits_.value_type_);
+}
+
+int Value::compare(const Value& other) const {
+ if (*this < other)
+ return -1;
+ if (*this > other)
+ return 1;
+ return 0;
+}
+
+bool Value::operator<(const Value& other) const {
+ int typeDelta = type() - other.type();
+ if (typeDelta)
+ return typeDelta < 0;
+ switch (type()) {
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ < other.value_.int_;
+ case uintValue:
+ return value_.uint_ < other.value_.uint_;
+ case realValue:
+ return value_.real_ < other.value_.real_;
+ case booleanValue:
+ return value_.bool_ < other.value_.bool_;
+ case stringValue: {
+ if ((value_.string_ == nullptr) || (other.value_.string_ == nullptr)) {
+ return other.value_.string_ != nullptr;
+ }
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &other_len,
+ &other_str);
+ unsigned min_len = std::min<unsigned>(this_len, other_len);
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, min_len);
+ if (comp < 0)
+ return true;
+ if (comp > 0)
+ return false;
+ return (this_len < other_len);
+ }
+ case arrayValue:
+ case objectValue: {
+ auto thisSize = value_.map_->size();
+ auto otherSize = other.value_.map_->size();
+ if (thisSize != otherSize)
+ return thisSize < otherSize;
+ return (*value_.map_) < (*other.value_.map_);
+ }
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+ return false; // unreachable
+}
+
+bool Value::operator<=(const Value& other) const { return !(other < *this); }
+
+bool Value::operator>=(const Value& other) const { return !(*this < other); }
+
+bool Value::operator>(const Value& other) const { return other < *this; }
+
+bool Value::operator==(const Value& other) const {
+ if (type() != other.type())
+ return false;
+ switch (type()) {
+ case nullValue:
+ return true;
+ case intValue:
+ return value_.int_ == other.value_.int_;
+ case uintValue:
+ return value_.uint_ == other.value_.uint_;
+ case realValue:
+ return value_.real_ == other.value_.real_;
+ case booleanValue:
+ return value_.bool_ == other.value_.bool_;
+ case stringValue: {
+ if ((value_.string_ == nullptr) || (other.value_.string_ == nullptr)) {
+ return (value_.string_ == other.value_.string_);
+ }
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &other_len,
+ &other_str);
+ if (this_len != other_len)
+ return false;
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, this_len);
+ return comp == 0;
+ }
+ case arrayValue:
+ case objectValue:
+ return value_.map_->size() == other.value_.map_->size() &&
+ (*value_.map_) == (*other.value_.map_);
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+ return false; // unreachable
+}
+
+bool Value::operator!=(const Value& other) const { return !(*this == other); }
+
+const char* Value::asCString() const {
+ JSON_ASSERT_MESSAGE(type() == stringValue,
+ "in Json::Value::asCString(): requires stringValue");
+ if (value_.string_ == nullptr)
+ return nullptr;
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return this_str;
+}
+
+#if JSONCPP_USING_SECURE_MEMORY
+unsigned Value::getCStringLength() const {
+ JSON_ASSERT_MESSAGE(type() == stringValue,
+ "in Json::Value::asCString(): requires stringValue");
+ if (value_.string_ == 0)
+ return 0;
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return this_len;
+}
+#endif
+
+bool Value::getString(char const** begin, char const** end) const {
+ if (type() != stringValue)
+ return false;
+ if (value_.string_ == nullptr)
+ return false;
+ unsigned length;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &length,
+ begin);
+ *end = *begin + length;
+ return true;
+}
+
+String Value::asString() const {
+ switch (type()) {
+ case nullValue:
+ return "";
+ case stringValue: {
+ if (value_.string_ == nullptr)
+ return "";
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return String(this_str, this_len);
+ }
+ case booleanValue:
+ return value_.bool_ ? "true" : "false";
+ case intValue:
+ return valueToString(value_.int_);
+ case uintValue:
+ return valueToString(value_.uint_);
+ case realValue:
+ return valueToString(value_.real_);
+ default:
+ JSON_FAIL_MESSAGE("Type is not convertible to string");
+ }
+}
+
+Value::Int Value::asInt() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
+ return Int(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
+ return Int(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
+ "double out of Int range");
+ return Int(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to Int.");
+}
+
+Value::UInt Value::asUInt() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
+ return UInt(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
+ return UInt(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
+ "double out of UInt range");
+ return UInt(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
+}
+
+#if defined(JSON_HAS_INT64)
+
+Value::Int64 Value::asInt64() const {
+ switch (type()) {
+ case intValue:
+ return Int64(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
+ return Int64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
+ "double out of Int64 range");
+ return Int64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
+}
+
+Value::UInt64 Value::asUInt64() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
+ return UInt64(value_.int_);
+ case uintValue:
+ return UInt64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
+ "double out of UInt64 range");
+ return UInt64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
+}
+#endif // if defined(JSON_HAS_INT64)
+
+LargestInt Value::asLargestInt() const {
+#if defined(JSON_NO_INT64)
+ return asInt();
+#else
+ return asInt64();
+#endif
+}
+
+LargestUInt Value::asLargestUInt() const {
+#if defined(JSON_NO_INT64)
+ return asUInt();
+#else
+ return asUInt64();
+#endif
+}
+
+double Value::asDouble() const {
+ switch (type()) {
+ case intValue:
+ return static_cast<double>(value_.int_);
+ case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return static_cast<double>(value_.uint_);
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return integerToDouble(value_.uint_);
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ case realValue:
+ return value_.real_;
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0 : 0.0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to double.");
+}
+
+float Value::asFloat() const {
+ switch (type()) {
+ case intValue:
+ return static_cast<float>(value_.int_);
+ case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return static_cast<float>(value_.uint_);
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ // This can fail (silently?) if the value is bigger than MAX_FLOAT.
+ return static_cast<float>(integerToDouble(value_.uint_));
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ case realValue:
+ return static_cast<float>(value_.real_);
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0F : 0.0F;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to float.");
+}
+
+bool Value::asBool() const {
+ switch (type()) {
+ case booleanValue:
+ return value_.bool_;
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ != 0;
+ case uintValue:
+ return value_.uint_ != 0;
+ case realValue: {
+ // According to JavaScript language zero or NaN is regarded as false
+ const auto value_classification = std::fpclassify(value_.real_);
+ return value_classification != FP_ZERO && value_classification != FP_NAN;
+ }
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to bool.");
+}
+
+bool Value::isConvertibleTo(ValueType other) const {
+ switch (other) {
+ case nullValue:
+ return (isNumeric() && asDouble() == 0.0) ||
+ (type() == booleanValue && !value_.bool_) ||
+ (type() == stringValue && asString().empty()) ||
+ (type() == arrayValue && value_.map_->empty()) ||
+ (type() == objectValue && value_.map_->empty()) ||
+ type() == nullValue;
+ case intValue:
+ return isInt() ||
+ (type() == realValue && InRange(value_.real_, minInt, maxInt)) ||
+ type() == booleanValue || type() == nullValue;
+ case uintValue:
+ return isUInt() ||
+ (type() == realValue && InRange(value_.real_, 0, maxUInt)) ||
+ type() == booleanValue || type() == nullValue;
+ case realValue:
+ return isNumeric() || type() == booleanValue || type() == nullValue;
+ case booleanValue:
+ return isNumeric() || type() == booleanValue || type() == nullValue;
+ case stringValue:
+ return isNumeric() || type() == booleanValue || type() == stringValue ||
+ type() == nullValue;
+ case arrayValue:
+ return type() == arrayValue || type() == nullValue;
+ case objectValue:
+ return type() == objectValue || type() == nullValue;
+ }
+ JSON_ASSERT_UNREACHABLE;
+ return false;
+}
+
+/// Number of values in array or object
+ArrayIndex Value::size() const {
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ case stringValue:
+ return 0;
+ case arrayValue: // size of the array is highest index + 1
+ if (!value_.map_->empty()) {
+ ObjectValues::const_iterator itLast = value_.map_->end();
+ --itLast;
+ return (*itLast).first.index() + 1;
+ }
+ return 0;
+ case objectValue:
+ return ArrayIndex(value_.map_->size());
+ }
+ JSON_ASSERT_UNREACHABLE;
+ return 0; // unreachable;
+}
+
+bool Value::empty() const {
+ if (isNull() || isArray() || isObject())
+ return size() == 0U;
+ return false;
+}
+
+Value::operator bool() const { return !isNull(); }
+
+void Value::clear() {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue ||
+ type() == objectValue,
+ "in Json::Value::clear(): requires complex value");
+ start_ = 0;
+ limit_ = 0;
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ value_.map_->clear();
+ break;
+ default:
+ break;
+ }
+}
+
+void Value::resize(ArrayIndex newSize) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::resize(): requires arrayValue");
+ if (type() == nullValue)
+ *this = Value(arrayValue);
+ ArrayIndex oldSize = size();
+ if (newSize == 0)
+ clear();
+ else if (newSize > oldSize)
+ for (ArrayIndex i = oldSize; i < newSize; ++i)
+ (*this)[i];
+ else {
+ for (ArrayIndex index = newSize; index < oldSize; ++index) {
+ value_.map_->erase(index);
+ }
+ JSON_ASSERT(size() == newSize);
+ }
+}
+
+Value& Value::operator[](ArrayIndex index) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == arrayValue,
+ "in Json::Value::operator[](ArrayIndex): requires arrayValue");
+ if (type() == nullValue)
+ *this = Value(arrayValue);
+ CZString key(index);
+ auto it = value_.map_->lower_bound(key);
+ if (it != value_.map_->end() && (*it).first == key)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(key, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ return (*it).second;
+}
+
+Value& Value::operator[](int index) {
+ JSON_ASSERT_MESSAGE(
+ index >= 0,
+ "in Json::Value::operator[](int index): index cannot be negative");
+ return (*this)[ArrayIndex(index)];
+}
+
+const Value& Value::operator[](ArrayIndex index) const {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == arrayValue,
+ "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
+ if (type() == nullValue)
+ return nullSingleton();
+ CZString key(index);
+ ObjectValues::const_iterator it = value_.map_->find(key);
+ if (it == value_.map_->end())
+ return nullSingleton();
+ return (*it).second;
+}
+
+const Value& Value::operator[](int index) const {
+ JSON_ASSERT_MESSAGE(
+ index >= 0,
+ "in Json::Value::operator[](int index) const: index cannot be negative");
+ return (*this)[ArrayIndex(index)];
+}
+
+void Value::initBasic(ValueType type, bool allocated) {
+ setType(type);
+ setIsAllocated(allocated);
+ comments_ = Comments{};
+ start_ = 0;
+ limit_ = 0;
+}
+
+void Value::dupPayload(const Value& other) {
+ setType(other.type());
+ setIsAllocated(false);
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ value_ = other.value_;
+ break;
+ case stringValue:
+ if (other.value_.string_ && other.isAllocated()) {
+ unsigned len;
+ char const* str;
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &len,
+ &str);
+ value_.string_ = duplicateAndPrefixStringValue(str, len);
+ setIsAllocated(true);
+ } else {
+ value_.string_ = other.value_.string_;
+ }
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues(*other.value_.map_);
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+void Value::releasePayload() {
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ break;
+ case stringValue:
+ if (isAllocated())
+ releasePrefixedStringValue(value_.string_);
+ break;
+ case arrayValue:
+ case objectValue:
+ delete value_.map_;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+void Value::dupMeta(const Value& other) {
+ comments_ = other.comments_;
+ start_ = other.start_;
+ limit_ = other.limit_;
+}
+
+// Access an object value by name, create a null member if it does not exist.
+// @pre Type of '*this' is object or null.
+// @param key is null-terminated.
+Value& Value::resolveReference(const char* key) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::resolveReference(): requires objectValue");
+ if (type() == nullValue)
+ *this = Value(objectValue);
+ CZString actualKey(key, static_cast<unsigned>(strlen(key)),
+ CZString::noDuplication); // NOTE!
+ auto it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(actualKey, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ Value& value = (*it).second;
+ return value;
+}
+
+// @param key is not null-terminated.
+Value& Value::resolveReference(char const* key, char const* end) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::resolveReference(key, end): requires objectValue");
+ if (type() == nullValue)
+ *this = Value(objectValue);
+ CZString actualKey(key, static_cast<unsigned>(end - key),
+ CZString::duplicateOnCopy);
+ auto it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(actualKey, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ Value& value = (*it).second;
+ return value;
+}
+
+Value Value::get(ArrayIndex index, const Value& defaultValue) const {
+ const Value* value = &((*this)[index]);
+ return value == &nullSingleton() ? defaultValue : *value;
+}
+
+bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
+
+Value const* Value::find(char const* begin, char const* end) const {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::find(begin, end): requires "
+ "objectValue or nullValue");
+ if (type() == nullValue)
+ return nullptr;
+ CZString actualKey(begin, static_cast<unsigned>(end - begin),
+ CZString::noDuplication);
+ ObjectValues::const_iterator it = value_.map_->find(actualKey);
+ if (it == value_.map_->end())
+ return nullptr;
+ return &(*it).second;
+}
+Value* Value::demand(char const* begin, char const* end) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::demand(begin, end): requires "
+ "objectValue or nullValue");
+ return &resolveReference(begin, end);
+}
+const Value& Value::operator[](const char* key) const {
+ Value const* found = find(key, key + strlen(key));
+ if (!found)
+ return nullSingleton();
+ return *found;
+}
+Value const& Value::operator[](const String& key) const {
+ Value const* found = find(key.data(), key.data() + key.length());
+ if (!found)
+ return nullSingleton();
+ return *found;
+}
+
+Value& Value::operator[](const char* key) {
+ return resolveReference(key, key + strlen(key));
+}
+
+Value& Value::operator[](const String& key) {
+ return resolveReference(key.data(), key.data() + key.length());
+}
+
+Value& Value::operator[](const StaticString& key) {
+ return resolveReference(key.c_str());
+}
+
+Value& Value::append(const Value& value) { return append(Value(value)); }
+
+Value& Value::append(Value&& value) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::append: requires arrayValue");
+ if (type() == nullValue) {
+ *this = Value(arrayValue);
+ }
+ return this->value_.map_->emplace(size(), std::move(value)).first->second;
+}
+
+bool Value::insert(ArrayIndex index, const Value& newValue) {
+ return insert(index, Value(newValue));
+}
+
+bool Value::insert(ArrayIndex index, Value&& newValue) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::insert: requires arrayValue");
+ ArrayIndex length = size();
+ if (index > length) {
+ return false;
+ }
+ for (ArrayIndex i = length; i > index; i--) {
+ (*this)[i] = std::move((*this)[i - 1]);
+ }
+ (*this)[index] = std::move(newValue);
+ return true;
+}
+
+Value Value::get(char const* begin, char const* end,
+ Value const& defaultValue) const {
+ Value const* found = find(begin, end);
+ return !found ? defaultValue : *found;
+}
+Value Value::get(char const* key, Value const& defaultValue) const {
+ return get(key, key + strlen(key), defaultValue);
+}
+Value Value::get(String const& key, Value const& defaultValue) const {
+ return get(key.data(), key.data() + key.length(), defaultValue);
+}
+
+bool Value::removeMember(const char* begin, const char* end, Value* removed) {
+ if (type() != objectValue) {
+ return false;
+ }
+ CZString actualKey(begin, static_cast<unsigned>(end - begin),
+ CZString::noDuplication);
+ auto it = value_.map_->find(actualKey);
+ if (it == value_.map_->end())
+ return false;
+ if (removed)
+ *removed = std::move(it->second);
+ value_.map_->erase(it);
+ return true;
+}
+bool Value::removeMember(const char* key, Value* removed) {
+ return removeMember(key, key + strlen(key), removed);
+}
+bool Value::removeMember(String const& key, Value* removed) {
+ return removeMember(key.data(), key.data() + key.length(), removed);
+}
+void Value::removeMember(const char* key) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::removeMember(): requires objectValue");
+ if (type() == nullValue)
+ return;
+
+ CZString actualKey(key, unsigned(strlen(key)), CZString::noDuplication);
+ value_.map_->erase(actualKey);
+}
+void Value::removeMember(const String& key) { removeMember(key.c_str()); }
+
+bool Value::removeIndex(ArrayIndex index, Value* removed) {
+ if (type() != arrayValue) {
+ return false;
+ }
+ CZString key(index);
+ auto it = value_.map_->find(key);
+ if (it == value_.map_->end()) {
+ return false;
+ }
+ if (removed)
+ *removed = it->second;
+ ArrayIndex oldSize = size();
+ // shift left all items left, into the place of the "removed"
+ for (ArrayIndex i = index; i < (oldSize - 1); ++i) {
+ CZString keey(i);
+ (*value_.map_)[keey] = (*this)[i + 1];
+ }
+ // erase the last one ("leftover")
+ CZString keyLast(oldSize - 1);
+ auto itLast = value_.map_->find(keyLast);
+ value_.map_->erase(itLast);
+ return true;
+}
+
+bool Value::isMember(char const* begin, char const* end) const {
+ Value const* value = find(begin, end);
+ return nullptr != value;
+}
+bool Value::isMember(char const* key) const {
+ return isMember(key, key + strlen(key));
+}
+bool Value::isMember(String const& key) const {
+ return isMember(key.data(), key.data() + key.length());
+}
+
+Value::Members Value::getMemberNames() const {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::getMemberNames(), value must be objectValue");
+ if (type() == nullValue)
+ return Value::Members();
+ Members members;
+ members.reserve(value_.map_->size());
+ ObjectValues::const_iterator it = value_.map_->begin();
+ ObjectValues::const_iterator itEnd = value_.map_->end();
+ for (; it != itEnd; ++it) {
+ members.push_back(String((*it).first.data(), (*it).first.length()));
+ }
+ return members;
+}
+
+static bool IsIntegral(double d) {
+ double integral_part;
+ return modf(d, &integral_part) == 0.0;
+}
+
+bool Value::isNull() const { return type() == nullValue; }
+
+bool Value::isBool() const { return type() == booleanValue; }
+
+bool Value::isInt() const {
+ switch (type()) {
+ case intValue:
+#if defined(JSON_HAS_INT64)
+ return value_.int_ >= minInt && value_.int_ <= maxInt;
+#else
+ return true;
+#endif
+ case uintValue:
+ return value_.uint_ <= UInt(maxInt);
+ case realValue:
+ return value_.real_ >= minInt && value_.real_ <= maxInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isUInt() const {
+ switch (type()) {
+ case intValue:
+#if defined(JSON_HAS_INT64)
+ return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
+#else
+ return value_.int_ >= 0;
+#endif
+ case uintValue:
+#if defined(JSON_HAS_INT64)
+ return value_.uint_ <= maxUInt;
+#else
+ return true;
+#endif
+ case realValue:
+ return value_.real_ >= 0 && value_.real_ <= maxUInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isInt64() const {
+#if defined(JSON_HAS_INT64)
+ switch (type()) {
+ case intValue:
+ return true;
+ case uintValue:
+ return value_.uint_ <= UInt64(maxInt64);
+ case realValue:
+ // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
+ // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= double(minInt64) &&
+ value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
+ default:
+ break;
+ }
+#endif // JSON_HAS_INT64
+ return false;
+}
+
+bool Value::isUInt64() const {
+#if defined(JSON_HAS_INT64)
+ switch (type()) {
+ case intValue:
+ return value_.int_ >= 0;
+ case uintValue:
+ return true;
+ case realValue:
+ // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+ // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+#endif // JSON_HAS_INT64
+ return false;
+}
+
+bool Value::isIntegral() const {
+ switch (type()) {
+ case intValue:
+ case uintValue:
+ return true;
+ case realValue:
+#if defined(JSON_HAS_INT64)
+ // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+ // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= double(minInt64) &&
+ value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_);
+#else
+ return value_.real_ >= minInt && value_.real_ <= maxUInt &&
+ IsIntegral(value_.real_);
+#endif // JSON_HAS_INT64
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isDouble() const {
+ return type() == intValue || type() == uintValue || type() == realValue;
+}
+
+bool Value::isNumeric() const { return isDouble(); }
+
+bool Value::isString() const { return type() == stringValue; }
+
+bool Value::isArray() const { return type() == arrayValue; }
+
+bool Value::isObject() const { return type() == objectValue; }
+
+Value::Comments::Comments(const Comments& that)
+ : ptr_{cloneUnique(that.ptr_)} {}
+
+Value::Comments::Comments(Comments&& that) noexcept
+ : ptr_{std::move(that.ptr_)} {}
+
+Value::Comments& Value::Comments::operator=(const Comments& that) {
+ ptr_ = cloneUnique(that.ptr_);
+ return *this;
+}
+
+Value::Comments& Value::Comments::operator=(Comments&& that) noexcept {
+ ptr_ = std::move(that.ptr_);
+ return *this;
+}
+
+bool Value::Comments::has(CommentPlacement slot) const {
+ return ptr_ && !(*ptr_)[slot].empty();
+}
+
+String Value::Comments::get(CommentPlacement slot) const {
+ if (!ptr_)
+ return {};
+ return (*ptr_)[slot];
+}
+
+void Value::Comments::set(CommentPlacement slot, String comment) {
+ if (slot >= CommentPlacement::numberOfCommentPlacement)
+ return;
+ if (!ptr_)
+ ptr_ = std::unique_ptr<Array>(new Array());
+ (*ptr_)[slot] = std::move(comment);
+}
+
+void Value::setComment(String comment, CommentPlacement placement) {
+ if (!comment.empty() && (comment.back() == '\n')) {
+ // Always discard trailing newline, to aid indentation.
+ comment.pop_back();
+ }
+ JSON_ASSERT(!comment.empty());
+ JSON_ASSERT_MESSAGE(
+ comment[0] == '\0' || comment[0] == '/',
+ "in Json::Value::setComment(): Comments must start with /");
+ comments_.set(placement, std::move(comment));
+}
+
+bool Value::hasComment(CommentPlacement placement) const {
+ return comments_.has(placement);
+}
+
+String Value::getComment(CommentPlacement placement) const {
+ return comments_.get(placement);
+}
+
+void Value::setOffsetStart(ptrdiff_t start) { start_ = start; }
+
+void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; }
+
+ptrdiff_t Value::getOffsetStart() const { return start_; }
+
+ptrdiff_t Value::getOffsetLimit() const { return limit_; }
+
+String Value::toStyledString() const {
+ StreamWriterBuilder builder;
+
+ String out = this->hasComment(commentBefore) ? "\n" : "";
+ out += Json::writeString(builder, *this);
+ out += '\n';
+
+ return out;
+}
+
+Value::const_iterator Value::begin() const {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->begin());
+ break;
+ default:
+ break;
+ }
+ return {};
+}
+
+Value::const_iterator Value::end() const {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->end());
+ break;
+ default:
+ break;
+ }
+ return {};
+}
+
+Value::iterator Value::begin() {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->begin());
+ break;
+ default:
+ break;
+ }
+ return iterator();
+}
+
+Value::iterator Value::end() {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->end());
+ break;
+ default:
+ break;
+ }
+ return iterator();
+}
+
+// class PathArgument
+// //////////////////////////////////////////////////////////////////
+
+PathArgument::PathArgument() = default;
+
+PathArgument::PathArgument(ArrayIndex index)
+ : index_(index), kind_(kindIndex) {}
+
+PathArgument::PathArgument(const char* key) : key_(key), kind_(kindKey) {}
+
+PathArgument::PathArgument(String key) : key_(std::move(key)), kind_(kindKey) {}
+
+// class Path
+// //////////////////////////////////////////////////////////////////
+
+Path::Path(const String& path, const PathArgument& a1, const PathArgument& a2,
+ const PathArgument& a3, const PathArgument& a4,
+ const PathArgument& a5) {
+ InArgs in;
+ in.reserve(5);
+ in.push_back(&a1);
+ in.push_back(&a2);
+ in.push_back(&a3);
+ in.push_back(&a4);
+ in.push_back(&a5);
+ makePath(path, in);
+}
+
+void Path::makePath(const String& path, const InArgs& in) {
+ const char* current = path.c_str();
+ const char* end = current + path.length();
+ auto itInArg = in.begin();
+ while (current != end) {
+ if (*current == '[') {
+ ++current;
+ if (*current == '%')
+ addPathInArg(path, in, itInArg, PathArgument::kindIndex);
+ else {
+ ArrayIndex index = 0;
+ for (; current != end && *current >= '0' && *current <= '9'; ++current)
+ index = index * 10 + ArrayIndex(*current - '0');
+ args_.push_back(index);
+ }
+ if (current == end || *++current != ']')
+ invalidPath(path, int(current - path.c_str()));
+ } else if (*current == '%') {
+ addPathInArg(path, in, itInArg, PathArgument::kindKey);
+ ++current;
+ } else if (*current == '.' || *current == ']') {
+ ++current;
+ } else {
+ const char* beginName = current;
+ while (current != end && !strchr("[.", *current))
+ ++current;
+ args_.push_back(String(beginName, current));
+ }
+ }
+}
+
+void Path::addPathInArg(const String& /*path*/, const InArgs& in,
+ InArgs::const_iterator& itInArg,
+ PathArgument::Kind kind) {
+ if (itInArg == in.end()) {
+ // Error: missing argument %d
+ } else if ((*itInArg)->kind_ != kind) {
+ // Error: bad argument type
+ } else {
+ args_.push_back(**itInArg++);
+ }
+}
+
+void Path::invalidPath(const String& /*path*/, int /*location*/) {
+ // Error: invalid path.
+}
+
+const Value& Path::resolve(const Value& root) const {
+ const Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray() || !node->isValidIndex(arg.index_)) {
+ // Error: unable to resolve path (array value expected at position... )
+ return Value::nullSingleton();
+ }
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject()) {
+ // Error: unable to resolve path (object value expected at position...)
+ return Value::nullSingleton();
+ }
+ node = &((*node)[arg.key_]);
+ if (node == &Value::nullSingleton()) {
+ // Error: unable to resolve path (object has no member named '' at
+ // position...)
+ return Value::nullSingleton();
+ }
+ }
+ }
+ return *node;
+}
+
+Value Path::resolve(const Value& root, const Value& defaultValue) const {
+ const Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray() || !node->isValidIndex(arg.index_))
+ return defaultValue;
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject())
+ return defaultValue;
+ node = &((*node)[arg.key_]);
+ if (node == &Value::nullSingleton())
+ return defaultValue;
+ }
+ }
+ return *node;
+}
+
+Value& Path::make(Value& root) const {
+ Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray()) {
+ // Error: node is not an array at position ...
+ }
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject()) {
+ // Error: node is not an object at position...
+ }
+ node = &((*node)[arg.key_]);
+ }
+ }
+ return *node;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl
new file mode 100644
index 0000000000..d6128b8edf
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl
@@ -0,0 +1,156 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+// included by json_value.cpp
+
+namespace Json {
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIteratorBase
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIteratorBase::ValueIteratorBase() : current_() {}
+
+ValueIteratorBase::ValueIteratorBase(
+ const Value::ObjectValues::iterator& current)
+ : current_(current), isNull_(false) {}
+
+Value& ValueIteratorBase::deref() { return current_->second; }
+const Value& ValueIteratorBase::deref() const { return current_->second; }
+
+void ValueIteratorBase::increment() { ++current_; }
+
+void ValueIteratorBase::decrement() { --current_; }
+
+ValueIteratorBase::difference_type
+ValueIteratorBase::computeDistance(const SelfType& other) const {
+ // Iterator for null value are initialized using the default
+ // constructor, which initialize current_ to the default
+ // std::map::iterator. As begin() and end() are two instance
+ // of the default std::map::iterator, they can not be compared.
+ // To allow this, we handle this comparison specifically.
+ if (isNull_ && other.isNull_) {
+ return 0;
+ }
+
+ // Usage of std::distance is not portable (does not compile with Sun Studio 12
+ // RogueWave STL,
+ // which is the one used by default).
+ // Using a portable hand-made version for non random iterator instead:
+ // return difference_type( std::distance( current_, other.current_ ) );
+ difference_type myDistance = 0;
+ for (Value::ObjectValues::iterator it = current_; it != other.current_;
+ ++it) {
+ ++myDistance;
+ }
+ return myDistance;
+}
+
+bool ValueIteratorBase::isEqual(const SelfType& other) const {
+ if (isNull_) {
+ return other.isNull_;
+ }
+ return current_ == other.current_;
+}
+
+void ValueIteratorBase::copy(const SelfType& other) {
+ current_ = other.current_;
+ isNull_ = other.isNull_;
+}
+
+Value ValueIteratorBase::key() const {
+ const Value::CZString czstring = (*current_).first;
+ if (czstring.data()) {
+ if (czstring.isStaticString())
+ return Value(StaticString(czstring.data()));
+ return Value(czstring.data(), czstring.data() + czstring.length());
+ }
+ return Value(czstring.index());
+}
+
+UInt ValueIteratorBase::index() const {
+ const Value::CZString czstring = (*current_).first;
+ if (!czstring.data())
+ return czstring.index();
+ return Value::UInt(-1);
+}
+
+String ValueIteratorBase::name() const {
+ char const* keey;
+ char const* end;
+ keey = memberName(&end);
+ if (!keey)
+ return String();
+ return String(keey, end);
+}
+
+char const* ValueIteratorBase::memberName() const {
+ const char* cname = (*current_).first.data();
+ return cname ? cname : "";
+}
+
+char const* ValueIteratorBase::memberName(char const** end) const {
+ const char* cname = (*current_).first.data();
+ if (!cname) {
+ *end = nullptr;
+ return nullptr;
+ }
+ *end = cname + (*current_).first.length();
+ return cname;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueConstIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueConstIterator::ValueConstIterator() = default;
+
+ValueConstIterator::ValueConstIterator(
+ const Value::ObjectValues::iterator& current)
+ : ValueIteratorBase(current) {}
+
+ValueConstIterator::ValueConstIterator(ValueIterator const& other)
+ : ValueIteratorBase(other) {}
+
+ValueConstIterator& ValueConstIterator::
+operator=(const ValueIteratorBase& other) {
+ copy(other);
+ return *this;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIterator::ValueIterator() = default;
+
+ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
+ : ValueIteratorBase(current) {}
+
+ValueIterator::ValueIterator(const ValueConstIterator& other)
+ : ValueIteratorBase(other) {
+ throwRuntimeError("ConstIterator to Iterator should never be allowed.");
+}
+
+ValueIterator::ValueIterator(const ValueIterator& other) = default;
+
+ValueIterator& ValueIterator::operator=(const SelfType& other) {
+ copy(other);
+ return *this;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp
new file mode 100644
index 0000000000..0dd160e452
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp
@@ -0,0 +1,1259 @@
+// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_tool.h"
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cctype>
+#include <cstring>
+#include <iomanip>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <utility>
+
+#if __cplusplus >= 201103L
+#include <cmath>
+#include <cstdio>
+
+#if !defined(isnan)
+#define isnan std::isnan
+#endif
+
+#if !defined(isfinite)
+#define isfinite std::isfinite
+#endif
+
+#else
+#include <cmath>
+#include <cstdio>
+
+#if defined(_MSC_VER)
+#if !defined(isnan)
+#include <float.h>
+#define isnan _isnan
+#endif
+
+#if !defined(isfinite)
+#include <float.h>
+#define isfinite _finite
+#endif
+
+#if !defined(_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
+#endif //_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
+
+#endif //_MSC_VER
+
+#if defined(__sun) && defined(__SVR4) // Solaris
+#if !defined(isfinite)
+#include <ieeefp.h>
+#define isfinite finite
+#endif
+#endif
+
+#if defined(__hpux)
+#if !defined(isfinite)
+#if defined(__ia64) && !defined(finite)
+#define isfinite(x) \
+ ((sizeof(x) == sizeof(float) ? _Isfinitef(x) : _IsFinite(x)))
+#endif
+#endif
+#endif
+
+#if !defined(isnan)
+// IEEE standard states that NaN values will not compare to themselves
+#define isnan(x) ((x) != (x))
+#endif
+
+#if !defined(__APPLE__)
+#if !defined(isfinite)
+#define isfinite finite
+#endif
+#endif
+#endif
+
+#if defined(_MSC_VER)
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+using StreamWriterPtr = std::unique_ptr<StreamWriter>;
+#else
+using StreamWriterPtr = std::auto_ptr<StreamWriter>;
+#endif
+
+String valueToString(LargestInt value) {
+ UIntToStringBuffer buffer;
+ char* current = buffer + sizeof(buffer);
+ if (value == Value::minLargestInt) {
+ uintToString(LargestUInt(Value::maxLargestInt) + 1, current);
+ *--current = '-';
+ } else if (value < 0) {
+ uintToString(LargestUInt(-value), current);
+ *--current = '-';
+ } else {
+ uintToString(LargestUInt(value), current);
+ }
+ assert(current >= buffer);
+ return current;
+}
+
+String valueToString(LargestUInt value) {
+ UIntToStringBuffer buffer;
+ char* current = buffer + sizeof(buffer);
+ uintToString(value, current);
+ assert(current >= buffer);
+ return current;
+}
+
+#if defined(JSON_HAS_INT64)
+
+String valueToString(Int value) { return valueToString(LargestInt(value)); }
+
+String valueToString(UInt value) { return valueToString(LargestUInt(value)); }
+
+#endif // # if defined(JSON_HAS_INT64)
+
+namespace {
+String valueToString(double value, bool useSpecialFloats,
+ unsigned int precision, PrecisionType precisionType) {
+ // Print into the buffer. We need not request the alternative representation
+ // that always has a decimal point because JSON doesn't distinguish the
+ // concepts of reals and integers.
+ if (!isfinite(value)) {
+ static const char* const reps[2][3] = {{"NaN", "-Infinity", "Infinity"},
+ {"null", "-1e+9999", "1e+9999"}};
+ return reps[useSpecialFloats ? 0 : 1]
+ [isnan(value) ? 0 : (value < 0) ? 1 : 2];
+ }
+
+ String buffer(size_t(36), '\0');
+ while (true) {
+ int len = jsoncpp_snprintf(
+ &*buffer.begin(), buffer.size(),
+ (precisionType == PrecisionType::significantDigits) ? "%.*g" : "%.*f",
+ precision, value);
+ assert(len >= 0);
+ auto wouldPrint = static_cast<size_t>(len);
+ if (wouldPrint >= buffer.size()) {
+ buffer.resize(wouldPrint + 1);
+ continue;
+ }
+ buffer.resize(wouldPrint);
+ break;
+ }
+
+ buffer.erase(fixNumericLocale(buffer.begin(), buffer.end()), buffer.end());
+
+ // try to ensure we preserve the fact that this was given to us as a double on
+ // input
+ if (buffer.find('.') == buffer.npos && buffer.find('e') == buffer.npos) {
+ buffer += ".0";
+ }
+
+ // strip the zero padding from the right
+ if (precisionType == PrecisionType::decimalPlaces) {
+ buffer.erase(fixZerosInTheEnd(buffer.begin(), buffer.end(), precision),
+ buffer.end());
+ }
+
+ return buffer;
+}
+} // namespace
+
+String valueToString(double value, unsigned int precision,
+ PrecisionType precisionType) {
+ return valueToString(value, false, precision, precisionType);
+}
+
+String valueToString(bool value) { return value ? "true" : "false"; }
+
+static bool doesAnyCharRequireEscaping(char const* s, size_t n) {
+ assert(s || !n);
+
+ return std::any_of(s, s + n, [](unsigned char c) {
+ return c == '\\' || c == '"' || c < 0x20 || c > 0x7F;
+ });
+}
+
+static unsigned int utf8ToCodepoint(const char*& s, const char* e) {
+ const unsigned int REPLACEMENT_CHARACTER = 0xFFFD;
+
+ unsigned int firstByte = static_cast<unsigned char>(*s);
+
+ if (firstByte < 0x80)
+ return firstByte;
+
+ if (firstByte < 0xE0) {
+ if (e - s < 2)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated =
+ ((firstByte & 0x1F) << 6) | (static_cast<unsigned int>(s[1]) & 0x3F);
+ s += 1;
+ // oversized encoded characters are invalid
+ return calculated < 0x80 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ if (firstByte < 0xF0) {
+ if (e - s < 3)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated = ((firstByte & 0x0F) << 12) |
+ ((static_cast<unsigned int>(s[1]) & 0x3F) << 6) |
+ (static_cast<unsigned int>(s[2]) & 0x3F);
+ s += 2;
+ // surrogates aren't valid codepoints itself
+ // shouldn't be UTF-8 encoded
+ if (calculated >= 0xD800 && calculated <= 0xDFFF)
+ return REPLACEMENT_CHARACTER;
+ // oversized encoded characters are invalid
+ return calculated < 0x800 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ if (firstByte < 0xF8) {
+ if (e - s < 4)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated = ((firstByte & 0x07) << 18) |
+ ((static_cast<unsigned int>(s[1]) & 0x3F) << 12) |
+ ((static_cast<unsigned int>(s[2]) & 0x3F) << 6) |
+ (static_cast<unsigned int>(s[3]) & 0x3F);
+ s += 3;
+ // oversized encoded characters are invalid
+ return calculated < 0x10000 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ return REPLACEMENT_CHARACTER;
+}
+
+static const char hex2[] = "000102030405060708090a0b0c0d0e0f"
+ "101112131415161718191a1b1c1d1e1f"
+ "202122232425262728292a2b2c2d2e2f"
+ "303132333435363738393a3b3c3d3e3f"
+ "404142434445464748494a4b4c4d4e4f"
+ "505152535455565758595a5b5c5d5e5f"
+ "606162636465666768696a6b6c6d6e6f"
+ "707172737475767778797a7b7c7d7e7f"
+ "808182838485868788898a8b8c8d8e8f"
+ "909192939495969798999a9b9c9d9e9f"
+ "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
+ "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
+ "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
+ "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
+ "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
+ "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
+
+static String toHex16Bit(unsigned int x) {
+ const unsigned int hi = (x >> 8) & 0xff;
+ const unsigned int lo = x & 0xff;
+ String result(4, ' ');
+ result[0] = hex2[2 * hi];
+ result[1] = hex2[2 * hi + 1];
+ result[2] = hex2[2 * lo];
+ result[3] = hex2[2 * lo + 1];
+ return result;
+}
+
+static void appendRaw(String& result, unsigned ch) {
+ result += static_cast<char>(ch);
+}
+
+static void appendHex(String& result, unsigned ch) {
+ result.append("\\u").append(toHex16Bit(ch));
+}
+
+static String valueToQuotedStringN(const char* value, size_t length,
+ bool emitUTF8 = false) {
+ if (value == nullptr)
+ return "";
+
+ if (!doesAnyCharRequireEscaping(value, length))
+ return String("\"") + value + "\"";
+ // We have to walk value and escape any special characters.
+ // Appending to String is not efficient, but this should be rare.
+ // (Note: forward slashes are *not* rare, but I am not escaping them.)
+ String::size_type maxsize = length * 2 + 3; // allescaped+quotes+NULL
+ String result;
+ result.reserve(maxsize); // to avoid lots of mallocs
+ result += "\"";
+ char const* end = value + length;
+ for (const char* c = value; c != end; ++c) {
+ switch (*c) {
+ case '\"':
+ result += "\\\"";
+ break;
+ case '\\':
+ result += "\\\\";
+ break;
+ case '\b':
+ result += "\\b";
+ break;
+ case '\f':
+ result += "\\f";
+ break;
+ case '\n':
+ result += "\\n";
+ break;
+ case '\r':
+ result += "\\r";
+ break;
+ case '\t':
+ result += "\\t";
+ break;
+ // case '/':
+ // Even though \/ is considered a legal escape in JSON, a bare
+ // slash is also legal, so I see no reason to escape it.
+ // (I hope I am not misunderstanding something.)
+ // blep notes: actually escaping \/ may be useful in javascript to avoid </
+ // sequence.
+ // Should add a flag to allow this compatibility mode and prevent this
+ // sequence from occurring.
+ default: {
+ if (emitUTF8) {
+ unsigned codepoint = static_cast<unsigned char>(*c);
+ if (codepoint < 0x20) {
+ appendHex(result, codepoint);
+ } else {
+ appendRaw(result, codepoint);
+ }
+ } else {
+ unsigned codepoint = utf8ToCodepoint(c, end); // modifies `c`
+ if (codepoint < 0x20) {
+ appendHex(result, codepoint);
+ } else if (codepoint < 0x80) {
+ appendRaw(result, codepoint);
+ } else if (codepoint < 0x10000) {
+ // Basic Multilingual Plane
+ appendHex(result, codepoint);
+ } else {
+ // Extended Unicode. Encode 20 bits as a surrogate pair.
+ codepoint -= 0x10000;
+ appendHex(result, 0xd800 + ((codepoint >> 10) & 0x3ff));
+ appendHex(result, 0xdc00 + (codepoint & 0x3ff));
+ }
+ }
+ } break;
+ }
+ }
+ result += "\"";
+ return result;
+}
+
+String valueToQuotedString(const char* value) {
+ return valueToQuotedStringN(value, strlen(value));
+}
+
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer() = default;
+
+// Class FastWriter
+// //////////////////////////////////////////////////////////////////
+
+FastWriter::FastWriter()
+
+ = default;
+
+void FastWriter::enableYAMLCompatibility() { yamlCompatibilityEnabled_ = true; }
+
+void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
+
+void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
+
+String FastWriter::write(const Value& root) {
+ document_.clear();
+ writeValue(root);
+ if (!omitEndingLineFeed_)
+ document_ += '\n';
+ return document_;
+}
+
+void FastWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ if (!dropNullPlaceholders_)
+ document_ += "null";
+ break;
+ case intValue:
+ document_ += valueToString(value.asLargestInt());
+ break;
+ case uintValue:
+ document_ += valueToString(value.asLargestUInt());
+ break;
+ case realValue:
+ document_ += valueToString(value.asDouble());
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ document_ += valueToQuotedStringN(str, static_cast<size_t>(end - str));
+ break;
+ }
+ case booleanValue:
+ document_ += valueToString(value.asBool());
+ break;
+ case arrayValue: {
+ document_ += '[';
+ ArrayIndex size = value.size();
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (index > 0)
+ document_ += ',';
+ writeValue(value[index]);
+ }
+ document_ += ']';
+ } break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ document_ += '{';
+ for (auto it = members.begin(); it != members.end(); ++it) {
+ const String& name = *it;
+ if (it != members.begin())
+ document_ += ',';
+ document_ += valueToQuotedStringN(name.data(), name.length());
+ document_ += yamlCompatibilityEnabled_ ? ": " : ":";
+ writeValue(value[name]);
+ }
+ document_ += '}';
+ } break;
+ }
+}
+
+// Class StyledWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledWriter::StyledWriter() = default;
+
+String StyledWriter::write(const Value& root) {
+ document_.clear();
+ addChildValues_ = false;
+ indentString_.clear();
+ writeCommentBeforeValue(root);
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ document_ += '\n';
+ return document_;
+}
+
+void StyledWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue("null");
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble()));
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(valueToQuotedStringN(str, static_cast<size_t>(end - str)));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ const String& name = *it;
+ const Value& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(valueToQuotedString(name.c_str()));
+ document_ += " : ";
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ document_ += ',';
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void StyledWriter::writeArrayValue(const Value& value) {
+ size_t size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isArrayMultiLine = isMultilineArray(value);
+ if (isArrayMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ ArrayIndex index = 0;
+ for (;;) {
+ const Value& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ writeIndent();
+ writeValue(childValue);
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ document_ += ',';
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ document_ += "[ ";
+ for (size_t index = 0; index < size; ++index) {
+ if (index > 0)
+ document_ += ", ";
+ document_ += childValues_[index];
+ }
+ document_ += " ]";
+ }
+ }
+}
+
+bool StyledWriter::isMultilineArray(const Value& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ const Value& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void StyledWriter::pushValue(const String& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ document_ += value;
+}
+
+void StyledWriter::writeIndent() {
+ if (!document_.empty()) {
+ char last = document_[document_.length() - 1];
+ if (last == ' ') // already indented
+ return;
+ if (last != '\n') // Comments may add new-line
+ document_ += '\n';
+ }
+ document_ += indentString_;
+}
+
+void StyledWriter::writeWithIndent(const String& value) {
+ writeIndent();
+ document_ += value;
+}
+
+void StyledWriter::indent() { indentString_ += String(indentSize_, ' '); }
+
+void StyledWriter::unindent() {
+ assert(indentString_.size() >= indentSize_);
+ indentString_.resize(indentString_.size() - indentSize_);
+}
+
+void StyledWriter::writeCommentBeforeValue(const Value& root) {
+ if (!root.hasComment(commentBefore))
+ return;
+
+ document_ += '\n';
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ document_ += *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ writeIndent();
+ ++iter;
+ }
+
+ // Comments are stripped of trailing newlines, so add one here
+ document_ += '\n';
+}
+
+void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+ if (root.hasComment(commentAfterOnSameLine))
+ document_ += " " + root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ document_ += '\n';
+ document_ += root.getComment(commentAfter);
+ document_ += '\n';
+ }
+}
+
+bool StyledWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+// Class StyledStreamWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledStreamWriter::StyledStreamWriter(String indentation)
+ : document_(nullptr), indentation_(std::move(indentation)),
+ addChildValues_(), indented_(false) {}
+
+void StyledStreamWriter::write(OStream& out, const Value& root) {
+ document_ = &out;
+ addChildValues_ = false;
+ indentString_.clear();
+ indented_ = true;
+ writeCommentBeforeValue(root);
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ *document_ << "\n";
+ document_ = nullptr; // Forget the stream, for safety.
+}
+
+void StyledStreamWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue("null");
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble()));
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(valueToQuotedStringN(str, static_cast<size_t>(end - str)));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ const String& name = *it;
+ const Value& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(valueToQuotedString(name.c_str()));
+ *document_ << " : ";
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *document_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void StyledStreamWriter::writeArrayValue(const Value& value) {
+ unsigned size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isArrayMultiLine = isMultilineArray(value);
+ if (isArrayMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ unsigned index = 0;
+ for (;;) {
+ const Value& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(childValue);
+ indented_ = false;
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *document_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ *document_ << "[ ";
+ for (unsigned index = 0; index < size; ++index) {
+ if (index > 0)
+ *document_ << ", ";
+ *document_ << childValues_[index];
+ }
+ *document_ << " ]";
+ }
+ }
+}
+
+bool StyledStreamWriter::isMultilineArray(const Value& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ const Value& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void StyledStreamWriter::pushValue(const String& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ *document_ << value;
+}
+
+void StyledStreamWriter::writeIndent() {
+ // blep intended this to look at the so-far-written string
+ // to determine whether we are already indented, but
+ // with a stream we cannot do that. So we rely on some saved state.
+ // The caller checks indented_.
+ *document_ << '\n' << indentString_;
+}
+
+void StyledStreamWriter::writeWithIndent(const String& value) {
+ if (!indented_)
+ writeIndent();
+ *document_ << value;
+ indented_ = false;
+}
+
+void StyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void StyledStreamWriter::unindent() {
+ assert(indentString_.size() >= indentation_.size());
+ indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
+ if (!root.hasComment(commentBefore))
+ return;
+
+ if (!indented_)
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ *document_ << *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ // writeIndent(); // would include newline
+ *document_ << indentString_;
+ ++iter;
+ }
+ indented_ = false;
+}
+
+void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+ if (root.hasComment(commentAfterOnSameLine))
+ *document_ << ' ' << root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ writeIndent();
+ *document_ << root.getComment(commentAfter);
+ }
+ indented_ = false;
+}
+
+bool StyledStreamWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+//////////////////////////
+// BuiltStyledStreamWriter
+
+/// Scoped enums are not available until C++11.
+struct CommentStyle {
+ /// Decide whether to write comments.
+ enum Enum {
+ None, ///< Drop all comments.
+ Most, ///< Recover odd behavior of previous versions (not implemented yet).
+ All ///< Keep all comments.
+ };
+};
+
+struct BuiltStyledStreamWriter : public StreamWriter {
+ BuiltStyledStreamWriter(String indentation, CommentStyle::Enum cs,
+ String colonSymbol, String nullSymbol,
+ String endingLineFeedSymbol, bool useSpecialFloats,
+ bool emitUTF8, unsigned int precision,
+ PrecisionType precisionType);
+ int write(Value const& root, OStream* sout) override;
+
+private:
+ void writeValue(Value const& value);
+ void writeArrayValue(Value const& value);
+ bool isMultilineArray(Value const& value);
+ void pushValue(String const& value);
+ void writeIndent();
+ void writeWithIndent(String const& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(Value const& root);
+ void writeCommentAfterValueOnSameLine(Value const& root);
+ static bool hasCommentForValue(const Value& value);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ String indentString_;
+ unsigned int rightMargin_;
+ String indentation_;
+ CommentStyle::Enum cs_;
+ String colonSymbol_;
+ String nullSymbol_;
+ String endingLineFeedSymbol_;
+ bool addChildValues_ : 1;
+ bool indented_ : 1;
+ bool useSpecialFloats_ : 1;
+ bool emitUTF8_ : 1;
+ unsigned int precision_;
+ PrecisionType precisionType_;
+};
+BuiltStyledStreamWriter::BuiltStyledStreamWriter(
+ String indentation, CommentStyle::Enum cs, String colonSymbol,
+ String nullSymbol, String endingLineFeedSymbol, bool useSpecialFloats,
+ bool emitUTF8, unsigned int precision, PrecisionType precisionType)
+ : rightMargin_(74), indentation_(std::move(indentation)), cs_(cs),
+ colonSymbol_(std::move(colonSymbol)), nullSymbol_(std::move(nullSymbol)),
+ endingLineFeedSymbol_(std::move(endingLineFeedSymbol)),
+ addChildValues_(false), indented_(false),
+ useSpecialFloats_(useSpecialFloats), emitUTF8_(emitUTF8),
+ precision_(precision), precisionType_(precisionType) {}
+int BuiltStyledStreamWriter::write(Value const& root, OStream* sout) {
+ sout_ = sout;
+ addChildValues_ = false;
+ indented_ = true;
+ indentString_.clear();
+ writeCommentBeforeValue(root);
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ *sout_ << endingLineFeedSymbol_;
+ sout_ = nullptr;
+ return 0;
+}
+void BuiltStyledStreamWriter::writeValue(Value const& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue(nullSymbol_);
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_,
+ precisionType_));
+ break;
+ case stringValue: {
+ // Is NULL is possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(
+ valueToQuotedStringN(str, static_cast<size_t>(end - str), emitUTF8_));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ String const& name = *it;
+ Value const& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(
+ valueToQuotedStringN(name.data(), name.length(), emitUTF8_));
+ *sout_ << colonSymbol_;
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *sout_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
+ unsigned size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isMultiLine = (cs_ == CommentStyle::All) || isMultilineArray(value);
+ if (isMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ unsigned index = 0;
+ for (;;) {
+ Value const& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(childValue);
+ indented_ = false;
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *sout_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ *sout_ << "[";
+ if (!indentation_.empty())
+ *sout_ << " ";
+ for (unsigned index = 0; index < size; ++index) {
+ if (index > 0)
+ *sout_ << ((!indentation_.empty()) ? ", " : ",");
+ *sout_ << childValues_[index];
+ }
+ if (!indentation_.empty())
+ *sout_ << " ";
+ *sout_ << "]";
+ }
+ }
+}
+
+bool BuiltStyledStreamWriter::isMultilineArray(Value const& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ Value const& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void BuiltStyledStreamWriter::pushValue(String const& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ *sout_ << value;
+}
+
+void BuiltStyledStreamWriter::writeIndent() {
+ // blep intended this to look at the so-far-written string
+ // to determine whether we are already indented, but
+ // with a stream we cannot do that. So we rely on some saved state.
+ // The caller checks indented_.
+
+ if (!indentation_.empty()) {
+ // In this case, drop newlines too.
+ *sout_ << '\n' << indentString_;
+ }
+}
+
+void BuiltStyledStreamWriter::writeWithIndent(String const& value) {
+ if (!indented_)
+ writeIndent();
+ *sout_ << value;
+ indented_ = false;
+}
+
+void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void BuiltStyledStreamWriter::unindent() {
+ assert(indentString_.size() >= indentation_.size());
+ indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
+ if (cs_ == CommentStyle::None)
+ return;
+ if (!root.hasComment(commentBefore))
+ return;
+
+ if (!indented_)
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ *sout_ << *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ // writeIndent(); // would write extra newline
+ *sout_ << indentString_;
+ ++iter;
+ }
+ indented_ = false;
+}
+
+void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(
+ Value const& root) {
+ if (cs_ == CommentStyle::None)
+ return;
+ if (root.hasComment(commentAfterOnSameLine))
+ *sout_ << " " + root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ writeIndent();
+ *sout_ << root.getComment(commentAfter);
+ }
+}
+
+// static
+bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+///////////////
+// StreamWriter
+
+StreamWriter::StreamWriter() : sout_(nullptr) {}
+StreamWriter::~StreamWriter() = default;
+StreamWriter::Factory::~Factory() = default;
+StreamWriterBuilder::StreamWriterBuilder() { setDefaults(&settings_); }
+StreamWriterBuilder::~StreamWriterBuilder() = default;
+StreamWriter* StreamWriterBuilder::newStreamWriter() const {
+ const String indentation = settings_["indentation"].asString();
+ const String cs_str = settings_["commentStyle"].asString();
+ const String pt_str = settings_["precisionType"].asString();
+ const bool eyc = settings_["enableYAMLCompatibility"].asBool();
+ const bool dnp = settings_["dropNullPlaceholders"].asBool();
+ const bool usf = settings_["useSpecialFloats"].asBool();
+ const bool emitUTF8 = settings_["emitUTF8"].asBool();
+ unsigned int pre = settings_["precision"].asUInt();
+ CommentStyle::Enum cs = CommentStyle::All;
+ if (cs_str == "All") {
+ cs = CommentStyle::All;
+ } else if (cs_str == "None") {
+ cs = CommentStyle::None;
+ } else {
+ throwRuntimeError("commentStyle must be 'All' or 'None'");
+ }
+ PrecisionType precisionType(significantDigits);
+ if (pt_str == "significant") {
+ precisionType = PrecisionType::significantDigits;
+ } else if (pt_str == "decimal") {
+ precisionType = PrecisionType::decimalPlaces;
+ } else {
+ throwRuntimeError("precisionType must be 'significant' or 'decimal'");
+ }
+ String colonSymbol = " : ";
+ if (eyc) {
+ colonSymbol = ": ";
+ } else if (indentation.empty()) {
+ colonSymbol = ":";
+ }
+ String nullSymbol = "null";
+ if (dnp) {
+ nullSymbol.clear();
+ }
+ if (pre > 17)
+ pre = 17;
+ String endingLineFeedSymbol;
+ return new BuiltStyledStreamWriter(indentation, cs, colonSymbol, nullSymbol,
+ endingLineFeedSymbol, usf, emitUTF8, pre,
+ precisionType);
+}
+
+bool StreamWriterBuilder::validate(Json::Value* invalid) const {
+ static const auto& valid_keys = *new std::set<String>{
+ "indentation",
+ "commentStyle",
+ "enableYAMLCompatibility",
+ "dropNullPlaceholders",
+ "useSpecialFloats",
+ "emitUTF8",
+ "precision",
+ "precisionType",
+ };
+ for (auto si = settings_.begin(); si != settings_.end(); ++si) {
+ auto key = si.name();
+ if (valid_keys.count(key))
+ continue;
+ if (invalid)
+ (*invalid)[key] = *si;
+ else
+ return false;
+ }
+ return invalid ? invalid->empty() : true;
+}
+
+Value& StreamWriterBuilder::operator[](const String& key) {
+ return settings_[key];
+}
+// static
+void StreamWriterBuilder::setDefaults(Json::Value* settings) {
+ //! [StreamWriterBuilderDefaults]
+ (*settings)["commentStyle"] = "All";
+ (*settings)["indentation"] = "\t";
+ (*settings)["enableYAMLCompatibility"] = false;
+ (*settings)["dropNullPlaceholders"] = false;
+ (*settings)["useSpecialFloats"] = false;
+ (*settings)["emitUTF8"] = false;
+ (*settings)["precision"] = 17;
+ (*settings)["precisionType"] = "significant";
+ //! [StreamWriterBuilderDefaults]
+}
+
+String writeString(StreamWriter::Factory const& factory, Value const& root) {
+ OStringStream sout;
+ StreamWriterPtr const writer(factory.newStreamWriter());
+ writer->write(root, &sout);
+ return sout.str();
+}
+
+OStream& operator<<(OStream& sout, Value const& root) {
+ StreamWriterBuilder builder;
+ StreamWriterPtr const writer(builder.newStreamWriter());
+ writer->write(root, &sout);
+ return sout;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/loader/.gitignore b/thirdparty/openxr/src/loader/.gitignore
new file mode 100644
index 0000000000..5e8e0ba3a4
--- /dev/null
+++ b/thirdparty/openxr/src/loader/.gitignore
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+!openxr_loader_for_android.pom
diff --git a/thirdparty/openxr/src/loader/android_utilities.cpp b/thirdparty/openxr/src/loader/android_utilities.cpp
new file mode 100644
index 0000000000..807a775820
--- /dev/null
+++ b/thirdparty/openxr/src/loader/android_utilities.cpp
@@ -0,0 +1,319 @@
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2021, Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+
+#include "android_utilities.h"
+
+#ifdef __ANDROID__
+#include <wrap/android.net.h>
+#include <wrap/android.content.h>
+#include <wrap/android.database.h>
+#include <json/value.h>
+
+#include <openxr/openxr.h>
+
+#include <sstream>
+#include <vector>
+#include <android/log.h>
+
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, "openxr_loader", __VA_ARGS__)
+#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, "openxr_loader", __VA_ARGS__)
+#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "openxr_loader", __VA_ARGS__)
+#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, "openxr_loader", __VA_ARGS__)
+
+namespace openxr_android {
+using wrap::android::content::ContentUris;
+using wrap::android::content::Context;
+using wrap::android::database::Cursor;
+using wrap::android::net::Uri;
+using wrap::android::net::Uri_Builder;
+
+// Code in here corresponds roughly to the Java "BrokerContract" class and subclasses.
+namespace {
+constexpr auto AUTHORITY = "org.khronos.openxr.runtime_broker";
+constexpr auto SYSTEM_AUTHORITY = "org.khronos.openxr.system_runtime_broker";
+constexpr auto BASE_PATH = "openxr";
+constexpr auto ABI_PATH = "abi";
+constexpr auto RUNTIMES_PATH = "runtimes";
+
+constexpr const char *getBrokerAuthority(bool systemBroker) { return systemBroker ? SYSTEM_AUTHORITY : AUTHORITY; }
+
+struct BaseColumns {
+ /**
+ * The unique ID for a row.
+ */
+ [[maybe_unused]] static constexpr auto ID = "_id";
+};
+
+/**
+ * Contains details for the /openxr/[major_ver]/abi/[abi]/runtimes/active URI.
+ * <p>
+ * This URI represents a "table" containing at most one item, the currently active runtime. The
+ * policy of which runtime is chosen to be active (if more than one is installed) is left to the
+ * content provider.
+ * <p>
+ * No sort order is required to be honored by the content provider.
+ */
+namespace active_runtime {
+/**
+ * Final path component to this URI.
+ */
+static constexpr auto TABLE_PATH = "active";
+
+/**
+ * Create a content URI for querying the data on the active runtime for a
+ * given major version of OpenXR.
+ *
+ * @param systemBroker If the system runtime broker (instead of the installable one) should be queried.
+ * @param majorVer The major version of OpenXR.
+ * @param abi The Android ABI name in use.
+ * @return A content URI for a single item: the active runtime.
+ */
+static Uri makeContentUri(bool systemBroker, int majorVersion, const char *abi) {
+ auto builder = Uri_Builder::construct();
+ builder.scheme("content")
+ .authority(getBrokerAuthority(systemBroker))
+ .appendPath(BASE_PATH)
+ .appendPath(std::to_string(majorVersion))
+ .appendPath(ABI_PATH)
+ .appendPath(abi)
+ .appendPath(RUNTIMES_PATH)
+ .appendPath(TABLE_PATH);
+ ContentUris::appendId(builder, 0);
+ return builder.build();
+}
+
+struct Columns : BaseColumns {
+ /**
+ * Constant for the PACKAGE_NAME column name
+ */
+ static constexpr auto PACKAGE_NAME = "package_name";
+
+ /**
+ * Constant for the NATIVE_LIB_DIR column name
+ */
+ static constexpr auto NATIVE_LIB_DIR = "native_lib_dir";
+
+ /**
+ * Constant for the SO_FILENAME column name
+ */
+ static constexpr auto SO_FILENAME = "so_filename";
+
+ /**
+ * Constant for the HAS_FUNCTIONS column name.
+ * <p>
+ * If this column contains true, you should check the /functions/ URI for that runtime.
+ */
+ static constexpr auto HAS_FUNCTIONS = "has_functions";
+};
+} // namespace active_runtime
+
+/**
+ * Contains details for the /openxr/[major_ver]/abi/[abi]/runtimes/[package]/functions URI.
+ * <p>
+ * This URI is for package-specific function name remapping. Since this is an optional field in
+ * the corresponding JSON manifests for OpenXR, it is optional here as well. If the active
+ * runtime contains "true" in its "has_functions" column, then this table must exist and be
+ * queryable.
+ * <p>
+ * No sort order is required to be honored by the content provider.
+ */
+namespace functions {
+/**
+ * Final path component to this URI.
+ */
+static constexpr auto TABLE_PATH = "functions";
+
+/**
+ * Create a content URI for querying all rows of the function remapping data for a given
+ * runtime package and major version of OpenXR.
+ *
+ * @param systemBroker If the system runtime broker (instead of the installable one) should be queried.
+ * @param majorVer The major version of OpenXR.
+ * @param packageName The package name of the runtime.
+ * @param abi The Android ABI name in use.
+ * @return A content URI for the entire table: the function remapping for that runtime.
+ */
+static Uri makeContentUri(bool systemBroker, int majorVersion, std::string const &packageName, const char *abi) {
+ auto builder = Uri_Builder::construct();
+ builder.scheme("content")
+ .authority(getBrokerAuthority(systemBroker))
+ .appendPath(BASE_PATH)
+ .appendPath(std::to_string(majorVersion))
+ .appendPath(ABI_PATH)
+ .appendPath(abi)
+ .appendPath(RUNTIMES_PATH)
+ .appendPath(packageName)
+ .appendPath(TABLE_PATH);
+ return builder.build();
+}
+
+struct Columns : BaseColumns {
+ /**
+ * Constant for the FUNCTION_NAME column name
+ */
+ static constexpr auto FUNCTION_NAME = "function_name";
+
+ /**
+ * Constant for the SYMBOL_NAME column name
+ */
+ static constexpr auto SYMBOL_NAME = "symbol_name";
+};
+} // namespace functions
+
+} // namespace
+
+static inline jni::Array<std::string> makeArray(std::initializer_list<const char *> &&list) {
+ auto ret = jni::Array<std::string>{(long)list.size()};
+ long i = 0;
+ for (auto &&elt : list) {
+ ret.setElement(i, elt);
+ ++i;
+ }
+ return ret;
+}
+static constexpr auto TAG = "OpenXR-Loader";
+
+#if defined(__arm__)
+static constexpr auto ABI = "armeabi-v7l";
+#elif defined(__aarch64__)
+static constexpr auto ABI = "arm64-v8a";
+#elif defined(__i386__)
+static constexpr auto ABI = "x86";
+#elif defined(__x86_64__)
+static constexpr auto ABI = "x86_64";
+#else
+#error "Unknown ABI!"
+#endif
+
+/// Helper class to generate the jsoncpp object corresponding to a synthetic runtime manifest.
+class JsonManifestBuilder {
+ public:
+ JsonManifestBuilder(const std::string &libraryPathParent, const std::string &libraryPath);
+ JsonManifestBuilder &function(const std::string &functionName, const std::string &symbolName);
+
+ Json::Value build() const { return root_node; }
+
+ private:
+ Json::Value root_node;
+};
+
+inline JsonManifestBuilder::JsonManifestBuilder(const std::string &libraryPathParent, const std::string &libraryPath)
+ : root_node(Json::objectValue) {
+ root_node["file_format_version"] = "1.0.0";
+ root_node["instance_extensions"] = Json::Value(Json::arrayValue);
+ root_node["functions"] = Json::Value(Json::objectValue);
+ root_node[libraryPathParent] = Json::objectValue;
+ root_node[libraryPathParent]["library_path"] = libraryPath;
+}
+
+inline JsonManifestBuilder &JsonManifestBuilder::function(const std::string &functionName, const std::string &symbolName) {
+ root_node["functions"][functionName] = symbolName;
+ return *this;
+}
+
+static constexpr const char *getBrokerTypeName(bool systemBroker) { return systemBroker ? "system" : "installable"; }
+
+static int populateFunctions(wrap::android::content::Context const &context, bool systemBroker, const std::string &packageName,
+ JsonManifestBuilder &builder) {
+ jni::Array<std::string> projection = makeArray({functions::Columns::FUNCTION_NAME, functions::Columns::SYMBOL_NAME});
+
+ auto uri = functions::makeContentUri(systemBroker, XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), packageName, ABI);
+ ALOGI("populateFunctions: Querying URI: %s", uri.toString().c_str());
+
+ Cursor cursor = context.getContentResolver().query(uri, projection);
+
+ if (cursor.isNull()) {
+ ALOGE("Null cursor when querying content resolver for functions.");
+ return -1;
+ }
+ if (cursor.getCount() < 1) {
+ ALOGE("Non-null but empty cursor when querying content resolver for functions.");
+ cursor.close();
+ return -1;
+ }
+ auto functionIndex = cursor.getColumnIndex(functions::Columns::FUNCTION_NAME);
+ auto symbolIndex = cursor.getColumnIndex(functions::Columns::SYMBOL_NAME);
+ while (cursor.moveToNext()) {
+ builder.function(cursor.getString(functionIndex), cursor.getString(symbolIndex));
+ }
+
+ cursor.close();
+ return 0;
+}
+
+/// Get cursor for active runtime, parameterized by whether or not we use the system broker
+static bool getActiveRuntimeCursor(wrap::android::content::Context const &context, jni::Array<std::string> const &projection,
+ bool systemBroker, Cursor &cursor) {
+ auto uri = active_runtime::makeContentUri(systemBroker, XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), ABI);
+ ALOGI("getActiveRuntimeCursor: Querying URI: %s", uri.toString().c_str());
+ try {
+ cursor = context.getContentResolver().query(uri, projection);
+ } catch (const std::exception &e) {
+ ALOGW("Exception when querying %s content resolver: %s", getBrokerTypeName(systemBroker), e.what());
+ cursor = {};
+ return false;
+ }
+
+ if (cursor.isNull()) {
+ ALOGW("Null cursor when querying %s content resolver.", getBrokerTypeName(systemBroker));
+ cursor = {};
+ return false;
+ }
+ if (cursor.getCount() < 1) {
+ ALOGW("Non-null but empty cursor when querying %s content resolver.", getBrokerTypeName(systemBroker));
+ cursor.close();
+ cursor = {};
+ return false;
+ }
+ return true;
+}
+
+int getActiveRuntimeVirtualManifest(wrap::android::content::Context const &context, Json::Value &virtualManifest) {
+ jni::Array<std::string> projection = makeArray({active_runtime::Columns::PACKAGE_NAME, active_runtime::Columns::NATIVE_LIB_DIR,
+ active_runtime::Columns::SO_FILENAME, active_runtime::Columns::HAS_FUNCTIONS});
+
+ // First, try getting the installable broker's provider
+ bool systemBroker = false;
+ Cursor cursor;
+ if (!getActiveRuntimeCursor(context, projection, systemBroker, cursor)) {
+ // OK, try the system broker as a fallback.
+ systemBroker = true;
+ getActiveRuntimeCursor(context, projection, systemBroker, cursor);
+ }
+
+ if (cursor.isNull()) {
+ // Couldn't find either broker
+ ALOGE("Could access neither the installable nor system runtime broker.");
+ return -1;
+ }
+
+ cursor.moveToFirst();
+
+ auto filename = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::SO_FILENAME));
+ auto libDir = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::NATIVE_LIB_DIR));
+ auto packageName = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::PACKAGE_NAME));
+
+ auto hasFunctions = cursor.getInt(cursor.getColumnIndex(active_runtime::Columns::HAS_FUNCTIONS)) == 1;
+ __android_log_print(ANDROID_LOG_INFO, TAG, "Got runtime: package: %s, so filename: %s, native lib dir: %s, has functions: %s",
+ packageName.c_str(), libDir.c_str(), filename.c_str(), (hasFunctions ? "yes" : "no"));
+
+ auto lib_path = libDir + "/" + filename;
+ cursor.close();
+
+ JsonManifestBuilder builder{"runtime", lib_path};
+ if (hasFunctions) {
+ int result = populateFunctions(context, systemBroker, packageName, builder);
+ if (result != 0) {
+ return result;
+ }
+ }
+ virtualManifest = builder.build();
+ return 0;
+}
+} // namespace openxr_android
+
+#endif // __ANDROID__
diff --git a/thirdparty/openxr/src/loader/android_utilities.h b/thirdparty/openxr/src/loader/android_utilities.h
new file mode 100644
index 0000000000..adb8abaf1f
--- /dev/null
+++ b/thirdparty/openxr/src/loader/android_utilities.h
@@ -0,0 +1,32 @@
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2021, Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+
+#pragma once
+#ifdef __ANDROID__
+
+#include "wrap/android.content.h"
+
+#include <string>
+namespace Json {
+class Value;
+} // namespace Json
+
+namespace openxr_android {
+using wrap::android::content::Context;
+
+/*!
+ * Find the single active OpenXR runtime on the system, and return a constructed JSON object representing it.
+ *
+ * @param context An Android context, preferably an Activity Context.
+ * @param[out] virtualManifest The Json::Value to fill with the virtual manifest.
+ *
+ * @return 0 on success, something else on failure.
+ */
+int getActiveRuntimeVirtualManifest(wrap::android::content::Context const &context, Json::Value &virtualManifest);
+} // namespace openxr_android
+
+#endif // __ANDROID__
diff --git a/thirdparty/openxr/src/loader/api_layer_interface.cpp b/thirdparty/openxr/src/loader/api_layer_interface.cpp
new file mode 100644
index 0000000000..c3fd5bb7f1
--- /dev/null
+++ b/thirdparty/openxr/src/loader/api_layer_interface.cpp
@@ -0,0 +1,399 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "api_layer_interface.hpp"
+
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "manifest_file.hpp"
+#include "platform_utils.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#define OPENXR_ENABLE_LAYERS_ENV_VAR "XR_ENABLE_API_LAYERS"
+
+// Add any layers defined in the loader layer environment variable.
+static void AddEnvironmentApiLayers(std::vector<std::string>& enabled_layers) {
+ std::string layers = PlatformUtilsGetEnv(OPENXR_ENABLE_LAYERS_ENV_VAR);
+
+ std::size_t last_found = 0;
+ std::size_t found = layers.find_first_of(PATH_SEPARATOR);
+ std::string cur_search;
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ cur_search = layers.substr(last_found, found - last_found);
+ enabled_layers.push_back(cur_search);
+ last_found = found + 1;
+ found = layers.find_first_of(PATH_SEPARATOR, last_found);
+ }
+
+ // If there's something remaining in the string, copy it over
+ if (last_found < layers.size()) {
+ cur_search = layers.substr(last_found);
+ enabled_layers.push_back(cur_search);
+ }
+}
+
+XrResult ApiLayerInterface::GetApiLayerProperties(const std::string& openxr_command, uint32_t incoming_count,
+ uint32_t* outgoing_count, XrApiLayerProperties* api_layer_properties) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> manifest_files;
+ uint32_t manifest_count = 0;
+
+ // Validate props struct before proceeding
+ if (0 < incoming_count && nullptr != api_layer_properties) {
+ for (uint32_t i = 0; i < incoming_count; i++) {
+ if (XR_TYPE_API_LAYER_PROPERTIES != api_layer_properties[i].type) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "VUID-XrApiLayerProperties-type-type: unknown type in api_layer_properties");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ }
+ }
+
+ // "Independent of elementCapacityInput or elements parameters, elementCountOutput must be a valid pointer,
+ // and the function sets elementCountOutput." - 2.11
+ if (nullptr == outgoing_count) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ // Find any implicit layers which we may need to report information for.
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any explicit layers which we may need to report information for.
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, manifest_files);
+ }
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "ApiLayerInterface::GetApiLayerProperties - failed searching for API layer manifest files");
+ return result;
+ }
+
+ manifest_count = static_cast<uint32_t>(manifest_files.size());
+ if (nullptr == outgoing_count) {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-propertyCountOutput-parameter: null propertyCountOutput");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ *outgoing_count = manifest_count;
+ if (0 == incoming_count) {
+ // capacity check only
+ return XR_SUCCESS;
+ }
+ if (nullptr == api_layer_properties) {
+ // incoming_count is not 0 BUT the api_layer_properties is NULL
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-properties-parameter: non-zero capacity but null array");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (incoming_count < manifest_count) {
+ LoaderLogger::LogErrorMessage(
+ "xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-propertyCapacityInput-parameter: insufficient space in array");
+ return XR_ERROR_SIZE_INSUFFICIENT;
+ }
+
+ for (uint32_t prop = 0; prop < incoming_count && prop < manifest_count; ++prop) {
+ manifest_files[prop]->PopulateApiLayerProperties(api_layer_properties[prop]);
+ }
+ return XR_SUCCESS;
+}
+
+XrResult ApiLayerInterface::GetInstanceExtensionProperties(const std::string& openxr_command, const char* layer_name,
+ std::vector<XrExtensionProperties>& extension_properties) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> manifest_files;
+
+ // If a layer name is supplied, only use the information out of that one layer
+ if (nullptr != layer_name && 0 != strlen(layer_name)) {
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any explicit layers which we may need to report information for.
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, manifest_files);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage(
+ openxr_command,
+ "ApiLayerInterface::GetInstanceExtensionProperties - failed searching for API layer manifest files");
+ return result;
+ }
+
+ bool found = false;
+ auto num_files = static_cast<uint32_t>(manifest_files.size());
+ for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+ // If a layer with the provided name exists, get it's instance extension information.
+ if (manifest_files[man_file]->LayerName() == layer_name) {
+ manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
+ found = true;
+ break;
+ }
+ }
+
+ // If nothing found, report 0
+ if (!found) {
+ return XR_ERROR_API_LAYER_NOT_PRESENT;
+ }
+ }
+ // Otherwise, we want to add only implicit API layers and explicit API layers enabled using the environment variables
+ } else {
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any environmentally enabled explicit layers. If they're present, treat them like implicit layers
+ // since we know that they're going to be enabled.
+ std::vector<std::string> env_enabled_layers;
+ AddEnvironmentApiLayers(env_enabled_layers);
+ if (!env_enabled_layers.empty()) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> exp_layer_man_files = {};
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, exp_layer_man_files);
+ if (XR_SUCCEEDED(result)) {
+ for (auto& exp_layer_man_file : exp_layer_man_files) {
+ for (std::string& enabled_layer : env_enabled_layers) {
+ // If this is an enabled layer, transfer it over to the manifest list.
+ if (enabled_layer == exp_layer_man_file->LayerName()) {
+ manifest_files.push_back(std::move(exp_layer_man_file));
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Grab the layer instance extensions information
+ auto num_files = static_cast<uint32_t>(manifest_files.size());
+ for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+ manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
+ }
+ }
+ return XR_SUCCESS;
+}
+
+XrResult ApiLayerInterface::LoadApiLayers(const std::string& openxr_command, uint32_t enabled_api_layer_count,
+ const char* const* enabled_api_layer_names,
+ std::vector<std::unique_ptr<ApiLayerInterface>>& api_layer_interfaces) {
+ XrResult last_error = XR_SUCCESS;
+ std::unordered_set<std::string> layers_already_found;
+
+ bool any_loaded = false;
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> enabled_layer_manifest_files_in_init_order = {};
+
+ // Find any implicit layers.
+ XrResult result =
+ ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, enabled_layer_manifest_files_in_init_order);
+
+ for (const auto& enabled_layer_manifest_file : enabled_layer_manifest_files_in_init_order) {
+ layers_already_found.insert(enabled_layer_manifest_file->LayerName());
+ }
+
+ // Find any explicit layers.
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> explicit_layer_manifest_files = {};
+
+ if (XR_SUCCEEDED(result)) {
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, explicit_layer_manifest_files);
+ }
+
+ bool found_all_layers = true;
+
+ if (XR_SUCCEEDED(result)) {
+ // Put all explicit and then xrCreateInstance enabled layers into a string vector
+
+ std::vector<std::string> enabled_explicit_api_layer_names = {};
+
+ AddEnvironmentApiLayers(enabled_explicit_api_layer_names);
+
+ if (enabled_api_layer_count > 0) {
+ if (nullptr == enabled_api_layer_names) {
+ LoaderLogger::LogErrorMessage(
+ "xrCreateInstance",
+ "VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter: enabledApiLayerCount is non-0 but array is NULL");
+ LoaderLogger::LogErrorMessage(
+ "xrCreateInstance", "VUID-xrCreateInstance-info-parameter: something wrong with XrInstanceCreateInfo contents");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ std::copy(enabled_api_layer_names, enabled_api_layer_names + enabled_api_layer_count,
+ std::back_inserter(enabled_explicit_api_layer_names));
+ }
+
+ // add explicit layers to list of layers to enable
+ for (const auto& layer_name : enabled_explicit_api_layer_names) {
+ bool found_this_layer = false;
+
+ for (auto it = explicit_layer_manifest_files.begin(); it != explicit_layer_manifest_files.end();) {
+ bool erased_layer_manifest_file = false;
+
+ if (layers_already_found.count(layer_name) > 0) {
+ found_this_layer = true;
+ } else if (layer_name == (*it)->LayerName()) {
+ found_this_layer = true;
+ layers_already_found.insert(layer_name);
+ enabled_layer_manifest_files_in_init_order.push_back(std::move(*it));
+ it = explicit_layer_manifest_files.erase(it);
+ erased_layer_manifest_file = true;
+ }
+
+ if (!erased_layer_manifest_file) {
+ it++;
+ }
+ }
+
+ // If even one of the layers wasn't found, we want to return an error
+ if (!found_this_layer) {
+ found_all_layers = false;
+ std::string error_message = "ApiLayerInterface::LoadApiLayers - failed to find layer ";
+ error_message += layer_name;
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ }
+ }
+ }
+
+ for (std::unique_ptr<ApiLayerManifestFile>& manifest_file : enabled_layer_manifest_files_in_init_order) {
+ LoaderPlatformLibraryHandle layer_library = LoaderPlatformLibraryOpen(manifest_file->LibraryPath());
+ if (nullptr == layer_library) {
+ if (!any_loaded) {
+ last_error = XR_ERROR_FILE_ACCESS_ERROR;
+ }
+ std::string library_message = LoaderPlatformLibraryOpenError(manifest_file->LibraryPath());
+ std::string warning_message = "ApiLayerInterface::LoadApiLayers skipping layer ";
+ warning_message += manifest_file->LayerName();
+ warning_message += ", failed to load with message \"";
+ warning_message += library_message;
+ warning_message += "\"";
+ LoaderLogger::LogWarningMessage(openxr_command, warning_message);
+ continue;
+ }
+
+ // Get and settle on an layer interface version (using any provided name if required).
+ std::string function_name = manifest_file->GetFunctionName("xrNegotiateLoaderApiLayerInterface");
+ auto negotiate = reinterpret_cast<PFN_xrNegotiateLoaderApiLayerInterface>(
+ LoaderPlatformLibraryGetProcAddr(layer_library, function_name));
+
+ if (nullptr == negotiate) {
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers skipping layer " << manifest_file->LayerName()
+ << " because negotiation function " << function_name << " was not found";
+ LoaderLogger::LogErrorMessage(openxr_command, oss.str());
+ LoaderPlatformLibraryClose(layer_library);
+ last_error = XR_ERROR_API_LAYER_NOT_PRESENT;
+ continue;
+ }
+
+ // Loader info for negotiation
+ XrNegotiateLoaderInfo loader_info = {};
+ loader_info.structType = XR_LOADER_INTERFACE_STRUCT_LOADER_INFO;
+ loader_info.structVersion = XR_LOADER_INFO_STRUCT_VERSION;
+ loader_info.structSize = sizeof(XrNegotiateLoaderInfo);
+ loader_info.minInterfaceVersion = 1;
+ loader_info.maxInterfaceVersion = XR_CURRENT_LOADER_API_LAYER_VERSION;
+ loader_info.minApiVersion = XR_MAKE_VERSION(1, 0, 0);
+ loader_info.maxApiVersion = XR_MAKE_VERSION(1, 0x3ff, 0xfff); // Maximum allowed version for this major version.
+
+ // Set up the layer return structure
+ XrNegotiateApiLayerRequest api_layer_info = {};
+ api_layer_info.structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST;
+ api_layer_info.structVersion = XR_API_LAYER_INFO_STRUCT_VERSION;
+ api_layer_info.structSize = sizeof(XrNegotiateApiLayerRequest);
+
+ XrResult res = negotiate(&loader_info, manifest_file->LayerName().c_str(), &api_layer_info);
+ // If we supposedly succeeded, but got a nullptr for getInstanceProcAddr
+ // then something still went wrong, so return with an error.
+ if (XR_SUCCEEDED(res) && nullptr == api_layer_info.getInstanceProcAddr) {
+ std::string warning_message = "ApiLayerInterface::LoadApiLayers skipping layer ";
+ warning_message += manifest_file->LayerName();
+ warning_message += ", negotiation did not return a valid getInstanceProcAddr";
+ LoaderLogger::LogWarningMessage(openxr_command, warning_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ }
+ if (XR_FAILED(res)) {
+ if (!any_loaded) {
+ last_error = res;
+ }
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers skipping layer " << manifest_file->LayerName()
+ << " due to failed negotiation with error " << res;
+ LoaderLogger::LogWarningMessage(openxr_command, oss.str());
+ LoaderPlatformLibraryClose(layer_library);
+ continue;
+ }
+
+ {
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers succeeded loading layer " << manifest_file->LayerName()
+ << " using interface version " << api_layer_info.layerInterfaceVersion << " and OpenXR API version "
+ << XR_VERSION_MAJOR(api_layer_info.layerApiVersion) << "." << XR_VERSION_MINOR(api_layer_info.layerApiVersion);
+ LoaderLogger::LogInfoMessage(openxr_command, oss.str());
+ }
+
+ // Grab the list of extensions this layer supports for easy filtering after the
+ // xrCreateInstance call
+ std::vector<std::string> supported_extensions;
+ std::vector<XrExtensionProperties> extension_properties;
+ manifest_file->GetInstanceExtensionProperties(extension_properties);
+ supported_extensions.reserve(extension_properties.size());
+ for (XrExtensionProperties& ext_prop : extension_properties) {
+ supported_extensions.emplace_back(ext_prop.extensionName);
+ }
+
+ // Add this API layer to the vector
+ api_layer_interfaces.emplace_back(new ApiLayerInterface(manifest_file->LayerName(), layer_library, supported_extensions,
+ api_layer_info.getInstanceProcAddr,
+ api_layer_info.createApiLayerInstance));
+
+ // If we load one, clear all errors.
+ any_loaded = true;
+ last_error = XR_SUCCESS;
+ }
+
+ // Set error here to preserve prior error behavior
+ if (!found_all_layers) {
+ last_error = XR_ERROR_API_LAYER_NOT_PRESENT;
+ }
+
+ // If we failed catastrophically for some reason, clean up everything.
+ if (XR_FAILED(last_error)) {
+ api_layer_interfaces.clear();
+ }
+
+ return last_error;
+}
+
+ApiLayerInterface::ApiLayerInterface(const std::string& layer_name, LoaderPlatformLibraryHandle layer_library,
+ std::vector<std::string>& supported_extensions,
+ PFN_xrGetInstanceProcAddr get_instance_proc_addr,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance)
+ : _layer_name(layer_name),
+ _layer_library(layer_library),
+ _get_instance_proc_addr(get_instance_proc_addr),
+ _create_api_layer_instance(create_api_layer_instance),
+ _supported_extensions(supported_extensions) {}
+
+ApiLayerInterface::~ApiLayerInterface() {
+ std::string info_message = "ApiLayerInterface being destroyed for layer ";
+ info_message += _layer_name;
+ LoaderLogger::LogInfoMessage("", info_message);
+ LoaderPlatformLibraryClose(_layer_library);
+}
+
+bool ApiLayerInterface::SupportsExtension(const std::string& extension_name) const {
+ bool found_prop = false;
+ for (const std::string& supported_extension : _supported_extensions) {
+ if (supported_extension == extension_name) {
+ found_prop = true;
+ break;
+ }
+ }
+ return found_prop;
+}
diff --git a/thirdparty/openxr/src/loader/api_layer_interface.hpp b/thirdparty/openxr/src/loader/api_layer_interface.hpp
new file mode 100644
index 0000000000..b93e44584e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/api_layer_interface.hpp
@@ -0,0 +1,54 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#include <openxr/openxr.h>
+
+#include "loader_platform.hpp"
+#include "loader_interfaces.h"
+
+struct XrGeneratedDispatchTable;
+
+class ApiLayerInterface {
+ public:
+ // Factory method
+ static XrResult LoadApiLayers(const std::string& openxr_command, uint32_t enabled_api_layer_count,
+ const char* const* enabled_api_layer_names,
+ std::vector<std::unique_ptr<ApiLayerInterface>>& api_layer_interfaces);
+ // Static queries
+ static XrResult GetApiLayerProperties(const std::string& openxr_command, uint32_t incoming_count, uint32_t* outgoing_count,
+ XrApiLayerProperties* api_layer_properties);
+ static XrResult GetInstanceExtensionProperties(const std::string& openxr_command, const char* layer_name,
+ std::vector<XrExtensionProperties>& extension_properties);
+
+ ApiLayerInterface(const std::string& layer_name, LoaderPlatformLibraryHandle layer_library,
+ std::vector<std::string>& supported_extensions, PFN_xrGetInstanceProcAddr get_instance_proc_addr,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance);
+ virtual ~ApiLayerInterface();
+
+ PFN_xrGetInstanceProcAddr GetInstanceProcAddrFuncPointer() { return _get_instance_proc_addr; }
+ PFN_xrCreateApiLayerInstance GetCreateApiLayerInstanceFuncPointer() { return _create_api_layer_instance; }
+
+ std::string LayerName() { return _layer_name; }
+
+ // Generated methods
+ bool SupportsExtension(const std::string& extension_name) const;
+
+ private:
+ std::string _layer_name;
+ LoaderPlatformLibraryHandle _layer_library;
+ PFN_xrGetInstanceProcAddr _get_instance_proc_addr;
+ PFN_xrCreateApiLayerInstance _create_api_layer_instance;
+ std::vector<std::string> _supported_extensions;
+};
diff --git a/thirdparty/openxr/src/loader/exception_handling.hpp b/thirdparty/openxr/src/loader/exception_handling.hpp
new file mode 100644
index 0000000000..428dd00279
--- /dev/null
+++ b/thirdparty/openxr/src/loader/exception_handling.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2019-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+// Provides protection for C ABI functions if standard library functions may throw.
+
+#pragma once
+
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+#ifdef XRLOADER_DISABLE_EXCEPTION_HANDLING
+
+#define XRLOADER_ABI_TRY
+#define XRLOADER_ABI_CATCH_BAD_ALLOC_OOM
+#define XRLOADER_ABI_CATCH_FALLBACK
+
+#else
+
+#include <stdexcept>
+#define XRLOADER_ABI_TRY try
+#define XRLOADER_ABI_CATCH_BAD_ALLOC_OOM \
+ catch (const std::bad_alloc&) { \
+ LoaderLogger::LogErrorMessage("", "failed allocating memory"); \
+ return XR_ERROR_OUT_OF_MEMORY; \
+ }
+#define XRLOADER_ABI_CATCH_FALLBACK \
+ catch (const std::exception& e) { \
+ LoaderLogger::LogErrorMessage("", "Unknown failure: " + std::string(e.what())); \
+ return XR_ERROR_RUNTIME_FAILURE; \
+ } \
+ catch (...) { \
+ LoaderLogger::LogErrorMessage("", "Unknown failure"); \
+ return XR_ERROR_RUNTIME_FAILURE; \
+ }
+
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_core.cpp b/thirdparty/openxr/src/loader/loader_core.cpp
new file mode 100644
index 0000000000..375f1c93ba
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_core.cpp
@@ -0,0 +1,847 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "api_layer_interface.hpp"
+#include "exception_handling.hpp"
+#include "hex_and_handles.h"
+#include "loader_instance.hpp"
+#include "loader_logger_recorders.hpp"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+#include "xr_generated_loader.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <mutex>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+// Global loader lock to:
+// 1. Ensure ActiveLoaderInstance get and set operations are done atomically.
+// 2. Ensure RuntimeInterface isn't used to unload the runtime while the runtime is in use.
+std::mutex &GetGlobalLoaderMutex() {
+ static std::mutex loader_mutex;
+ return loader_mutex;
+}
+
+// Prototypes for the debug utils calls used internally.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineCreateDebugUtilsMessengerEXT(
+ XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT *createInfo, XrDebugUtilsMessengerEXT *messenger);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger);
+
+// Terminal functions needed by xrCreateInstance.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermGetInstanceProcAddr(XrInstance, const char *, PFN_xrVoidFunction *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateInstance(const XrInstanceCreateInfo *, XrInstance *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateApiLayerInstance(const XrInstanceCreateInfo *,
+ const struct XrApiLayerCreateInfo *, XrInstance *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSetDebugUtilsObjectNameEXT(XrInstance, const XrDebugUtilsObjectNameInfoEXT *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateDebugUtilsMessengerEXT(XrInstance,
+ const XrDebugUtilsMessengerCreateInfoEXT *,
+ XrDebugUtilsMessengerEXT *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData);
+
+// Utility template function meant to validate if a fixed size string contains
+// a null-terminator.
+template <size_t max_length>
+inline bool IsMissingNullTerminator(const char (&str)[max_length]) {
+ for (size_t index = 0; index < max_length; ++index) {
+ if (str[index] == '\0') {
+ return false;
+ }
+ }
+ return true;
+}
+
+// ---- Core 1.0 manual loader trampoline functions
+#ifdef XR_KHR_LOADER_INIT_SUPPORT // platforms that support XR_KHR_loader_init.
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrInitializeLoaderKHR(const XrLoaderInitInfoBaseHeaderKHR *loaderInitInfo) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrInitializeLoaderKHR", "Entering loader trampoline");
+ return InitializeLoader(loaderInitInfo);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+#endif
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrEnumerateApiLayerProperties(uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrApiLayerProperties *properties) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrEnumerateApiLayerProperties", "Entering loader trampoline");
+
+ // Make sure only one thread is attempting to read the JSON files at a time.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ XrResult result = ApiLayerInterface::GetApiLayerProperties("xrEnumerateApiLayerProperties", propertyCapacityInput,
+ propertyCountOutput, properties);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrEnumerateApiLayerProperties", "Failed ApiLayerInterface::GetApiLayerProperties");
+ }
+
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderXrEnumerateInstanceExtensionProperties(const char *layerName, uint32_t propertyCapacityInput, uint32_t *propertyCountOutput,
+ XrExtensionProperties *properties) XRLOADER_ABI_TRY {
+ bool just_layer_properties = false;
+ LoaderLogger::LogVerboseMessage("xrEnumerateInstanceExtensionProperties", "Entering loader trampoline");
+
+ // "Independent of elementCapacityInput or elements parameters, elementCountOutput must be a valid pointer,
+ // and the function sets elementCountOutput." - 2.11
+ if (nullptr == propertyCountOutput) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ if (nullptr != layerName && 0 != strlen(layerName)) {
+ // Application is only interested in layer's properties, not all of them.
+ just_layer_properties = true;
+ }
+
+ std::vector<XrExtensionProperties> extension_properties = {};
+ XrResult result;
+
+ {
+ // Make sure the runtime isn't unloaded while this call is in progress.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ // Get the layer extension properties
+ result = ApiLayerInterface::GetInstanceExtensionProperties("xrEnumerateInstanceExtensionProperties", layerName,
+ extension_properties);
+ if (XR_SUCCEEDED(result) && !just_layer_properties) {
+ // If not specific to a layer, get the runtime extension properties
+ result = RuntimeInterface::LoadRuntime("xrEnumerateInstanceExtensionProperties");
+ if (XR_SUCCEEDED(result)) {
+ RuntimeInterface::GetRuntime().GetInstanceExtensionProperties(extension_properties);
+ } else {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "Failed to find default runtime with RuntimeInterface::LoadRuntime()");
+ }
+ }
+ }
+
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties", "Failed querying extension properties");
+ return result;
+ }
+
+ // If this is not in reference to a specific layer, then add the loader-specific extension properties as well.
+ // These are extensions that the loader directly supports.
+ if (!just_layer_properties) {
+ for (const XrExtensionProperties &loader_prop : LoaderInstance::LoaderSpecificExtensions()) {
+ bool found_prop = false;
+ for (XrExtensionProperties &existing_prop : extension_properties) {
+ if (0 == strcmp(existing_prop.extensionName, loader_prop.extensionName)) {
+ found_prop = true;
+ // Use the loader version if it is newer
+ if (existing_prop.extensionVersion < loader_prop.extensionVersion) {
+ existing_prop.extensionVersion = loader_prop.extensionVersion;
+ }
+ break;
+ }
+ }
+ // Only add extensions not supported by the loader
+ if (!found_prop) {
+ extension_properties.push_back(loader_prop);
+ }
+ }
+ }
+
+ auto num_extension_properties = static_cast<uint32_t>(extension_properties.size());
+ if (propertyCapacityInput == 0) {
+ *propertyCountOutput = num_extension_properties;
+ } else if (nullptr != properties) {
+ if (propertyCapacityInput < num_extension_properties) {
+ *propertyCountOutput = num_extension_properties;
+ LoaderLogger::LogValidationErrorMessage("VUID-xrEnumerateInstanceExtensionProperties-propertyCountOutput-parameter",
+ "xrEnumerateInstanceExtensionProperties", "insufficient space in array");
+ return XR_ERROR_SIZE_INSUFFICIENT;
+ }
+
+ uint32_t num_to_copy = num_extension_properties;
+ // Determine how many extension properties we can copy over
+ if (propertyCapacityInput < num_to_copy) {
+ num_to_copy = propertyCapacityInput;
+ }
+ bool properties_valid = true;
+ for (uint32_t prop = 0; prop < propertyCapacityInput && prop < extension_properties.size(); ++prop) {
+ if (XR_TYPE_EXTENSION_PROPERTIES != properties[prop].type) {
+ properties_valid = false;
+ LoaderLogger::LogValidationErrorMessage("VUID-XrExtensionProperties-type-type",
+ "xrEnumerateInstanceExtensionProperties", "unknown type in properties");
+ }
+ if (properties_valid) {
+ properties[prop] = extension_properties[prop];
+ }
+ }
+ if (!properties_valid) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrEnumerateInstanceExtensionProperties-properties-parameter",
+ "xrEnumerateInstanceExtensionProperties", "invalid properties");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (nullptr != propertyCountOutput) {
+ *propertyCountOutput = num_to_copy;
+ }
+ } else {
+ // incoming_count is not 0 BUT the properties is NULL
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ LoaderLogger::LogVerboseMessage("xrEnumerateInstanceExtensionProperties", "Completed loader trampoline");
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrCreateInstance(const XrInstanceCreateInfo *info,
+ XrInstance *instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering loader trampoline");
+ if (nullptr == info) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-info-parameter", "xrCreateInstance", "must be non-NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // If application requested OpenXR API version is higher than the loader version, then we need to throw
+ // an error.
+ uint16_t app_major = XR_VERSION_MAJOR(info->applicationInfo.apiVersion); // NOLINT
+ uint16_t app_minor = XR_VERSION_MINOR(info->applicationInfo.apiVersion); // NOLINT
+ uint16_t loader_major = XR_VERSION_MAJOR(XR_CURRENT_API_VERSION); // NOLINT
+ uint16_t loader_minor = XR_VERSION_MINOR(XR_CURRENT_API_VERSION); // NOLINT
+ if (app_major > loader_major || (app_major == loader_major && app_minor > loader_minor)) {
+ std::ostringstream oss;
+ oss << "xrCreateInstance called with invalid API version " << app_major << "." << app_minor
+ << ". Max supported version is " << loader_major << "." << loader_minor;
+ LoaderLogger::LogErrorMessage("xrCreateInstance", oss.str());
+ return XR_ERROR_API_VERSION_UNSUPPORTED;
+ }
+
+ if (nullptr == instance) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-instance-parameter", "xrCreateInstance", "must be non-NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ // Make sure the ActiveLoaderInstance::IsAvailable check is done atomically with RuntimeInterface::LoadRuntime.
+ std::unique_lock<std::mutex> instance_lock(GetGlobalLoaderMutex());
+
+ // Check if there is already an XrInstance that is alive. If so, another instance cannot be created.
+ // The loader does not support multiple simultaneous instances because the loader is intended to be
+ // usable by apps using future OpenXR APIs (through xrGetInstanceProcAddr). Because the loader would
+ // not be aware of new handle types, it would not be able to look up the appropriate dispatch table
+ // in some cases.
+ if (ActiveLoaderInstance::IsAvailable()) { // If there is an XrInstance already alive.
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Loader does not support simultaneous XrInstances");
+ return XR_ERROR_LIMIT_REACHED;
+ }
+
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces;
+ XrResult result;
+
+ // Make sure only one thread is attempting to read the JSON files and use the instance.
+ {
+ // Load the available runtime
+ result = RuntimeInterface::LoadRuntime("xrCreateInstance");
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Failed loading runtime information");
+ } else {
+ // Load the appropriate layers
+ result = ApiLayerInterface::LoadApiLayers("xrCreateInstance", info->enabledApiLayerCount, info->enabledApiLayerNames,
+ api_layer_interfaces);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Failed loading layer information");
+ }
+ }
+ }
+
+ // Create the loader instance (only send down first runtime interface)
+ LoaderInstance *loader_instance = nullptr;
+ if (XR_SUCCEEDED(result)) {
+ std::unique_ptr<LoaderInstance> owned_loader_instance;
+ result = LoaderInstance::CreateInstance(LoaderXrTermGetInstanceProcAddr, LoaderXrTermCreateInstance,
+ LoaderXrTermCreateApiLayerInstance, std::move(api_layer_interfaces), info,
+ &owned_loader_instance);
+ if (XR_SUCCEEDED(result)) {
+ loader_instance = owned_loader_instance.get();
+ result = ActiveLoaderInstance::Set(std::move(owned_loader_instance), "xrCreateInstance");
+ }
+ }
+
+ if (XR_SUCCEEDED(result)) {
+ // Create a debug utils messenger if the create structure is in the "next" chain
+ const auto *next_header = reinterpret_cast<const XrBaseInStructure *>(info->next);
+ const XrDebugUtilsMessengerCreateInfoEXT *dbg_utils_create_info = nullptr;
+ while (next_header != nullptr) {
+ if (next_header->type == XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
+ LoaderLogger::LogInfoMessage("xrCreateInstance", "Found XrDebugUtilsMessengerCreateInfoEXT in \'next\' chain.");
+ dbg_utils_create_info = reinterpret_cast<const XrDebugUtilsMessengerCreateInfoEXT *>(next_header);
+ XrDebugUtilsMessengerEXT messenger;
+ result = LoaderTrampolineCreateDebugUtilsMessengerEXT(loader_instance->GetInstanceHandle(), dbg_utils_create_info,
+ &messenger);
+ if (XR_FAILED(result)) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ loader_instance->SetDefaultDebugUtilsMessenger(messenger);
+ break;
+ }
+ next_header = reinterpret_cast<const XrBaseInStructure *>(next_header->next);
+ }
+ }
+
+ if (XR_FAILED(result)) {
+ // Ensure the global loader instance and runtime are destroyed if something went wrong.
+ ActiveLoaderInstance::Remove();
+ RuntimeInterface::UnloadRuntime("xrCreateInstance");
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "xrCreateInstance failed");
+ } else {
+ *instance = loader_instance->GetInstanceHandle();
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Completed loader trampoline");
+ }
+
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrDestroyInstance(XrInstance instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Entering loader trampoline");
+ // Runtimes may detect XR_NULL_HANDLE provided as a required handle parameter and return XR_ERROR_HANDLE_INVALID. - 2.9
+ if (XR_NULL_HANDLE == instance) {
+ LoaderLogger::LogErrorMessage("xrDestroyInstance", "Instance handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ // Make sure the runtime isn't unloaded while it is being used by xrEnumerateInstanceExtensionProperties.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyInstance");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+
+ // If we allocated a default debug utils messenger, free it
+ XrDebugUtilsMessengerEXT messenger = loader_instance->DefaultDebugUtilsMessenger();
+ if (messenger != XR_NULL_HANDLE) {
+ LoaderTrampolineDestroyDebugUtilsMessengerEXT(messenger);
+ }
+
+ // Now destroy the instance
+ if (XR_FAILED(dispatch_table->DestroyInstance(instance))) {
+ LoaderLogger::LogErrorMessage("xrDestroyInstance", "Unknown error occurred calling down chain");
+ }
+
+ // Get rid of the loader instance. This will make it possible to create another instance in the future.
+ ActiveLoaderInstance::Remove();
+
+ // Lock the instance create/destroy mutex
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Completed loader trampoline");
+
+ // Finally, unload the runtime if necessary
+ RuntimeInterface::UnloadRuntime("xrDestroyInstance");
+
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Core 1.0 manual loader terminator functions
+
+// Validate that the applicationInfo structure in the XrInstanceCreateInfo is valid.
+static XrResult ValidateApplicationInfo(const XrApplicationInfo &info) {
+ if (IsMissingNullTerminator<XR_MAX_APPLICATION_NAME_SIZE>(info.applicationName)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrApplicationInfo-applicationName-parameter", "xrCreateInstance",
+ "application name missing NULL terminator.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ if (IsMissingNullTerminator<XR_MAX_ENGINE_NAME_SIZE>(info.engineName)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrApplicationInfo-engineName-parameter", "xrCreateInstance",
+ "engine name missing NULL terminator.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ if (strlen(info.applicationName) == 0) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance",
+ "VUID-XrApplicationInfo-engineName-parameter: application name can not be empty.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ return XR_SUCCESS;
+}
+
+// Validate that the XrInstanceCreateInfo is valid
+static XrResult ValidateInstanceCreateInfo(const XrInstanceCreateInfo *info) {
+ // Should have a valid 'type'
+ if (XR_TYPE_INSTANCE_CREATE_INFO != info->type) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-type-type", "xrCreateInstance",
+ "expected XR_TYPE_INSTANCE_CREATE_INFO.");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // Flags must be 0
+ if (0 != info->createFlags) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-createFlags-zerobitmask", "xrCreateInstance",
+ "flags must be 0.");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // ApplicationInfo struct must be valid
+ XrResult result = ValidateApplicationInfo(info->applicationInfo);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-applicationInfo-parameter", "xrCreateInstance",
+ "info->applicationInfo is not valid.");
+ return result;
+ }
+ // VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter already tested in LoadApiLayers()
+ if ((info->enabledExtensionCount != 0u) && nullptr == info->enabledExtensionNames) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter", "xrCreateInstance",
+ "enabledExtensionCount is non-0 but array is NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ return XR_SUCCESS;
+}
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateInstance(const XrInstanceCreateInfo *createInfo,
+ XrInstance *instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering loader terminator");
+ XrResult result = ValidateInstanceCreateInfo(createInfo);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-info-parameter", "xrCreateInstance",
+ "something wrong with XrInstanceCreateInfo contents");
+ return result;
+ }
+ result = RuntimeInterface::GetRuntime().CreateInstance(createInfo, instance);
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateApiLayerInstance(const XrInstanceCreateInfo *info,
+ const struct XrApiLayerCreateInfo * /*apiLayerInfo*/,
+ XrInstance *instance) {
+ return LoaderXrTermCreateInstance(info, instance);
+}
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyInstance(XrInstance instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Entering loader terminator");
+ LoaderLogger::GetInstance().RemoveLogRecordersForXrInstance(instance);
+ XrResult result = RuntimeInterface::GetRuntime().DestroyInstance(instance);
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) XRLOADER_ABI_TRY {
+ // A few instance commands need to go through a loader terminator.
+ // Otherwise, go directly to the runtime version of the command if it exists.
+ // But first set the function pointer to NULL so that the fall-through below actually works.
+ *function = nullptr;
+
+ // NOTE: ActiveLoaderInstance cannot be used in this function because it is called before an instance is made active.
+
+ if (0 == strcmp(name, "xrGetInstanceProcAddr")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermGetInstanceProcAddr);
+ } else if (0 == strcmp(name, "xrCreateInstance")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateInstance);
+ } else if (0 == strcmp(name, "xrDestroyInstance")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermDestroyInstance);
+ } else if (0 == strcmp(name, "xrSetDebugUtilsObjectNameEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermSetDebugUtilsObjectNameEXT);
+ } else if (0 == strcmp(name, "xrCreateDebugUtilsMessengerEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateDebugUtilsMessengerEXT);
+ } else if (0 == strcmp(name, "xrDestroyDebugUtilsMessengerEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermDestroyDebugUtilsMessengerEXT);
+ } else if (0 == strcmp(name, "xrSubmitDebugUtilsMessageEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermSubmitDebugUtilsMessageEXT);
+ } else if (0 == strcmp(name, "xrCreateApiLayerInstance")) {
+ // Special layer version of xrCreateInstance terminator. If we get called this by a layer,
+ // we simply re-direct the information back into the standard xrCreateInstance terminator.
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateApiLayerInstance);
+ }
+
+ if (nullptr != *function) {
+ return XR_SUCCESS;
+ }
+
+ return RuntimeInterface::GetInstanceProcAddr(instance, name, function);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Extension manual loader trampoline functions
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineCreateDebugUtilsMessengerEXT(XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT *createInfo,
+ XrDebugUtilsMessengerEXT *messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Entering loader trampoline");
+
+ if (instance == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrCreateDebugUtilsMessengerEXT", "Instance handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateDebugUtilsMessengerEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ result = loader_instance->DispatchTable()->CreateDebugUtilsMessengerEXT(instance, createInfo, messenger);
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Completed loader trampoline");
+ return result;
+}
+XRLOADER_ABI_CATCH_BAD_ALLOC_OOM XRLOADER_ABI_CATCH_FALLBACK
+
+ static XRAPI_ATTR XrResult XRAPI_CALL
+ LoaderTrampolineDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger) XRLOADER_ABI_TRY {
+ // TODO: get instance from messenger in loader
+ // Also, is the loader really doing all this every call?
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Entering loader trampoline");
+
+ if (messenger == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrDestroyDebugUtilsMessengerEXT", "Messenger handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyDebugUtilsMessengerEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ result = loader_instance->DispatchTable()->DestroyDebugUtilsMessengerEXT(messenger);
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Completed loader trampoline");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSessionBeginDebugUtilsLabelRegionEXT(XrSession session, const XrDebugUtilsLabelEXT *labelInfo) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionBeginDebugUtilsLabelRegionEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ if (nullptr == labelInfo) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrSessionBeginDebugUtilsLabelRegionEXT-labelInfo-parameter",
+ "xrSessionBeginDebugUtilsLabelRegionEXT", "labelInfo must be non-NULL",
+ {XrSdkLogObjectInfo{session, XR_OBJECT_TYPE_SESSION}});
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionBeginDebugUtilsLabelRegionEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+ LoaderLogger::GetInstance().BeginLabelRegion(session, labelInfo);
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionBeginDebugUtilsLabelRegionEXT) {
+ return dispatch_table->SessionBeginDebugUtilsLabelRegionEXT(session, labelInfo);
+ }
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineSessionEndDebugUtilsLabelRegionEXT(XrSession session) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionEndDebugUtilsLabelRegionEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionEndDebugUtilsLabelRegionEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ LoaderLogger::GetInstance().EndLabelRegion(session);
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionEndDebugUtilsLabelRegionEXT) {
+ return dispatch_table->SessionEndDebugUtilsLabelRegionEXT(session);
+ }
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSessionInsertDebugUtilsLabelEXT(XrSession session, const XrDebugUtilsLabelEXT *labelInfo) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionInsertDebugUtilsLabelEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionInsertDebugUtilsLabelEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ if (nullptr == labelInfo) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrSessionInsertDebugUtilsLabelEXT-labelInfo-parameter",
+ "xrSessionInsertDebugUtilsLabelEXT", "labelInfo must be non-NULL",
+ {XrSdkLogObjectInfo{session, XR_OBJECT_TYPE_SESSION}});
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderLogger::GetInstance().InsertLabel(session, labelInfo);
+
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionInsertDebugUtilsLabelEXT) {
+ return dispatch_table->SessionInsertDebugUtilsLabelEXT(session, labelInfo);
+ }
+
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// No-op trampoline needed for xrGetInstanceProcAddr. Work done in terminator.
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSetDebugUtilsObjectNameEXT(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT *nameInfo) XRLOADER_ABI_TRY {
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSetDebugUtilsObjectNameEXT");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SetDebugUtilsObjectNameEXT(instance, nameInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// No-op trampoline needed for xrGetInstanceProcAddr. Work done in terminator.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData) XRLOADER_ABI_TRY {
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSubmitDebugUtilsMessageEXT");
+ if (XR_SUCCEEDED(result)) {
+ result =
+ loader_instance->DispatchTable()->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Extension manual loader terminator functions
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateDebugUtilsMessengerEXT(XrInstance instance,
+ const XrDebugUtilsMessengerCreateInfoEXT *createInfo,
+ XrDebugUtilsMessengerEXT *messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Entering loader terminator");
+ if (nullptr == messenger) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateDebugUtilsMessengerEXT-messenger-parameter",
+ "xrCreateDebugUtilsMessengerEXT", "invalid messenger pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ // This extension is supported entirely by the loader which means the runtime may or may not support it.
+ if (nullptr != dispatch_table->CreateDebugUtilsMessengerEXT) {
+ result = dispatch_table->CreateDebugUtilsMessengerEXT(instance, createInfo, messenger);
+ } else {
+ // Just allocate a character so we have a unique value
+ char *temp_mess_ptr = new char;
+ *messenger = reinterpret_cast<XrDebugUtilsMessengerEXT>(temp_mess_ptr);
+ }
+ if (XR_SUCCEEDED(result)) {
+ LoaderLogger::GetInstance().AddLogRecorderForXrInstance(instance, MakeDebugUtilsLoaderLogRecorder(createInfo, *messenger));
+ RuntimeInterface::GetRuntime().TrackDebugMessenger(instance, *messenger);
+ }
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDebugUtilsMessengerDispatchTable(messenger);
+ XrResult result = XR_SUCCESS;
+ LoaderLogger::GetInstance().RemoveLogRecorder(MakeHandleGeneric(messenger));
+ RuntimeInterface::GetRuntime().ForgetDebugMessenger(messenger);
+ // This extension is supported entirely by the loader which means the runtime may or may not support it.
+ if (nullptr != dispatch_table->DestroyDebugUtilsMessengerEXT) {
+ result = dispatch_table->DestroyDebugUtilsMessengerEXT(messenger);
+ } else {
+ // Delete the character we would've created
+ delete (reinterpret_cast<char *>(MakeHandleGeneric(messenger)));
+ }
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrSubmitDebugUtilsMessageEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ if (nullptr != dispatch_table->SubmitDebugUtilsMessageEXT) {
+ result = dispatch_table->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
+ } else {
+ // Only log the message from the loader if the runtime doesn't support this extension. If we did,
+ // then the user would receive multiple instances of the same message.
+ LoaderLogger::GetInstance().LogDebugUtilsMessage(messageSeverity, messageTypes, callbackData);
+ }
+ LoaderLogger::LogVerboseMessage("xrSubmitDebugUtilsMessageEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL
+LoaderXrTermSetDebugUtilsObjectNameEXT(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT *nameInfo) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrSetDebugUtilsObjectNameEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ if (nullptr != dispatch_table->SetDebugUtilsObjectNameEXT) {
+ result = dispatch_table->SetDebugUtilsObjectNameEXT(instance, nameInfo);
+ }
+ LoaderLogger::GetInstance().AddObjectName(nameInfo->objectHandle, nameInfo->objectType, nameInfo->objectName);
+ LoaderLogger::LogVerboseMessage("xrSetDebugUtilsObjectNameEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) XRLOADER_ABI_TRY {
+ // Initialize the function to nullptr in case it does not get caught in a known case
+ *function = nullptr;
+
+ if (nullptr == function) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-function-parameter", "xrGetInstanceProcAddr",
+ "Invalid Function pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ if (nullptr == name) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-function-parameter", "xrGetInstanceProcAddr",
+ "Invalid Name pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderInstance *loader_instance = nullptr;
+ if (instance == XR_NULL_HANDLE) {
+ // Null instance is allowed for a few specific API entry points, otherwise return error
+ if (strcmp(name, "xrCreateInstance") != 0 && strcmp(name, "xrEnumerateApiLayerProperties") != 0 &&
+ strcmp(name, "xrEnumerateInstanceExtensionProperties") != 0 && strcmp(name, "xrInitializeLoaderKHR") != 0) {
+ // TODO why is xrGetInstanceProcAddr not listed in here?
+ std::string error_str = "XR_NULL_HANDLE for instance but query for ";
+ error_str += name;
+ error_str += " requires a valid instance";
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-instance-parameter", "xrGetInstanceProcAddr",
+ error_str);
+ return XR_ERROR_HANDLE_INVALID;
+ }
+ } else {
+ // non null instance passed in, it should be our current instance
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInstanceProcAddr");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+ if (loader_instance->GetInstanceHandle() != instance) {
+ return XR_ERROR_HANDLE_INVALID;
+ }
+ }
+
+ // These functions must always go through the loader's implementation (trampoline).
+ if (strcmp(name, "xrGetInstanceProcAddr") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrGetInstanceProcAddr);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrInitializeLoaderKHR") == 0) {
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrInitializeLoaderKHR);
+ return XR_SUCCESS;
+#else
+ return XR_ERROR_FUNCTION_UNSUPPORTED;
+#endif
+ } else if (strcmp(name, "xrEnumerateApiLayerProperties") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrEnumerateApiLayerProperties);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrEnumerateInstanceExtensionProperties") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrEnumerateInstanceExtensionProperties);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrCreateInstance") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrCreateInstance);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrDestroyInstance") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrDestroyInstance);
+ return XR_SUCCESS;
+ }
+
+ // XR_EXT_debug_utils is built into the loader and handled partly through the xrGetInstanceProcAddress terminator,
+ // but the check to see if the extension is enabled must be done here where ActiveLoaderInstance is safe to use.
+ if (*function == nullptr) {
+ if (strcmp(name, "xrCreateDebugUtilsMessengerEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineCreateDebugUtilsMessengerEXT);
+ } else if (strcmp(name, "xrDestroyDebugUtilsMessengerEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineDestroyDebugUtilsMessengerEXT);
+ } else if (strcmp(name, "xrSessionBeginDebugUtilsLabelRegionEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionBeginDebugUtilsLabelRegionEXT);
+ } else if (strcmp(name, "xrSessionEndDebugUtilsLabelRegionEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionEndDebugUtilsLabelRegionEXT);
+ } else if (strcmp(name, "xrSessionInsertDebugUtilsLabelEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionInsertDebugUtilsLabelEXT);
+ } else if (strcmp(name, "xrSetDebugUtilsObjectNameEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSetDebugUtilsObjectNameEXT);
+ } else if (strcmp(name, "xrSubmitDebugUtilsMessageEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSubmitDebugUtilsMessageEXT);
+ }
+
+ if (*function != nullptr && !loader_instance->ExtensionIsEnabled("XR_EXT_debug_utils")) {
+ // The function matches one of the XR_EXT_debug_utils functions but the extension is not enabled.
+ *function = nullptr;
+ return XR_ERROR_FUNCTION_UNSUPPORTED;
+ }
+ }
+
+ if (*function != nullptr) {
+ // The loader has a trampoline or implementation of this function.
+ return XR_SUCCESS;
+ }
+
+ // If the function is not supported by the loader, call down to the next layer.
+ return loader_instance->GetInstanceProcAddr(name, function);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// Exported loader functions
+//
+// The application might override these by exporting the same symbols and so we can't use these
+// symbols anywhere in the loader code, and instead the internal non exported functions that these
+// stubs call should be used internally.
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateApiLayerProperties(uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrApiLayerProperties *properties) {
+ return LoaderXrEnumerateApiLayerProperties(propertyCapacityInput, propertyCountOutput, properties);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateInstanceExtensionProperties(const char *layerName,
+ uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrExtensionProperties *properties) {
+ return LoaderXrEnumerateInstanceExtensionProperties(layerName, propertyCapacityInput, propertyCountOutput, properties);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateInstance(const XrInstanceCreateInfo *info, XrInstance *instance) {
+ return LoaderXrCreateInstance(info, instance);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyInstance(XrInstance instance) { return LoaderXrDestroyInstance(instance); }
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) {
+ return LoaderXrGetInstanceProcAddr(instance, name, function);
+}
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR(const XrLoaderInitInfoBaseHeaderKHR *loaderInitInfo) {
+ return LoaderXrInitializeLoaderKHR(loaderInitInfo);
+}
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_instance.cpp b/thirdparty/openxr/src/loader/loader_instance.cpp
new file mode 100644
index 0000000000..b24c8de53b
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_instance.cpp
@@ -0,0 +1,303 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "loader_instance.hpp"
+
+#include "api_layer_interface.hpp"
+#include "hex_and_handles.h"
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+#include "xr_generated_loader.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace {
+std::unique_ptr<LoaderInstance>& GetSetCurrentLoaderInstance() {
+ static std::unique_ptr<LoaderInstance> current_loader_instance;
+ return current_loader_instance;
+}
+} // namespace
+
+namespace ActiveLoaderInstance {
+XrResult Set(std::unique_ptr<LoaderInstance> loader_instance, const char* log_function_name) {
+ if (GetSetCurrentLoaderInstance() != nullptr) {
+ LoaderLogger::LogErrorMessage(log_function_name, "Active XrInstance handle already exists");
+ return XR_ERROR_LIMIT_REACHED;
+ }
+
+ GetSetCurrentLoaderInstance() = std::move(loader_instance);
+ return XR_SUCCESS;
+}
+
+XrResult Get(LoaderInstance** loader_instance, const char* log_function_name) {
+ *loader_instance = GetSetCurrentLoaderInstance().get();
+ if (*loader_instance == nullptr) {
+ LoaderLogger::LogErrorMessage(log_function_name, "No active XrInstance handle.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ return XR_SUCCESS;
+}
+
+bool IsAvailable() { return GetSetCurrentLoaderInstance() != nullptr; }
+
+void Remove() { GetSetCurrentLoaderInstance().release(); }
+} // namespace ActiveLoaderInstance
+
+// Extensions that are supported by the loader, but may not be supported
+// the the runtime.
+const std::array<XrExtensionProperties, 1>& LoaderInstance::LoaderSpecificExtensions() {
+ static const std::array<XrExtensionProperties, 1> extensions = {XrExtensionProperties{
+ XR_TYPE_EXTENSION_PROPERTIES, nullptr, XR_EXT_DEBUG_UTILS_EXTENSION_NAME, XR_EXT_debug_utils_SPEC_VERSION}};
+ return extensions;
+}
+
+namespace {
+class InstanceCreateInfoManager {
+ public:
+ explicit InstanceCreateInfoManager(const XrInstanceCreateInfo* info) : original_create_info(info), modified_create_info(*info) {
+ Reset();
+ }
+
+ // Reset the "modified" state to match the original state.
+ void Reset() {
+ enabled_extensions_cstr.clear();
+ enabled_extensions_cstr.reserve(original_create_info->enabledExtensionCount);
+
+ for (uint32_t i = 0; i < original_create_info->enabledExtensionCount; ++i) {
+ enabled_extensions_cstr.push_back(original_create_info->enabledExtensionNames[i]);
+ }
+ Update();
+ }
+
+ // Remove extensions named in the parameter and return a pointer to the current state.
+ const XrInstanceCreateInfo* FilterOutExtensions(const std::vector<const char*>& extensions_to_skip) {
+ if (enabled_extensions_cstr.empty()) {
+ return Get();
+ }
+ if (extensions_to_skip.empty()) {
+ return Get();
+ }
+ for (auto& ext : extensions_to_skip) {
+ FilterOutExtension(ext);
+ }
+ return Update();
+ }
+ // Remove the extension named in the parameter and return a pointer to the current state.
+ const XrInstanceCreateInfo* FilterOutExtension(const char* extension_to_skip) {
+ if (enabled_extensions_cstr.empty()) {
+ return &modified_create_info;
+ }
+ auto b = enabled_extensions_cstr.begin();
+ auto e = enabled_extensions_cstr.end();
+ auto it = std::find_if(b, e, [&](const char* extension) { return strcmp(extension_to_skip, extension) == 0; });
+ if (it != e) {
+ // Just that one element goes away
+ enabled_extensions_cstr.erase(it);
+ }
+ return Update();
+ }
+
+ // Get the current modified XrInstanceCreateInfo
+ const XrInstanceCreateInfo* Get() const { return &modified_create_info; }
+
+ private:
+ const XrInstanceCreateInfo* Update() {
+ modified_create_info.enabledExtensionCount = static_cast<uint32_t>(enabled_extensions_cstr.size());
+ modified_create_info.enabledExtensionNames = enabled_extensions_cstr.empty() ? nullptr : enabled_extensions_cstr.data();
+ return &modified_create_info;
+ }
+ const XrInstanceCreateInfo* original_create_info;
+
+ XrInstanceCreateInfo modified_create_info;
+ std::vector<const char*> enabled_extensions_cstr;
+};
+} // namespace
+
+// Factory method
+XrResult LoaderInstance::CreateInstance(PFN_xrGetInstanceProcAddr get_instance_proc_addr_term,
+ PFN_xrCreateInstance create_instance_term,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance_term,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces,
+ const XrInstanceCreateInfo* info, std::unique_ptr<LoaderInstance>* loader_instance) {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering LoaderInstance::CreateInstance");
+
+ // Check the list of enabled extensions to make sure something supports them, and, if we do,
+ // add it to the list of enabled extensions
+ XrResult last_error = XR_SUCCESS;
+ for (uint32_t ext = 0; ext < info->enabledExtensionCount; ++ext) {
+ bool found = false;
+ // First check the runtime
+ if (RuntimeInterface::GetRuntime().SupportsExtension(info->enabledExtensionNames[ext])) {
+ found = true;
+ }
+ // Next check the loader
+ if (!found) {
+ for (auto& loader_extension : LoaderInstance::LoaderSpecificExtensions()) {
+ if (strcmp(loader_extension.extensionName, info->enabledExtensionNames[ext]) == 0) {
+ found = true;
+ break;
+ }
+ }
+ }
+ // Finally, check the enabled layers
+ if (!found) {
+ for (auto& layer_interface : api_layer_interfaces) {
+ if (layer_interface->SupportsExtension(info->enabledExtensionNames[ext])) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ std::string msg = "LoaderInstance::CreateInstance, no support found for requested extension: ";
+ msg += info->enabledExtensionNames[ext];
+ LoaderLogger::LogErrorMessage("xrCreateInstance", msg);
+ last_error = XR_ERROR_EXTENSION_NOT_PRESENT;
+ break;
+ }
+ }
+
+ // Topmost means "closest to the application"
+ PFN_xrGetInstanceProcAddr topmost_gipa = get_instance_proc_addr_term;
+ XrInstance instance{XR_NULL_HANDLE};
+
+ if (XR_SUCCEEDED(last_error)) {
+ // Remove the loader-supported-extensions (debug utils), if it's in the list of enabled extensions but not supported by
+ // the runtime.
+ InstanceCreateInfoManager create_info_manager{info};
+ const XrInstanceCreateInfo* modified_create_info = info;
+ if (info->enabledExtensionCount > 0) {
+ std::vector<const char*> extensions_to_skip;
+ for (const auto& ext : LoaderInstance::LoaderSpecificExtensions()) {
+ if (!RuntimeInterface::GetRuntime().SupportsExtension(ext.extensionName)) {
+ extensions_to_skip.emplace_back(ext.extensionName);
+ }
+ }
+ modified_create_info = create_info_manager.FilterOutExtensions(extensions_to_skip);
+ }
+
+ // Only start the xrCreateApiLayerInstance stack if we have layers.
+ if (!api_layer_interfaces.empty()) {
+ // Initialize an array of ApiLayerNextInfo structs
+ std::unique_ptr<XrApiLayerNextInfo[]> next_info_list(new XrApiLayerNextInfo[api_layer_interfaces.size()]);
+ auto ni_index = static_cast<uint32_t>(api_layer_interfaces.size() - 1);
+ for (uint32_t i = 0; i <= ni_index; i++) {
+ next_info_list[i].structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO;
+ next_info_list[i].structVersion = XR_API_LAYER_NEXT_INFO_STRUCT_VERSION;
+ next_info_list[i].structSize = sizeof(XrApiLayerNextInfo);
+ }
+
+ // Go through all layers, and override the instance pointers with the layer version. However,
+ // go backwards through the layer list so we replace in reverse order so the layers can call their next function
+ // appropriately.
+ PFN_xrCreateApiLayerInstance topmost_cali_fp = create_api_layer_instance_term;
+ XrApiLayerNextInfo* topmost_nextinfo = nullptr;
+ for (auto layer_interface = api_layer_interfaces.rbegin(); layer_interface != api_layer_interfaces.rend();
+ ++layer_interface) {
+ // Collect current layer's function pointers
+ PFN_xrGetInstanceProcAddr cur_gipa_fp = (*layer_interface)->GetInstanceProcAddrFuncPointer();
+ PFN_xrCreateApiLayerInstance cur_cali_fp = (*layer_interface)->GetCreateApiLayerInstanceFuncPointer();
+
+ // Fill in layer info and link previous (lower) layer fxn pointers
+ strncpy(next_info_list[ni_index].layerName, (*layer_interface)->LayerName().c_str(),
+ XR_MAX_API_LAYER_NAME_SIZE - 1);
+ next_info_list[ni_index].layerName[XR_MAX_API_LAYER_NAME_SIZE - 1] = '\0';
+ next_info_list[ni_index].next = topmost_nextinfo;
+ next_info_list[ni_index].nextGetInstanceProcAddr = topmost_gipa;
+ next_info_list[ni_index].nextCreateApiLayerInstance = topmost_cali_fp;
+
+ // Update saved pointers for next iteration
+ topmost_nextinfo = &next_info_list[ni_index];
+ topmost_gipa = cur_gipa_fp;
+ topmost_cali_fp = cur_cali_fp;
+ ni_index--;
+ }
+
+ // Populate the ApiLayerCreateInfo struct and pass to topmost CreateApiLayerInstance()
+ XrApiLayerCreateInfo api_layer_ci = {};
+ api_layer_ci.structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO;
+ api_layer_ci.structVersion = XR_API_LAYER_CREATE_INFO_STRUCT_VERSION;
+ api_layer_ci.structSize = sizeof(XrApiLayerCreateInfo);
+ api_layer_ci.loaderInstance = nullptr; // Not used.
+ api_layer_ci.settings_file_location[0] = '\0';
+ api_layer_ci.nextInfo = next_info_list.get();
+ //! @todo do we filter our create info extension list here?
+ //! Think that actually each layer might need to filter...
+ last_error = topmost_cali_fp(modified_create_info, &api_layer_ci, &instance);
+
+ } else {
+ // The loader's terminator is the topmost CreateInstance if there are no layers.
+ last_error = create_instance_term(modified_create_info, &instance);
+ }
+
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "LoaderInstance::CreateInstance chained CreateInstance call failed");
+ }
+ }
+
+ if (XR_SUCCEEDED(last_error)) {
+ loader_instance->reset(new LoaderInstance(instance, info, topmost_gipa, std::move(api_layer_interfaces)));
+
+ std::ostringstream oss;
+ oss << "LoaderInstance::CreateInstance succeeded with ";
+ oss << (*loader_instance)->LayerInterfaces().size();
+ oss << " layers enabled and runtime interface - created instance = ";
+ oss << HandleToHexString((*loader_instance)->GetInstanceHandle());
+ LoaderLogger::LogInfoMessage("xrCreateInstance", oss.str());
+ }
+
+ return last_error;
+}
+
+XrResult LoaderInstance::GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function) {
+ return _topmost_gipa(_runtime_instance, name, function);
+}
+
+LoaderInstance::LoaderInstance(XrInstance instance, const XrInstanceCreateInfo* create_info, PFN_xrGetInstanceProcAddr topmost_gipa,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces)
+ : _runtime_instance(instance),
+ _topmost_gipa(topmost_gipa),
+ _api_layer_interfaces(std::move(api_layer_interfaces)),
+ _dispatch_table(new XrGeneratedDispatchTable{}) {
+ for (uint32_t ext = 0; ext < create_info->enabledExtensionCount; ++ext) {
+ _enabled_extensions.push_back(create_info->enabledExtensionNames[ext]);
+ }
+
+ GeneratedXrPopulateDispatchTable(_dispatch_table.get(), instance, topmost_gipa);
+}
+
+LoaderInstance::~LoaderInstance() {
+ std::ostringstream oss;
+ oss << "Destroying LoaderInstance = ";
+ oss << PointerToHexString(this);
+ LoaderLogger::LogInfoMessage("xrDestroyInstance", oss.str());
+}
+
+bool LoaderInstance::ExtensionIsEnabled(const std::string& extension) {
+ for (std::string& cur_enabled : _enabled_extensions) {
+ if (cur_enabled == extension) {
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/thirdparty/openxr/src/loader/loader_instance.hpp b/thirdparty/openxr/src/loader/loader_instance.hpp
new file mode 100644
index 0000000000..1d43ed758d
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_instance.hpp
@@ -0,0 +1,77 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include "extra_algorithms.h"
+#include "loader_interfaces.h"
+
+#include <openxr/openxr.h>
+
+#include <array>
+#include <cmath>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+class ApiLayerInterface;
+struct XrGeneratedDispatchTable;
+class LoaderInstance;
+
+// Manage the single loader instance that is available.
+namespace ActiveLoaderInstance {
+// Set the active loader instance. This will fail if there is already an active loader instance.
+XrResult Set(std::unique_ptr<LoaderInstance> loader_instance, const char* log_function_name);
+
+// Returns true if there is an active loader instance.
+bool IsAvailable();
+
+// Get the active LoaderInstance.
+XrResult Get(LoaderInstance** loader_instance, const char* log_function_name);
+
+// Destroy the currently active LoaderInstance if there is one. This will make the loader able to create a new XrInstance if needed.
+void Remove();
+}; // namespace ActiveLoaderInstance
+
+// Manages information needed by the loader for an XrInstance, such as what extensions are available and the dispatch table.
+class LoaderInstance {
+ public:
+ // Factory method
+ static XrResult CreateInstance(PFN_xrGetInstanceProcAddr get_instance_proc_addr_term, PFN_xrCreateInstance create_instance_term,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance_term,
+ std::vector<std::unique_ptr<ApiLayerInterface>> layer_interfaces,
+ const XrInstanceCreateInfo* createInfo, std::unique_ptr<LoaderInstance>* loader_instance);
+ static const std::array<XrExtensionProperties, 1>& LoaderSpecificExtensions();
+
+ virtual ~LoaderInstance();
+
+ XrInstance GetInstanceHandle() { return _runtime_instance; }
+ const std::unique_ptr<XrGeneratedDispatchTable>& DispatchTable() { return _dispatch_table; }
+ std::vector<std::unique_ptr<ApiLayerInterface>>& LayerInterfaces() { return _api_layer_interfaces; }
+ bool ExtensionIsEnabled(const std::string& extension);
+ XrDebugUtilsMessengerEXT DefaultDebugUtilsMessenger() { return _messenger; }
+ void SetDefaultDebugUtilsMessenger(XrDebugUtilsMessengerEXT messenger) { _messenger = messenger; }
+ XrResult GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function);
+
+ private:
+ LoaderInstance(XrInstance instance, const XrInstanceCreateInfo* createInfo, PFN_xrGetInstanceProcAddr topmost_gipa,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces);
+
+ private:
+ XrInstance _runtime_instance{XR_NULL_HANDLE};
+ PFN_xrGetInstanceProcAddr _topmost_gipa{nullptr};
+ std::vector<std::string> _enabled_extensions;
+ std::vector<std::unique_ptr<ApiLayerInterface>> _api_layer_interfaces;
+
+ std::unique_ptr<XrGeneratedDispatchTable> _dispatch_table;
+ // Internal debug messenger created during xrCreateInstance
+ XrDebugUtilsMessengerEXT _messenger{XR_NULL_HANDLE};
+};
diff --git a/thirdparty/openxr/src/loader/loader_logger.cpp b/thirdparty/openxr/src/loader/loader_logger.cpp
new file mode 100644
index 0000000000..dba46aa92d
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger.cpp
@@ -0,0 +1,239 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "loader_logger.hpp"
+
+#include "extra_algorithms.h"
+#include "hex_and_handles.h"
+#include "loader_logger_recorders.hpp"
+#include "platform_utils.hpp"
+
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <iterator>
+#include <memory>
+#include <mutex>
+#include <sstream>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+bool LoaderLogRecorder::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT /*message_severity*/,
+ XrDebugUtilsMessageTypeFlagsEXT /*message_type*/,
+ const XrDebugUtilsMessengerCallbackDataEXT* /*callback_data*/) {
+ return false;
+}
+
+// Utility functions for converting to/from XR_EXT_debug_utils values
+
+XrLoaderLogMessageSeverityFlags DebugUtilsSeveritiesToLoaderLogMessageSeverities(
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities) {
+ XrLoaderLogMessageSeverityFlags log_severities = 0UL;
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT;
+ }
+ return log_severities;
+}
+
+XrDebugUtilsMessageSeverityFlagsEXT LoaderLogMessageSeveritiesToDebugUtilsMessageSeverities(
+ XrLoaderLogMessageSeverityFlags log_severities) {
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities = 0UL;
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
+ }
+ return utils_severities;
+}
+
+XrLoaderLogMessageTypeFlagBits DebugUtilsMessageTypesToLoaderLogMessageTypes(XrDebugUtilsMessageTypeFlagsEXT utils_types) {
+ XrLoaderLogMessageTypeFlagBits log_types = 0UL;
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT;
+ }
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT;
+ }
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT;
+ }
+ return log_types;
+}
+
+XrDebugUtilsMessageTypeFlagsEXT LoaderLogMessageTypesToDebugUtilsMessageTypes(XrLoaderLogMessageTypeFlagBits log_types) {
+ XrDebugUtilsMessageTypeFlagsEXT utils_types = 0UL;
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
+ }
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
+ }
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
+ }
+ return utils_types;
+}
+
+LoaderLogger::LoaderLogger() {
+ std::string debug_string = PlatformUtilsGetEnv("XR_LOADER_DEBUG");
+
+ // Add an error logger by default so that we at least get errors out to std::cerr.
+ // Normally we enable stderr output. But if the XR_LOADER_DEBUG environment variable is
+ // present as "none" then we don't.
+ if (debug_string != "none") {
+ AddLogRecorder(MakeStdErrLoaderLogRecorder(nullptr));
+#ifdef __ANDROID__
+ // Add a logcat logger by default.
+ AddLogRecorder(MakeLogcatLoaderLogRecorder());
+#endif // __ANDROID__
+ }
+
+#ifdef _WIN32
+ // Add an debugger logger by default so that we at least get errors out to the debugger.
+ AddLogRecorder(MakeDebuggerLoaderLogRecorder(nullptr));
+#endif
+
+ // If the environment variable to enable loader debugging is set, then enable the
+ // appropriate logging out to std::cout.
+ if (!debug_string.empty()) {
+ XrLoaderLogMessageSeverityFlags debug_flags = {};
+ if (debug_string == "error") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT;
+ } else if (debug_string == "warn") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT;
+ } else if (debug_string == "info") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT;
+ } else if (debug_string == "all" || debug_string == "verbose") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT;
+ }
+ AddLogRecorder(MakeStdOutLoaderLogRecorder(nullptr, debug_flags));
+ }
+}
+
+void LoaderLogger::AddLogRecorder(std::unique_ptr<LoaderLogRecorder>&& recorder) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ _recorders.push_back(std::move(recorder));
+}
+
+void LoaderLogger::AddLogRecorderForXrInstance(XrInstance instance, std::unique_ptr<LoaderLogRecorder>&& recorder) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ _recordersByInstance[instance].insert(recorder->UniqueId());
+ _recorders.emplace_back(std::move(recorder));
+}
+
+void LoaderLogger::RemoveLogRecorder(uint64_t unique_id) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ vector_remove_if_and_erase(
+ _recorders, [=](std::unique_ptr<LoaderLogRecorder> const& recorder) { return recorder->UniqueId() == unique_id; });
+ for (auto& recorders : _recordersByInstance) {
+ auto& messengersForInstance = recorders.second;
+ if (messengersForInstance.count(unique_id) > 0) {
+ messengersForInstance.erase(unique_id);
+ }
+ }
+}
+
+void LoaderLogger::RemoveLogRecordersForXrInstance(XrInstance instance) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ if (_recordersByInstance.find(instance) != _recordersByInstance.end()) {
+ auto recorders = _recordersByInstance[instance];
+ vector_remove_if_and_erase(_recorders, [=](std::unique_ptr<LoaderLogRecorder> const& recorder) {
+ return recorders.find(recorder->UniqueId()) != recorders.end();
+ });
+ _recordersByInstance.erase(instance);
+ }
+}
+
+bool LoaderLogger::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const std::string& message_id, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects) {
+ XrLoaderLogMessengerCallbackData callback_data = {};
+ callback_data.message_id = message_id.c_str();
+ callback_data.command_name = command_name.c_str();
+ callback_data.message = message.c_str();
+
+ auto names_and_labels = data_.PopulateNamesAndLabels(objects);
+ callback_data.objects = names_and_labels.sdk_objects.empty() ? nullptr : names_and_labels.sdk_objects.data();
+ callback_data.object_count = static_cast<uint8_t>(names_and_labels.objects.size());
+
+ callback_data.session_labels = names_and_labels.labels.empty() ? nullptr : names_and_labels.labels.data();
+ callback_data.session_labels_count = static_cast<uint8_t>(names_and_labels.labels.size());
+
+ std::shared_lock<std::shared_timed_mutex> lock(_mutex);
+ bool exit_app = false;
+ for (std::unique_ptr<LoaderLogRecorder>& recorder : _recorders) {
+ if ((recorder->MessageSeverities() & message_severity) == message_severity &&
+ (recorder->MessageTypes() & message_type) == message_type) {
+ exit_app |= recorder->LogMessage(message_severity, message_type, &callback_data);
+ }
+ }
+ return exit_app;
+}
+
+// Extension-specific logging functions
+bool LoaderLogger::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) {
+ bool exit_app = false;
+ XrLoaderLogMessageSeverityFlags log_message_severity = DebugUtilsSeveritiesToLoaderLogMessageSeverities(message_severity);
+ XrLoaderLogMessageTypeFlags log_message_type = DebugUtilsMessageTypesToLoaderLogMessageTypes(message_type);
+
+ AugmentedCallbackData augmented_data;
+ data_.WrapCallbackData(&augmented_data, callback_data);
+
+ // Loop through the recorders
+ std::shared_lock<std::shared_timed_mutex> lock(_mutex);
+ for (std::unique_ptr<LoaderLogRecorder>& recorder : _recorders) {
+ // Only send the message if it's a debug utils recorder and of the type the recorder cares about.
+ if (recorder->Type() != XR_LOADER_LOG_DEBUG_UTILS ||
+ (recorder->MessageSeverities() & log_message_severity) != log_message_severity ||
+ (recorder->MessageTypes() & log_message_type) != log_message_type) {
+ continue;
+ }
+
+ exit_app |= recorder->LogDebugUtilsMessage(message_severity, message_type, augmented_data.exported_data);
+ }
+ return exit_app;
+}
+
+void LoaderLogger::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ data_.AddObjectName(object_handle, object_type, object_name);
+}
+
+void LoaderLogger::BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT* label_info) {
+ data_.BeginLabelRegion(session, *label_info);
+}
+
+void LoaderLogger::EndLabelRegion(XrSession session) { data_.EndLabelRegion(session); }
+
+void LoaderLogger::InsertLabel(XrSession session, const XrDebugUtilsLabelEXT* label_info) {
+ data_.InsertLabel(session, *label_info);
+}
+
+void LoaderLogger::DeleteSessionLabels(XrSession session) { data_.DeleteSessionLabels(session); }
diff --git a/thirdparty/openxr/src/loader/loader_logger.hpp b/thirdparty/openxr/src/loader/loader_logger.hpp
new file mode 100644
index 0000000000..260ebe354a
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger.hpp
@@ -0,0 +1,194 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+#include <set>
+#include <map>
+#include <shared_mutex>
+
+#include <openxr/openxr.h>
+
+#include "hex_and_handles.h"
+#include "object_info.h"
+
+// Use internal versions of flags similar to XR_EXT_debug_utils so that
+// we're not tightly coupled to that extension. This way, if the extension
+// changes or gets replaced, we can be flexible in the loader.
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT 0x00000001
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT 0x00000010
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT 0x00000100
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT 0x00001000
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_DEFAULT_BITS 0x00000000
+typedef XrFlags64 XrLoaderLogMessageSeverityFlagBits;
+typedef XrFlags64 XrLoaderLogMessageSeverityFlags;
+
+#define XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT 0x00000001
+#define XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT 0x00000002
+#define XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT 0x00000004
+#define XR_LOADER_LOG_MESSAGE_TYPE_DEFAULT_BITS 0xffffffff
+typedef XrFlags64 XrLoaderLogMessageTypeFlagBits;
+typedef XrFlags64 XrLoaderLogMessageTypeFlags;
+
+struct XrLoaderLogMessengerCallbackData {
+ const char* message_id;
+ const char* command_name;
+ const char* message;
+ uint8_t object_count;
+ XrSdkLogObjectInfo* objects;
+ uint8_t session_labels_count;
+ XrDebugUtilsLabelEXT* session_labels;
+};
+
+enum XrLoaderLogType {
+ XR_LOADER_LOG_UNKNOWN = 0,
+ XR_LOADER_LOG_STDERR,
+ XR_LOADER_LOG_STDOUT,
+ XR_LOADER_LOG_DEBUG_UTILS,
+ XR_LOADER_LOG_DEBUGGER,
+ XR_LOADER_LOG_LOGCAT,
+};
+
+class LoaderLogRecorder {
+ public:
+ LoaderLogRecorder(XrLoaderLogType type, void* user_data, XrLoaderLogMessageSeverityFlags message_severities,
+ XrLoaderLogMessageTypeFlags message_types) {
+ _active = false;
+ _user_data = user_data;
+ _type = type;
+ _unique_id = 0;
+ _message_severities = message_severities;
+ _message_types = message_types;
+ }
+ virtual ~LoaderLogRecorder() = default;
+
+ XrLoaderLogType Type() { return _type; }
+
+ uint64_t UniqueId() { return _unique_id; }
+
+ XrLoaderLogMessageSeverityFlags MessageSeverities() { return _message_severities; }
+
+ XrLoaderLogMessageTypeFlags MessageTypes() { return _message_types; }
+
+ virtual void Start() { _active = true; }
+
+ bool IsPaused() { return _active; }
+
+ virtual void Pause() { _active = false; }
+
+ virtual void Resume() { _active = true; }
+
+ virtual void Stop() { _active = false; }
+
+ virtual bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) = 0;
+
+ // Extension-specific logging functions - defaults to do nothing.
+ virtual bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data);
+
+ protected:
+ bool _active;
+ XrLoaderLogType _type;
+ uint64_t _unique_id;
+ void* _user_data;
+ XrLoaderLogMessageSeverityFlags _message_severities;
+ XrLoaderLogMessageTypeFlags _message_types;
+};
+
+class LoaderLogger {
+ public:
+ static LoaderLogger& GetInstance() {
+ static LoaderLogger instance;
+ return instance;
+ }
+
+ void AddLogRecorder(std::unique_ptr<LoaderLogRecorder>&& recorder);
+ void RemoveLogRecorder(uint64_t unique_id);
+
+ void AddLogRecorderForXrInstance(XrInstance instance, std::unique_ptr<LoaderLogRecorder>&& recorder);
+ void RemoveLogRecordersForXrInstance(XrInstance instance);
+
+ //! Called from LoaderXrTermSetDebugUtilsObjectNameEXT - an empty name means remove
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+ void BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT* label_info);
+ void EndLabelRegion(XrSession session);
+ void InsertLabel(XrSession session, const XrDebugUtilsLabelEXT* label_info);
+ void DeleteSessionLabels(XrSession session);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const std::string& message_id, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {});
+ static bool LogErrorMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogWarningMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogInfoMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogVerboseMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogValidationErrorMessage(const std::string& vuid, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT, XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT,
+ vuid, command_name, message, objects);
+ }
+ static bool LogValidationWarningMessage(const std::string& vuid, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT, XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT,
+ vuid, command_name, message, objects);
+ }
+
+ // Extension-specific logging functions
+ bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity, XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data);
+
+ // Non-copyable
+ LoaderLogger(const LoaderLogger&) = delete;
+ LoaderLogger& operator=(const LoaderLogger&) = delete;
+
+ private:
+ LoaderLogger();
+
+ std::shared_timed_mutex _mutex;
+
+ // List of *all* available recorder objects (including created specifically for an Instance)
+ std::vector<std::unique_ptr<LoaderLogRecorder>> _recorders;
+
+ // List of recorder objects only created specifically for an XrInstance
+ std::unordered_map<XrInstance, std::unordered_set<uint64_t>> _recordersByInstance;
+
+ DebugUtilsData data_;
+};
+
+// Utility functions for converting to/from XR_EXT_debug_utils values
+XrLoaderLogMessageSeverityFlags DebugUtilsSeveritiesToLoaderLogMessageSeverities(
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities);
+XrDebugUtilsMessageSeverityFlagsEXT LoaderLogMessageSeveritiesToDebugUtilsMessageSeverities(
+ XrLoaderLogMessageSeverityFlags log_severities);
+XrLoaderLogMessageTypeFlagBits DebugUtilsMessageTypesToLoaderLogMessageTypes(XrDebugUtilsMessageTypeFlagsEXT utils_types);
+XrDebugUtilsMessageTypeFlagsEXT LoaderLogMessageTypesToDebugUtilsMessageTypes(XrLoaderLogMessageTypeFlagBits log_types);
diff --git a/thirdparty/openxr/src/loader/loader_logger_recorders.cpp b/thirdparty/openxr/src/loader/loader_logger_recorders.cpp
new file mode 100644
index 0000000000..7673678c60
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger_recorders.cpp
@@ -0,0 +1,291 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "loader_logger_recorders.hpp"
+
+#include "hex_and_handles.h"
+#include "loader_logger.hpp"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <iostream>
+#include <sstream>
+
+#ifdef __ANDROID__
+#include "android/log.h"
+#endif
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+// Anonymous namespace to keep these types private
+namespace {
+void OutputMessageToStream(std::ostream& os, XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type, const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT > message_severity) {
+ os << "Verbose [";
+ } else if (XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT > message_severity) {
+ os << "Info [";
+ } else if (XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT > message_severity) {
+ os << "Warning [";
+ } else {
+ os << "Error [";
+ }
+ switch (message_type) {
+ case XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT:
+ os << "GENERAL";
+ break;
+ case XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT:
+ os << "SPEC";
+ break;
+ case XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT:
+ os << "PERF";
+ break;
+ default:
+ os << "UNKNOWN";
+ break;
+ }
+ os << " | " << callback_data->command_name << " | " << callback_data->message_id << "] : " << callback_data->message
+ << std::endl;
+
+ for (uint32_t obj = 0; obj < callback_data->object_count; ++obj) {
+ os << " Object[" << obj << "] = " << callback_data->objects[obj].ToString();
+ os << std::endl;
+ }
+ for (uint32_t label = 0; label < callback_data->session_labels_count; ++label) {
+ os << " SessionLabel[" << std::to_string(label) << "] = " << callback_data->session_labels[label].labelName;
+ os << std::endl;
+ }
+}
+
+// With std::cerr: Standard Error logger, always on for now
+// With std::cout: Standard Output logger used with XR_LOADER_DEBUG
+class OstreamLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ OstreamLoaderLogRecorder(std::ostream& os, void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+
+ private:
+ std::ostream& os_;
+};
+
+// Debug Utils logger used with XR_EXT_debug_utils
+class DebugUtilsLogRecorder : public LoaderLogRecorder {
+ public:
+ DebugUtilsLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info, XrDebugUtilsMessengerEXT debug_messenger);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+
+ // Extension-specific logging functions
+ bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity, XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) override;
+
+ private:
+ PFN_xrDebugUtilsMessengerCallbackEXT _user_callback;
+};
+#ifdef __ANDROID__
+
+class LogcatLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ LogcatLoaderLogRecorder();
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+};
+#endif
+
+#ifdef _WIN32
+// Output to debugger
+class DebuggerLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ DebuggerLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+};
+#endif
+
+// Unified stdout/stderr logger
+OstreamLoaderLogRecorder::OstreamLoaderLogRecorder(std::ostream& os, void* user_data, XrLoaderLogMessageSeverityFlags flags)
+ : LoaderLogRecorder(XR_LOADER_LOG_STDOUT, user_data, flags, 0xFFFFFFFFUL), os_(os) {
+ // Automatically start
+ Start();
+}
+
+bool OstreamLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ OutputMessageToStream(os_, message_severity, message_type, callback_data);
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+
+// A logger associated with the XR_EXT_debug_utils extension
+
+DebugUtilsLogRecorder::DebugUtilsLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger)
+ : LoaderLogRecorder(XR_LOADER_LOG_DEBUG_UTILS, static_cast<void*>(create_info->userData),
+ DebugUtilsSeveritiesToLoaderLogMessageSeverities(create_info->messageSeverities),
+ DebugUtilsMessageTypesToLoaderLogMessageTypes(create_info->messageTypes)),
+ _user_callback(create_info->userCallback) {
+ // Use the debug messenger value to uniquely identify this logger with that messenger
+ _unique_id = MakeHandleGeneric(debug_messenger);
+ Start();
+}
+
+// Extension-specific logging functions
+bool DebugUtilsLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ bool should_exit = false;
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severity = DebugUtilsSeveritiesToLoaderLogMessageSeverities(message_severity);
+ XrDebugUtilsMessageTypeFlagsEXT utils_type = LoaderLogMessageTypesToDebugUtilsMessageTypes(message_type);
+
+ // Convert the loader log message into the debug utils log message information
+ XrDebugUtilsMessengerCallbackDataEXT utils_callback_data = {};
+ utils_callback_data.type = XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
+ utils_callback_data.messageId = callback_data->message_id;
+ utils_callback_data.functionName = callback_data->command_name;
+ utils_callback_data.message = callback_data->message;
+ std::vector<XrDebugUtilsObjectNameInfoEXT> utils_objects;
+ utils_objects.resize(callback_data->object_count);
+ for (uint8_t object = 0; object < callback_data->object_count; ++object) {
+ utils_objects[object].type = XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
+ utils_objects[object].next = nullptr;
+ utils_objects[object].objectHandle = callback_data->objects[object].handle;
+ utils_objects[object].objectType = callback_data->objects[object].type;
+ utils_objects[object].objectName = callback_data->objects[object].name.c_str();
+ }
+ utils_callback_data.objectCount = callback_data->object_count;
+ utils_callback_data.objects = utils_objects.data();
+ utils_callback_data.sessionLabelCount = callback_data->session_labels_count;
+ utils_callback_data.sessionLabels = callback_data->session_labels;
+
+ // Call the user callback with the appropriate info
+ // Return of "true" means that we should exit the application after the logged message.
+ should_exit = (_user_callback(utils_severity, utils_type, &utils_callback_data, _user_data) == XR_TRUE);
+ }
+
+ return should_exit;
+}
+
+bool DebugUtilsLogRecorder::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) {
+ // Call the user callback with the appropriate info
+ // Return of "true" means that we should exit the application after the logged message.
+ return (_user_callback(message_severity, message_type, callback_data, _user_data) == XR_TRUE);
+}
+
+#ifdef __ANDROID__
+
+static inline android_LogPriority LoaderToAndroidLogPriority(XrLoaderLogMessageSeverityFlags message_severity) {
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT)) {
+ return ANDROID_LOG_ERROR;
+ }
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT)) {
+ return ANDROID_LOG_WARN;
+ }
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT)) {
+ return ANDROID_LOG_INFO;
+ }
+ return ANDROID_LOG_VERBOSE;
+}
+
+LogcatLoaderLogRecorder::LogcatLoaderLogRecorder()
+ : LoaderLogRecorder(XR_LOADER_LOG_LOGCAT, nullptr,
+ XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT,
+ 0xFFFFFFFFUL) {
+ // Automatically start
+ Start();
+}
+
+bool LogcatLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ std::stringstream ss;
+ OutputMessageToStream(ss, message_severity, message_type, callback_data);
+ __android_log_write(LoaderToAndroidLogPriority(message_severity), "OpenXR-Loader", ss.str().c_str());
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+#endif // __ANDROID__
+
+#ifdef _WIN32
+// Unified stdout/stderr logger
+DebuggerLoaderLogRecorder::DebuggerLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags)
+ : LoaderLogRecorder(XR_LOADER_LOG_DEBUGGER, user_data, flags, 0xFFFFFFFFUL) {
+ // Automatically start
+ Start();
+}
+
+bool DebuggerLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ std::stringstream ss;
+ OutputMessageToStream(ss, message_severity, message_type, callback_data);
+
+ OutputDebugStringA(ss.str().c_str());
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+#endif
+} // namespace
+
+std::unique_ptr<LoaderLogRecorder> MakeStdOutLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new OstreamLoaderLogRecorder(std::cout, user_data, flags));
+ return recorder;
+}
+
+std::unique_ptr<LoaderLogRecorder> MakeStdErrLoaderLogRecorder(void* user_data) {
+ std::unique_ptr<LoaderLogRecorder> recorder(
+ new OstreamLoaderLogRecorder(std::cerr, user_data, XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT));
+ return recorder;
+}
+
+std::unique_ptr<LoaderLogRecorder> MakeDebugUtilsLoaderLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new DebugUtilsLogRecorder(create_info, debug_messenger));
+ return recorder;
+}
+
+#ifdef __ANDROID__
+std::unique_ptr<LoaderLogRecorder> MakeLogcatLoaderLogRecorder() {
+ std::unique_ptr<LoaderLogRecorder> recorder(new LogcatLoaderLogRecorder());
+ return recorder;
+}
+#endif
+
+#ifdef _WIN32
+std::unique_ptr<LoaderLogRecorder> MakeDebuggerLoaderLogRecorder(void* user_data) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new DebuggerLoaderLogRecorder(user_data, XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT));
+ return recorder;
+}
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_logger_recorders.hpp b/thirdparty/openxr/src/loader/loader_logger_recorders.hpp
new file mode 100644
index 0000000000..31e5243c45
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger_recorders.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+#pragma once
+
+#include "loader_logger.hpp"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+
+//! Standard Error logger, on by default. Disabled with environment variable XR_LOADER_DEBUG = "none".
+std::unique_ptr<LoaderLogRecorder> MakeStdErrLoaderLogRecorder(void* user_data);
+
+//! Standard Output logger used with XR_LOADER_DEBUG environment variable.
+std::unique_ptr<LoaderLogRecorder> MakeStdOutLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+#ifdef __ANDROID__
+//! Android liblog ("logcat") logger
+std::unique_ptr<LoaderLogRecorder> MakeLogcatLoaderLogRecorder();
+#endif
+
+// Debug Utils logger used with XR_EXT_debug_utils
+std::unique_ptr<LoaderLogRecorder> MakeDebugUtilsLoaderLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger);
+
+#ifdef _WIN32
+//! Win32 debugger output
+std::unique_ptr<LoaderLogRecorder> MakeDebuggerLoaderLogRecorder(void* user_data);
+#endif
+
+// TODO: Add other Derived classes:
+// - FileLoaderLogRecorder - During/after xrCreateInstance
+// - PipeLoaderLogRecorder? - During/after xrCreateInstance
diff --git a/thirdparty/openxr/src/loader/loader_platform.hpp b/thirdparty/openxr/src/loader/loader_platform.hpp
new file mode 100644
index 0000000000..e2757fffb9
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_platform.hpp
@@ -0,0 +1,204 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#pragma once
+
+#include <cassert>
+#include <sstream>
+#include <string>
+
+#include "xr_dependencies.h"
+#include "platform_utils.hpp"
+
+#if defined(__GNUC__) && __GNUC__ >= 4
+#define LOADER_EXPORT __attribute__((visibility("default")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#define LOADER_EXPORT __attribute__((visibility("default")))
+#else
+#define LOADER_EXPORT
+#endif
+
+// Environment variables
+#if defined(XR_OS_LINUX) || defined(XR_OS_APPLE) || defined(XR_OS_ANDROID)
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <dirent.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+
+// Dynamic Loading of libraries:
+typedef void *LoaderPlatformLibraryHandle;
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+ // When loading the library, we use RTLD_LAZY so that not all symbols have to be
+ // resolved at this time (which improves performance). Note that if not all symbols
+ // can be resolved, this could cause crashes later.
+ // For experimenting/debugging: Define the LD_BIND_NOW environment variable to force all
+ // symbols to be resolved here.
+ return dlopen(path.c_str(), RTLD_LAZY | RTLD_LOCAL);
+}
+
+static inline const char *LoaderPlatformLibraryOpenError(const std::string &path) {
+ (void)path;
+ return dlerror();
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) { dlclose(library); }
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ assert(library);
+ assert(!name.empty());
+ return dlsym(library, name.c_str());
+}
+
+static inline const char *LoaderPlatformLibraryGetProcAddrError(const std::string &name) {
+ (void)name;
+ return dlerror();
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+#define PATH_SEPARATOR ';'
+#define DIRECTORY_SYMBOL '\\'
+
+// Workaround for MS VS 2010/2013 missing snprintf and vsnprintf
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#include <stdint.h>
+
+static inline int32_t xr_vsnprintf(char *result_buffer, size_t buffer_size, const char *print_format, va_list varying_list) {
+ int32_t copy_count = -1;
+ if (buffer_size != 0) {
+ copy_count = _vsnprintf_s(result_buffer, buffer_size, _TRUNCATE, print_format, varying_list);
+ }
+ if (copy_count == -1) {
+ copy_count = _vscprintf(print_format, varying_list);
+ }
+ return copy_count;
+}
+
+static inline int32_t xr_snprintf(char *result_buffer, size_t buffer_size, const char *print_format, ...) {
+ va_list varying_list;
+ va_start(varying_list, print_format);
+ int32_t copy_count = xr_vsnprintf(result_buffer, buffer_size, print_format, varying_list);
+ va_end(varying_list);
+ return copy_count;
+}
+
+#define snprintf xr_snprintf
+#define vsnprintf xr_vsnprintf
+
+#endif
+
+static inline std::string DescribeError(uint32_t code, bool prefixErrorCode = true) {
+ std::string str;
+
+ if (prefixErrorCode) {
+ char prefixBuffer[64];
+ snprintf(prefixBuffer, sizeof(prefixBuffer), "0x%llx (%lld): ", (uint64_t)code, (int64_t)code);
+ str = prefixBuffer;
+ }
+
+ // Could use FORMAT_MESSAGE_FROM_HMODULE to specify an error source.
+ WCHAR errorBufferW[1024]{};
+ const DWORD errorBufferWCapacity = sizeof(errorBufferW) / sizeof(errorBufferW[0]);
+ const DWORD length = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, (DWORD)code,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), errorBufferW, errorBufferWCapacity, nullptr);
+
+ if (length) { // If errorBufferW contains what we are looking for...
+ str += wide_to_utf8(errorBufferW);
+ } else {
+ str = "(unknown)";
+ }
+
+ return str;
+}
+
+// Dynamic Loading:
+typedef HMODULE LoaderPlatformLibraryHandle;
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+ const std::wstring pathW = utf8_to_wide(path);
+
+ // Try loading the library the original way first.
+ LoaderPlatformLibraryHandle handle = LoadLibraryW(pathW.c_str());
+
+ if (handle == NULL && GetLastError() == ERROR_MOD_NOT_FOUND) {
+ const DWORD dwAttrib = GetFileAttributesW(pathW.c_str());
+ const bool fileExists = (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
+ if (fileExists) {
+ // If that failed, then try loading it with broader search folders.
+ handle = LoadLibraryExW(pathW.c_str(), NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
+ }
+ }
+
+ return handle;
+}
+
+static inline std::string LoaderPlatformLibraryOpenError(const std::string &path) {
+ std::stringstream ss;
+ const DWORD dwLastError = GetLastError();
+ const std::string strError = DescribeError(dwLastError);
+ ss << "Failed to open dynamic library " << path << " with error " << dwLastError << ": " << strError;
+ return ss.str();
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) { FreeLibrary(library); }
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ assert(library);
+ assert(name.size() > 0);
+ return reinterpret_cast<void *>(GetProcAddress(library, name.c_str()));
+}
+
+static inline std::string LoaderPlatformLibraryGetProcAddrAddrError(const std::string &name) {
+ std::stringstream ss;
+ ss << "Failed to find function " << name << " in dynamic library";
+ return ss.str();
+}
+
+#else // Not Linux or Windows
+
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+// Stub func
+#error("Unknown platform, undefined dynamic library routines resulting");
+ (void)path;
+}
+
+static inline const char *LoaderPlatformLibraryOpenError(const std::string &path) {
+ // Stub func
+ (void)path;
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) {
+ // Stub func
+ (void)library;
+}
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ // Stub func
+ void(library);
+ void(name);
+}
+
+static inline const char *LoaderPlatformLibraryGetProcAddrError(const std::string &name) {
+ // Stub func
+ (void)name;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/loader/manifest_file.cpp b/thirdparty/openxr/src/loader/manifest_file.cpp
new file mode 100644
index 0000000000..e4eab3949e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/manifest_file.cpp
@@ -0,0 +1,845 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "manifest_file.hpp"
+
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+#include "filesystem_utils.hpp"
+#include "loader_platform.hpp"
+#include "platform_utils.hpp"
+#include "loader_logger.hpp"
+
+#include <json/json.h>
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <cstring>
+#include <fstream>
+#include <memory>
+#include <sstream>
+#include <stdexcept>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#ifndef FALLBACK_CONFIG_DIRS
+#define FALLBACK_CONFIG_DIRS "/etc/xdg"
+#endif // !FALLBACK_CONFIG_DIRS
+
+#ifndef FALLBACK_DATA_DIRS
+#define FALLBACK_DATA_DIRS "/usr/local/share:/usr/share"
+#endif // !FALLBACK_DATA_DIRS
+
+#ifndef SYSCONFDIR
+#define SYSCONFDIR "/etc"
+#endif // !SYSCONFDIR
+
+#ifdef XRLOADER_DISABLE_EXCEPTION_HANDLING
+#if JSON_USE_EXCEPTIONS
+#error \
+ "Loader is configured to not catch exceptions, but jsoncpp was built with exception-throwing enabled, which could violate the C ABI. One of those two things needs to change."
+#endif // JSON_USE_EXCEPTIONS
+#endif // !XRLOADER_DISABLE_EXCEPTION_HANDLING
+
+#include "runtime_interface.hpp"
+
+// Utility functions for finding files in the appropriate paths
+
+static inline bool StringEndsWith(const std::string &value, const std::string &ending) {
+ if (ending.size() > value.size()) {
+ return false;
+ }
+ return std::equal(ending.rbegin(), ending.rend(), value.rbegin());
+}
+
+// If the file found is a manifest file name, add it to the out_files manifest list.
+static void AddIfJson(const std::string &full_file, std::vector<std::string> &manifest_files) {
+ if (full_file.empty() || !StringEndsWith(full_file, ".json")) {
+ return;
+ }
+ manifest_files.push_back(full_file);
+}
+
+// Check the current path for any manifest files. If the provided search_path is a directory, look for
+// all included JSON files in that directory. Otherwise, just check the provided search_path which should
+// be a single filename.
+static void CheckAllFilesInThePath(const std::string &search_path, bool is_directory_list,
+ std::vector<std::string> &manifest_files) {
+ if (FileSysUtilsPathExists(search_path)) {
+ std::string absolute_path;
+ if (!is_directory_list) {
+ // If the file exists, try to add it
+ if (FileSysUtilsIsRegularFile(search_path)) {
+ FileSysUtilsGetAbsolutePath(search_path, absolute_path);
+ AddIfJson(absolute_path, manifest_files);
+ }
+ } else {
+ std::vector<std::string> files;
+ if (FileSysUtilsFindFilesInPath(search_path, files)) {
+ for (std::string &cur_file : files) {
+ std::string relative_path;
+ FileSysUtilsCombinePaths(search_path, cur_file, relative_path);
+ if (!FileSysUtilsGetAbsolutePath(relative_path, absolute_path)) {
+ continue;
+ }
+ AddIfJson(absolute_path, manifest_files);
+ }
+ }
+ }
+ }
+}
+
+// Add all manifest files in the provided paths to the manifest_files list. If search_path
+// is made up of directory listings (versus direct manifest file names) search each path for
+// any manifest files.
+static void AddFilesInPath(const std::string &search_path, bool is_directory_list, std::vector<std::string> &manifest_files) {
+ std::size_t last_found = 0;
+ std::size_t found = search_path.find_first_of(PATH_SEPARATOR);
+ std::string cur_search;
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ // substr takes a start index and length.
+ std::size_t length = found - last_found;
+ cur_search = search_path.substr(last_found, length);
+
+ CheckAllFilesInThePath(cur_search, is_directory_list, manifest_files);
+
+ // This works around issue if multiple path separator follow each other directly.
+ last_found = found;
+ while (found == last_found) {
+ last_found = found + 1;
+ found = search_path.find_first_of(PATH_SEPARATOR, last_found);
+ }
+ }
+
+ // If there's something remaining in the string, copy it over
+ if (last_found < search_path.size()) {
+ cur_search = search_path.substr(last_found);
+ CheckAllFilesInThePath(cur_search, is_directory_list, manifest_files);
+ }
+}
+
+// Copy all paths listed in the cur_path string into output_path and append the appropriate relative_path onto the end of each.
+static void CopyIncludedPaths(bool is_directory_list, const std::string &cur_path, const std::string &relative_path,
+ std::string &output_path) {
+ if (!cur_path.empty()) {
+ std::size_t last_found = 0;
+ std::size_t found = cur_path.find_first_of(PATH_SEPARATOR);
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ std::size_t length = found - last_found;
+ output_path += cur_path.substr(last_found, length);
+ if (is_directory_list && (cur_path[found - 1] != '\\' && cur_path[found - 1] != '/')) {
+ output_path += DIRECTORY_SYMBOL;
+ }
+ output_path += relative_path;
+ output_path += PATH_SEPARATOR;
+
+ last_found = found;
+ found = cur_path.find_first_of(PATH_SEPARATOR, found + 1);
+ }
+
+ // If there's something remaining in the string, copy it over
+ size_t last_char = cur_path.size() - 1;
+ if (last_found != last_char) {
+ output_path += cur_path.substr(last_found);
+ if (is_directory_list && (cur_path[last_char] != '\\' && cur_path[last_char] != '/')) {
+ output_path += DIRECTORY_SYMBOL;
+ }
+ output_path += relative_path;
+ output_path += PATH_SEPARATOR;
+ }
+ }
+}
+
+// Look for data files in the provided paths, but first check the environment override to determine if we should use that instead.
+static void ReadDataFilesInSearchPaths(const std::string &override_env_var, const std::string &relative_path, bool &override_active,
+ std::vector<std::string> &manifest_files) {
+ std::string override_path;
+ std::string search_path;
+
+ if (!override_env_var.empty()) {
+ bool permit_override = true;
+#ifndef XR_OS_WINDOWS
+ if (geteuid() != getuid() || getegid() != getgid()) {
+ // Don't allow setuid apps to use the env var
+ permit_override = false;
+ }
+#endif
+ if (permit_override) {
+ override_path = PlatformUtilsGetSecureEnv(override_env_var.c_str());
+ }
+ }
+
+ if (!override_path.empty()) {
+ CopyIncludedPaths(true, override_path, "", search_path);
+ override_active = true;
+ } else {
+ override_active = false;
+#if !defined(XR_OS_WINDOWS) && !defined(XR_OS_ANDROID)
+ const char home_additional[] = ".local/share/";
+
+ // Determine how much space is needed to generate the full search path
+ // for the current manifest files.
+ std::string xdg_conf_dirs = PlatformUtilsGetSecureEnv("XDG_CONFIG_DIRS");
+ std::string xdg_data_dirs = PlatformUtilsGetSecureEnv("XDG_DATA_DIRS");
+ std::string xdg_data_home = PlatformUtilsGetSecureEnv("XDG_DATA_HOME");
+ std::string home = PlatformUtilsGetSecureEnv("HOME");
+
+ if (xdg_conf_dirs.empty()) {
+ CopyIncludedPaths(true, FALLBACK_CONFIG_DIRS, relative_path, search_path);
+ } else {
+ CopyIncludedPaths(true, xdg_conf_dirs, relative_path, search_path);
+ }
+
+ CopyIncludedPaths(true, SYSCONFDIR, relative_path, search_path);
+#if defined(EXTRASYSCONFDIR)
+ CopyIncludedPaths(true, EXTRASYSCONFDIR, relative_path, search_path);
+#endif
+
+ if (xdg_data_dirs.empty()) {
+ CopyIncludedPaths(true, FALLBACK_DATA_DIRS, relative_path, search_path);
+ } else {
+ CopyIncludedPaths(true, xdg_data_dirs, relative_path, search_path);
+ }
+
+ if (!xdg_data_home.empty()) {
+ CopyIncludedPaths(true, xdg_data_home, relative_path, search_path);
+ } else if (!home.empty()) {
+ std::string relative_home_path = home_additional;
+ relative_home_path += relative_path;
+ CopyIncludedPaths(true, home, relative_home_path, search_path);
+ }
+#else
+ (void)relative_path;
+#endif
+ }
+
+ // Now, parse the paths and add any manifest files found in them.
+ AddFilesInPath(search_path, true, manifest_files);
+}
+
+#ifdef XR_OS_LINUX
+
+// Get an XDG environment variable with a $HOME-relative default
+static std::string GetXDGEnvHome(const char *name, const char *fallback_path) {
+ std::string result = PlatformUtilsGetSecureEnv(name);
+ if (!result.empty()) {
+ return result;
+ }
+ result = PlatformUtilsGetSecureEnv("HOME");
+ if (result.empty()) {
+ return result;
+ }
+ result += "/";
+ result += fallback_path;
+ return result;
+}
+
+// Get an XDG environment variable with absolute defaults
+static std::string GetXDGEnvAbsolute(const char *name, const char *fallback_paths) {
+ std::string result = PlatformUtilsGetSecureEnv(name);
+ if (!result.empty()) {
+ return result;
+ }
+ return fallback_paths;
+}
+
+// Return the first instance of relative_path occurring in an XDG config dir according to standard
+// precedence order.
+static bool FindXDGConfigFile(const std::string &relative_path, std::string &out) {
+ out = GetXDGEnvHome("XDG_CONFIG_HOME", ".config");
+ if (!out.empty()) {
+ out += "/";
+ out += relative_path;
+
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in XDG_CONFIG_HOME: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+ }
+
+ std::istringstream iss(GetXDGEnvAbsolute("XDG_CONFIG_DIRS", FALLBACK_CONFIG_DIRS));
+ std::string path;
+ while (std::getline(iss, path, PATH_SEPARATOR)) {
+ if (path.empty()) {
+ continue;
+ }
+ out = path;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in an entry of XDG_CONFIG_DIRS: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+ }
+
+ out = SYSCONFDIR;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in compiled-in SYSCONFDIR: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+
+#if defined(EXTRASYSCONFDIR)
+ out = EXTRASYSCONFDIR;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in compiled-in EXTRASYSCONFDIR: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+#endif
+
+ out.clear();
+ return false;
+}
+
+#endif
+
+#ifdef XR_OS_WINDOWS
+
+// Look for runtime data files in the provided paths, but first check the environment override to determine
+// if we should use that instead.
+static void ReadRuntimeDataFilesInRegistry(const std::string &runtime_registry_location,
+ const std::string &default_runtime_value_name,
+ std::vector<std::string> &manifest_files) {
+ HKEY hkey;
+ DWORD access_flags;
+ wchar_t value_w[1024];
+ DWORD value_size_w = sizeof(value_w); // byte size of the buffer.
+
+ // Generate the full registry location for the registry information
+ std::string full_registry_location = OPENXR_REGISTRY_LOCATION;
+ full_registry_location += std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION));
+ full_registry_location += runtime_registry_location;
+
+ const std::wstring full_registry_location_w = utf8_to_wide(full_registry_location);
+ const std::wstring default_runtime_value_name_w = utf8_to_wide(default_runtime_value_name);
+
+ // Use 64 bit regkey for 64bit application, and use 32 bit regkey in WOW for 32bit application.
+ access_flags = KEY_QUERY_VALUE;
+ LONG open_value = RegOpenKeyExW(HKEY_LOCAL_MACHINE, full_registry_location_w.c_str(), 0, access_flags, &hkey);
+
+ if (ERROR_SUCCESS != open_value) {
+ LoaderLogger::LogWarningMessage("",
+ "ReadRuntimeDataFilesInRegistry - failed to open registry key " + full_registry_location);
+ } else if (ERROR_SUCCESS != RegGetValueW(hkey, nullptr, default_runtime_value_name_w.c_str(),
+ RRF_RT_REG_SZ | REG_EXPAND_SZ | RRF_ZEROONFAILURE, NULL,
+ reinterpret_cast<LPBYTE>(&value_w), &value_size_w)) {
+ LoaderLogger::LogWarningMessage(
+ "", "ReadRuntimeDataFilesInRegistry - failed to read registry value " + default_runtime_value_name);
+ } else {
+ AddFilesInPath(wide_to_utf8(value_w), false, manifest_files);
+ }
+}
+
+// Look for layer data files in the provided paths, but first check the environment override to determine
+// if we should use that instead.
+static void ReadLayerDataFilesInRegistry(const std::string &registry_location, std::vector<std::string> &manifest_files) {
+ const std::wstring full_registry_location_w =
+ utf8_to_wide(OPENXR_REGISTRY_LOCATION + std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) + registry_location);
+
+ auto ReadLayerDataFilesInHive = [&](HKEY hive) {
+ HKEY hkey;
+ LONG open_value = RegOpenKeyExW(hive, full_registry_location_w.c_str(), 0, KEY_QUERY_VALUE, &hkey);
+ if (ERROR_SUCCESS != open_value) {
+ return false;
+ }
+
+ wchar_t name_w[1024]{};
+ LONG rtn_value;
+ DWORD name_size = 1023;
+ DWORD value;
+ DWORD value_size = sizeof(value);
+ DWORD key_index = 0;
+ while (ERROR_SUCCESS ==
+ (rtn_value = RegEnumValueW(hkey, key_index++, name_w, &name_size, NULL, NULL, (LPBYTE)&value, &value_size))) {
+ if (value_size == sizeof(value) && value == 0) {
+ const std::string filename = wide_to_utf8(name_w);
+ AddFilesInPath(filename, false, manifest_files);
+ }
+ // Reset some items for the next loop
+ name_size = 1023;
+ }
+
+ RegCloseKey(hkey);
+
+ return true;
+ };
+
+ // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes.
+ const bool readFromCurrentUser = !IsHighIntegrityLevel();
+
+ bool found = ReadLayerDataFilesInHive(HKEY_LOCAL_MACHINE);
+ if (readFromCurrentUser) {
+ found |= ReadLayerDataFilesInHive(HKEY_CURRENT_USER);
+ }
+
+ if (!found) {
+ std::string warning_message = "ReadLayerDataFilesInRegistry - failed to read registry location ";
+ warning_message += registry_location;
+ warning_message += (readFromCurrentUser ? " in either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER" : " in HKEY_LOCAL_MACHINE");
+ LoaderLogger::LogWarningMessage("", warning_message);
+ }
+}
+
+#endif // XR_OS_WINDOWS
+
+ManifestFile::ManifestFile(ManifestFileType type, const std::string &filename, const std::string &library_path)
+ : _filename(filename), _type(type), _library_path(library_path) {}
+
+bool ManifestFile::IsValidJson(const Json::Value &root_node, JsonVersion &version) {
+ if (root_node["file_format_version"].isNull() || !root_node["file_format_version"].isString()) {
+ LoaderLogger::LogErrorMessage("", "ManifestFile::IsValidJson - JSON file missing \"file_format_version\"");
+ return false;
+ }
+ std::string file_format = root_node["file_format_version"].asString();
+ const int num_fields = sscanf(file_format.c_str(), "%u.%u.%u", &version.major, &version.minor, &version.patch);
+
+ // Only version 1.0.0 is defined currently. Eventually we may have more version, but
+ // some of the versions may only be valid for layers or runtimes specifically.
+ if (num_fields != 3 || version.major != 1 || version.minor != 0 || version.patch != 0) {
+ std::ostringstream error_ss;
+ error_ss << "ManifestFile::IsValidJson - JSON \"file_format_version\" " << version.major << "." << version.minor << "."
+ << version.patch << " is not supported";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return false;
+ }
+
+ return true;
+}
+
+static void GetExtensionProperties(const std::vector<ExtensionListing> &extensions, std::vector<XrExtensionProperties> &props) {
+ for (const auto &ext : extensions) {
+ auto it =
+ std::find_if(props.begin(), props.end(), [&](XrExtensionProperties &prop) { return prop.extensionName == ext.name; });
+ if (it != props.end()) {
+ it->extensionVersion = std::max(it->extensionVersion, ext.extension_version);
+ } else {
+ XrExtensionProperties prop = {};
+ prop.type = XR_TYPE_EXTENSION_PROPERTIES;
+ prop.next = nullptr;
+ strncpy(prop.extensionName, ext.name.c_str(), XR_MAX_EXTENSION_NAME_SIZE - 1);
+ prop.extensionName[XR_MAX_EXTENSION_NAME_SIZE - 1] = '\0';
+ prop.extensionVersion = ext.extension_version;
+ props.push_back(prop);
+ }
+ }
+}
+
+// Return any instance extensions found in the manifest files in the proper form for
+// OpenXR (XrExtensionProperties).
+void ManifestFile::GetInstanceExtensionProperties(std::vector<XrExtensionProperties> &props) {
+ GetExtensionProperties(_instance_extensions, props);
+}
+
+const std::string &ManifestFile::GetFunctionName(const std::string &func_name) const {
+ if (!_functions_renamed.empty()) {
+ auto found = _functions_renamed.find(func_name);
+ if (found != _functions_renamed.end()) {
+ return found->second;
+ }
+ }
+ return func_name;
+}
+
+RuntimeManifestFile::RuntimeManifestFile(const std::string &filename, const std::string &library_path)
+ : ManifestFile(MANIFEST_TYPE_RUNTIME, filename, library_path) {}
+
+static void ParseExtension(Json::Value const &ext, std::vector<ExtensionListing> &extensions) {
+ Json::Value ext_name = ext["name"];
+ Json::Value ext_version = ext["extension_version"];
+
+ // Allow "extension_version" as a String or a UInt to maintain backwards compatibility, even though it should be a String.
+ // Internal Issue 1411: https://gitlab.khronos.org/openxr/openxr/-/issues/1411
+ // Internal MR !1867: https://gitlab.khronos.org/openxr/openxr/-/merge_requests/1867
+ if (ext_name.isString() && (ext_version.isString() || ext_version.isUInt())) {
+ ExtensionListing ext_listing = {};
+ ext_listing.name = ext_name.asString();
+ if (ext_version.isUInt()) {
+ ext_listing.extension_version = ext_version.asUInt();
+ } else {
+ ext_listing.extension_version = atoi(ext_version.asString().c_str());
+ }
+ extensions.push_back(ext_listing);
+ }
+}
+
+void ManifestFile::ParseCommon(Json::Value const &root_node) {
+ const Json::Value &inst_exts = root_node["instance_extensions"];
+ if (!inst_exts.isNull() && inst_exts.isArray()) {
+ for (const auto &ext : inst_exts) {
+ ParseExtension(ext, _instance_extensions);
+ }
+ }
+ const Json::Value &funcs_renamed = root_node["functions"];
+ if (!funcs_renamed.isNull() && !funcs_renamed.empty()) {
+ for (Json::ValueConstIterator func_it = funcs_renamed.begin(); func_it != funcs_renamed.end(); ++func_it) {
+ if (!(*func_it).isString()) {
+ LoaderLogger::LogWarningMessage(
+ "", "ManifestFile::ParseCommon " + _filename + " \"functions\" section contains non-string values.");
+ continue;
+ }
+ std::string original_name = func_it.key().asString();
+ std::string new_name = (*func_it).asString();
+ _functions_renamed.emplace(original_name, new_name);
+ }
+ }
+}
+
+void RuntimeManifestFile::CreateIfValid(std::string const &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ std::ifstream json_stream(filename, std::ifstream::in);
+
+ LoaderLogger::LogInfoMessage("", "RuntimeManifestFile::CreateIfValid - attempting to load " + filename);
+ std::ostringstream error_ss("RuntimeManifestFile::CreateIfValid ");
+ if (!json_stream.is_open()) {
+ error_ss << "failed to open " << filename << ". Does it exist?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ Json::CharReaderBuilder builder;
+ std::string errors;
+ Json::Value root_node = Json::nullValue;
+ if (!Json::parseFromStream(builder, json_stream, &root_node, &errors) || !root_node.isObject()) {
+ error_ss << "failed to parse " << filename << ".";
+ if (!errors.empty()) {
+ error_ss << " (Error message: " << errors << ")";
+ }
+ error_ss << " Is it a valid runtime manifest file?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ CreateIfValid(root_node, filename, manifest_files);
+}
+
+void RuntimeManifestFile::CreateIfValid(const Json::Value &root_node, const std::string &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ std::ostringstream error_ss("RuntimeManifestFile::CreateIfValid ");
+ JsonVersion file_version = {};
+ if (!ManifestFile::IsValidJson(root_node, file_version)) {
+ error_ss << "isValidJson indicates " << filename << " is not a valid manifest file.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ const Json::Value &runtime_root_node = root_node["runtime"];
+ // The Runtime manifest file needs the "runtime" root as well as a sub-node for "library_path". If any of those aren't there,
+ // fail.
+ if (runtime_root_node.isNull() || runtime_root_node["library_path"].isNull() || !runtime_root_node["library_path"].isString()) {
+ error_ss << filename << " is missing required fields. Verify all proper fields exist.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ std::string lib_path = runtime_root_node["library_path"].asString();
+
+ // If the library_path variable has no directory symbol, it's just a file name and should be accessible on the
+ // global library path.
+ if (lib_path.find('\\') != std::string::npos || lib_path.find('/') != std::string::npos) {
+ // If the library_path is an absolute path, just use that if it exists
+ if (FileSysUtilsIsAbsolutePath(lib_path)) {
+ if (!FileSysUtilsPathExists(lib_path)) {
+ error_ss << filename << " library " << lib_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ } else {
+ // Otherwise, treat the library path as a relative path based on the JSON file.
+ std::string canonical_path;
+ std::string combined_path;
+ std::string file_parent;
+ // Search relative to the real manifest file, not relative to the symlink
+ if (!FileSysUtilsGetCanonicalPath(filename, canonical_path)) {
+ // Give relative to the non-canonical path a chance
+ canonical_path = filename;
+ }
+ if (!FileSysUtilsGetParentPath(canonical_path, file_parent) ||
+ !FileSysUtilsCombinePaths(file_parent, lib_path, combined_path) || !FileSysUtilsPathExists(combined_path)) {
+ error_ss << filename << " library " << combined_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ lib_path = combined_path;
+ }
+ }
+
+ // Add this runtime manifest file
+ manifest_files.emplace_back(new RuntimeManifestFile(filename, lib_path));
+
+ // Add any extensions to it after the fact.
+ // Handle any renamed functions
+ manifest_files.back()->ParseCommon(runtime_root_node);
+}
+
+// Find all manifest files in the appropriate search paths/registries for the given type.
+XrResult RuntimeManifestFile::FindManifestFiles(std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ XrResult result = XR_SUCCESS;
+ std::string filename = PlatformUtilsGetSecureEnv(OPENXR_RUNTIME_JSON_ENV_VAR);
+ if (!filename.empty()) {
+ LoaderLogger::LogInfoMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - using environment variable override runtime file " + filename);
+ } else {
+#ifdef XR_OS_WINDOWS
+ std::vector<std::string> filenames;
+ ReadRuntimeDataFilesInRegistry("", "ActiveRuntime", filenames);
+ if (filenames.size() == 0) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to find active runtime file in registry");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+ if (filenames.size() > 1) {
+ LoaderLogger::LogWarningMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - found too many default runtime files in registry");
+ }
+ filename = filenames[0];
+ LoaderLogger::LogInfoMessage("",
+ "RuntimeManifestFile::FindManifestFiles - using registry-specified runtime file " + filename);
+#elif defined(XR_OS_LINUX)
+ const std::string relative_path =
+ "openxr/" + std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) + "/active_runtime.json";
+ if (!FindXDGConfigFile(relative_path, filename)) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to determine active runtime file path for this environment");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+#else
+
+#if defined(XR_KHR_LOADER_INIT_SUPPORT)
+ Json::Value virtualManifest;
+ result = GetPlatformRuntimeVirtualManifest(virtualManifest);
+ if (XR_SUCCESS == result) {
+ RuntimeManifestFile::CreateIfValid(virtualManifest, "", manifest_files);
+ return result;
+ }
+#endif // defined(XR_KHR_LOADER_INIT_SUPPORT)
+ if (!PlatformGetGlobalRuntimeFileName(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), filename)) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to determine active runtime file path for this environment");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+ result = XR_SUCCESS;
+ LoaderLogger::LogInfoMessage("", "RuntimeManifestFile::FindManifestFiles - using global runtime file " + filename);
+#endif
+ }
+ RuntimeManifestFile::CreateIfValid(filename, manifest_files);
+
+ return result;
+}
+
+ApiLayerManifestFile::ApiLayerManifestFile(ManifestFileType type, const std::string &filename, const std::string &layer_name,
+ const std::string &description, const JsonVersion &api_version,
+ const uint32_t &implementation_version, const std::string &library_path)
+ : ManifestFile(type, filename, library_path),
+ _api_version(api_version),
+ _layer_name(layer_name),
+ _description(description),
+ _implementation_version(implementation_version) {}
+
+void ApiLayerManifestFile::CreateIfValid(ManifestFileType type, const std::string &filename,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files) {
+ std::ifstream json_stream(filename, std::ifstream::in);
+
+ std::ostringstream error_ss("ApiLayerManifestFile::CreateIfValid ");
+ if (!json_stream.is_open()) {
+ error_ss << "failed to open " << filename << ". Does it exist?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ Json::CharReaderBuilder builder;
+ std::string errors;
+ Json::Value root_node = Json::nullValue;
+ if (!Json::parseFromStream(builder, json_stream, &root_node, &errors) || !root_node.isObject()) {
+ error_ss << "failed to parse " << filename << ".";
+ if (!errors.empty()) {
+ error_ss << " (Error message: " << errors << ")";
+ }
+ error_ss << " Is it a valid layer manifest file?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ JsonVersion file_version = {};
+ if (!ManifestFile::IsValidJson(root_node, file_version)) {
+ error_ss << "isValidJson indicates " << filename << " is not a valid manifest file.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ Json::Value layer_root_node = root_node["api_layer"];
+
+ // The API Layer manifest file needs the "api_layer" root as well as other sub-nodes.
+ // If any of those aren't there, fail.
+ if (layer_root_node.isNull() || layer_root_node["name"].isNull() || !layer_root_node["name"].isString() ||
+ layer_root_node["api_version"].isNull() || !layer_root_node["api_version"].isString() ||
+ layer_root_node["library_path"].isNull() || !layer_root_node["library_path"].isString() ||
+ layer_root_node["implementation_version"].isNull() || !layer_root_node["implementation_version"].isString()) {
+ error_ss << filename << " is missing required fields. Verify all proper fields exist.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ if (MANIFEST_TYPE_IMPLICIT_API_LAYER == type) {
+ bool enabled = true;
+ // Implicit layers require the disable environment variable.
+ if (layer_root_node["disable_environment"].isNull() || !layer_root_node["disable_environment"].isString()) {
+ error_ss << "Implicit layer " << filename << " is missing \"disable_environment\"";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ // Check if there's an enable environment variable provided
+ if (!layer_root_node["enable_environment"].isNull() && layer_root_node["enable_environment"].isString()) {
+ std::string env_var = layer_root_node["enable_environment"].asString();
+ // If it's not set in the environment, disable the layer
+ if (!PlatformUtilsGetEnvSet(env_var.c_str())) {
+ enabled = false;
+ }
+ }
+ // Check for the disable environment variable, which must be provided in the JSON
+ std::string env_var = layer_root_node["disable_environment"].asString();
+ // If the env var is set, disable the layer. Disable env var overrides enable above
+ if (PlatformUtilsGetEnvSet(env_var.c_str())) {
+ enabled = false;
+ }
+
+ // Not enabled, so pretend like it isn't even there.
+ if (!enabled) {
+ error_ss << "Implicit layer " << filename << " is disabled";
+ LoaderLogger::LogInfoMessage("", error_ss.str());
+ return;
+ }
+ }
+ std::string layer_name = layer_root_node["name"].asString();
+ std::string api_version_string = layer_root_node["api_version"].asString();
+ JsonVersion api_version = {};
+ const int num_fields = sscanf(api_version_string.c_str(), "%u.%u", &api_version.major, &api_version.minor);
+ api_version.patch = 0;
+
+ if ((num_fields != 2) || (api_version.major == 0 && api_version.minor == 0) ||
+ api_version.major > XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) {
+ error_ss << "layer " << filename << " has invalid API Version. Skipping layer.";
+ LoaderLogger::LogWarningMessage("", error_ss.str());
+ return;
+ }
+
+ uint32_t implementation_version = atoi(layer_root_node["implementation_version"].asString().c_str());
+ std::string library_path = layer_root_node["library_path"].asString();
+
+ // If the library_path variable has no directory symbol, it's just a file name and should be accessible on the
+ // global library path.
+ if (library_path.find('\\') != std::string::npos || library_path.find('/') != std::string::npos) {
+ // If the library_path is an absolute path, just use that if it exists
+ if (FileSysUtilsIsAbsolutePath(library_path)) {
+ if (!FileSysUtilsPathExists(library_path)) {
+ error_ss << filename << " library " << library_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ } else {
+ // Otherwise, treat the library path as a relative path based on the JSON file.
+ std::string combined_path;
+ std::string file_parent;
+ if (!FileSysUtilsGetParentPath(filename, file_parent) ||
+ !FileSysUtilsCombinePaths(file_parent, library_path, combined_path) || !FileSysUtilsPathExists(combined_path)) {
+ error_ss << filename << " library " << combined_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ library_path = combined_path;
+ }
+ }
+
+ std::string description;
+ if (!layer_root_node["description"].isNull() && layer_root_node["description"].isString()) {
+ description = layer_root_node["description"].asString();
+ }
+
+ // Add this layer manifest file
+ manifest_files.emplace_back(
+ new ApiLayerManifestFile(type, filename, layer_name, description, api_version, implementation_version, library_path));
+
+ // Add any extensions to it after the fact.
+ manifest_files.back()->ParseCommon(layer_root_node);
+}
+
+void ApiLayerManifestFile::PopulateApiLayerProperties(XrApiLayerProperties &props) const {
+ props.layerVersion = _implementation_version;
+ props.specVersion = XR_MAKE_VERSION(_api_version.major, _api_version.minor, _api_version.patch);
+ strncpy(props.layerName, _layer_name.c_str(), XR_MAX_API_LAYER_NAME_SIZE - 1);
+ if (_layer_name.size() >= XR_MAX_API_LAYER_NAME_SIZE - 1) {
+ props.layerName[XR_MAX_API_LAYER_NAME_SIZE - 1] = '\0';
+ }
+ strncpy(props.description, _description.c_str(), XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1);
+ if (_description.size() >= XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1) {
+ props.description[XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1] = '\0';
+ }
+}
+
+// Find all layer manifest files in the appropriate search paths/registries for the given type.
+XrResult ApiLayerManifestFile::FindManifestFiles(ManifestFileType type,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files) {
+ std::string relative_path;
+ std::string override_env_var;
+ std::string registry_location;
+
+ // Add the appropriate top-level folders for the relative path. These should be
+ // the string "openxr/" followed by the API major version as a string.
+ relative_path = OPENXR_RELATIVE_PATH;
+ relative_path += std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION));
+
+ switch (type) {
+ case MANIFEST_TYPE_IMPLICIT_API_LAYER:
+ relative_path += OPENXR_IMPLICIT_API_LAYER_RELATIVE_PATH;
+ override_env_var = "";
+#ifdef XR_OS_WINDOWS
+ registry_location = OPENXR_IMPLICIT_API_LAYER_REGISTRY_LOCATION;
+#endif
+ break;
+ case MANIFEST_TYPE_EXPLICIT_API_LAYER:
+ relative_path += OPENXR_EXPLICIT_API_LAYER_RELATIVE_PATH;
+ override_env_var = OPENXR_API_LAYER_PATH_ENV_VAR;
+#ifdef XR_OS_WINDOWS
+ registry_location = OPENXR_EXPLICIT_API_LAYER_REGISTRY_LOCATION;
+#endif
+ break;
+ default:
+ LoaderLogger::LogErrorMessage("", "ApiLayerManifestFile::FindManifestFiles - unknown manifest file requested");
+ return XR_ERROR_FILE_ACCESS_ERROR;
+ }
+
+ bool override_active = false;
+ std::vector<std::string> filenames;
+ ReadDataFilesInSearchPaths(override_env_var, relative_path, override_active, filenames);
+
+#ifdef XR_OS_WINDOWS
+ // Read the registry if the override wasn't active.
+ if (!override_active) {
+ ReadLayerDataFilesInRegistry(registry_location, filenames);
+ }
+#endif
+
+ for (std::string &cur_file : filenames) {
+ ApiLayerManifestFile::CreateIfValid(type, cur_file, manifest_files);
+ }
+
+ return XR_SUCCESS;
+}
diff --git a/thirdparty/openxr/src/loader/manifest_file.hpp b/thirdparty/openxr/src/loader/manifest_file.hpp
new file mode 100644
index 0000000000..0d04886d84
--- /dev/null
+++ b/thirdparty/openxr/src/loader/manifest_file.hpp
@@ -0,0 +1,103 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <unordered_map>
+
+namespace Json {
+class Value;
+}
+
+enum ManifestFileType {
+ MANIFEST_TYPE_UNDEFINED = 0,
+ MANIFEST_TYPE_RUNTIME,
+ MANIFEST_TYPE_IMPLICIT_API_LAYER,
+ MANIFEST_TYPE_EXPLICIT_API_LAYER,
+};
+
+struct JsonVersion {
+ uint32_t major;
+ uint32_t minor;
+ uint32_t patch;
+};
+
+struct ExtensionListing {
+ std::string name;
+ uint32_t extension_version;
+};
+
+// ManifestFile class -
+// Base class responsible for finding and parsing manifest files.
+class ManifestFile {
+ public:
+ // Non-copyable
+ ManifestFile(const ManifestFile &) = delete;
+ ManifestFile &operator=(const ManifestFile &) = delete;
+
+ ManifestFileType Type() const { return _type; }
+ const std::string &Filename() const { return _filename; }
+ const std::string &LibraryPath() const { return _library_path; }
+ void GetInstanceExtensionProperties(std::vector<XrExtensionProperties> &props);
+ const std::string &GetFunctionName(const std::string &func_name) const;
+
+ protected:
+ ManifestFile(ManifestFileType type, const std::string &filename, const std::string &library_path);
+ void ParseCommon(Json::Value const &root_node);
+ static bool IsValidJson(const Json::Value &root, JsonVersion &version);
+
+ private:
+ std::string _filename;
+ ManifestFileType _type;
+ std::string _library_path;
+ std::vector<ExtensionListing> _instance_extensions;
+ std::unordered_map<std::string, std::string> _functions_renamed;
+};
+
+// RuntimeManifestFile class -
+// Responsible for finding and parsing Runtime-specific manifest files.
+class RuntimeManifestFile : public ManifestFile {
+ public:
+ // Factory method
+ static XrResult FindManifestFiles(std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+
+ private:
+ RuntimeManifestFile(const std::string &filename, const std::string &library_path);
+ static void CreateIfValid(const std::string &filename, std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+ static void CreateIfValid(const Json::Value &root_node, const std::string &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+};
+
+// ApiLayerManifestFile class -
+// Responsible for finding and parsing API Layer-specific manifest files.
+class ApiLayerManifestFile : public ManifestFile {
+ public:
+ // Factory method
+ static XrResult FindManifestFiles(ManifestFileType type, std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files);
+
+ const std::string &LayerName() const { return _layer_name; }
+ void PopulateApiLayerProperties(XrApiLayerProperties &props) const;
+
+ private:
+ ApiLayerManifestFile(ManifestFileType type, const std::string &filename, const std::string &layer_name,
+ const std::string &description, const JsonVersion &api_version, const uint32_t &implementation_version,
+ const std::string &library_path);
+ static void CreateIfValid(ManifestFileType type, const std::string &filename,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files);
+
+ JsonVersion _api_version;
+ std::string _layer_name;
+ std::string _description;
+ uint32_t _implementation_version;
+};
diff --git a/thirdparty/openxr/src/loader/runtime_interface.cpp b/thirdparty/openxr/src/loader/runtime_interface.cpp
new file mode 100644
index 0000000000..1a35ba013a
--- /dev/null
+++ b/thirdparty/openxr/src/loader/runtime_interface.cpp
@@ -0,0 +1,493 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "runtime_interface.hpp"
+
+#include "manifest_file.hpp"
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "xr_generated_dispatch_table.h"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#include "android_utilities.h"
+#include <json/value.h>
+#endif // XR_USE_PLATFORM_ANDROID
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+namespace {
+/*!
+ * Stores a copy of the data passed to the xrInitializeLoaderKHR function in a singleton.
+ */
+class LoaderInitData {
+ public:
+ /*!
+ * Singleton accessor.
+ */
+ static LoaderInitData& instance() {
+ static LoaderInitData obj;
+ return obj;
+ }
+
+#ifdef XR_USE_PLATFORM_ANDROID
+ /*!
+ * Type alias for the platform-specific structure type.
+ */
+ using StructType = XrLoaderInitInfoAndroidKHR;
+#endif
+
+ /*!
+ * Get our copy of the data, casted to pass to the runtime's matching method.
+ */
+ const XrLoaderInitInfoBaseHeaderKHR* getParam() const { return reinterpret_cast<const XrLoaderInitInfoBaseHeaderKHR*>(&_data); }
+
+ /*!
+ * Get the data via its real structure type.
+ */
+ const StructType& getData() const { return _data; }
+
+ /*!
+ * Has this been correctly initialized?
+ */
+ bool initialized() const noexcept { return _initialized; }
+
+ /*!
+ * Initialize loader data - called by InitializeLoader() and thus ultimately by the loader's xrInitializeLoaderKHR
+ * implementation. Each platform that needs this extension will provide an implementation of this.
+ */
+ XrResult initialize(const XrLoaderInitInfoBaseHeaderKHR* info);
+
+ private:
+ //! Private constructor, forces use of singleton accessor.
+ LoaderInitData() = default;
+ //! Platform-specific init data
+ StructType _data = {};
+ //! Flag for indicating whether _data is valid.
+ bool _initialized = false;
+};
+
+#ifdef XR_USE_PLATFORM_ANDROID
+// Check and copy the Android-specific init data.
+XrResult LoaderInitData::initialize(const XrLoaderInitInfoBaseHeaderKHR* info) {
+ if (info->type != XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ auto cast_info = reinterpret_cast<XrLoaderInitInfoAndroidKHR const*>(info);
+
+ if (cast_info->applicationVM == nullptr) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (cast_info->applicationContext == nullptr) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ _data = *cast_info;
+ jni::init((jni::JavaVM*)_data.applicationVM);
+ _data.next = nullptr;
+ _initialized = true;
+ return XR_SUCCESS;
+}
+#endif // XR_USE_PLATFORM_ANDROID
+} // namespace
+
+XrResult InitializeLoader(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo) {
+ return LoaderInitData::instance().initialize(loaderInitInfo);
+}
+
+#endif // XR_KHR_LOADER_INIT_SUPPORT
+
+#ifdef XR_USE_PLATFORM_ANDROID
+XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest) {
+ using wrap::android::content::Context;
+ auto& initData = LoaderInitData::instance();
+ if (!initData.initialized()) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ auto context = Context(reinterpret_cast<jobject>(initData.getData().applicationContext));
+ if (context.isNull()) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ Json::Value virtualManifest;
+ if (0 != openxr_android::getActiveRuntimeVirtualManifest(context, virtualManifest)) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ out_manifest = virtualManifest;
+ return XR_SUCCESS;
+}
+#endif // XR_USE_PLATFORM_ANDROID
+
+XrResult RuntimeInterface::TryLoadingSingleRuntime(const std::string& openxr_command,
+ std::unique_ptr<RuntimeManifestFile>& manifest_file) {
+ LoaderPlatformLibraryHandle runtime_library = LoaderPlatformLibraryOpen(manifest_file->LibraryPath());
+ if (nullptr == runtime_library) {
+ std::string library_message = LoaderPlatformLibraryOpenError(manifest_file->LibraryPath());
+ std::string warning_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ warning_message += manifest_file->Filename();
+ warning_message += ", failed to load with message \"";
+ warning_message += library_message;
+ warning_message += "\"";
+ LoaderLogger::LogErrorMessage(openxr_command, warning_message);
+ return XR_ERROR_FILE_ACCESS_ERROR;
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ if (!LoaderInitData::instance().initialized()) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntime skipping manifest file " +
+ manifest_file->Filename() +
+ " because xrInitializeLoaderKHR was not yet called.");
+
+ LoaderPlatformLibraryClose(runtime_library);
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ bool forwardedInitLoader = false;
+ {
+ // If we have xrInitializeLoaderKHR exposed as an export, forward call to it.
+ const auto function_name = manifest_file->GetFunctionName("xrInitializeLoaderKHR");
+ auto initLoader =
+ reinterpret_cast<PFN_xrInitializeLoaderKHR>(LoaderPlatformLibraryGetProcAddr(runtime_library, function_name));
+ if (initLoader != nullptr) {
+ // we found the entry point one way or another.
+ LoaderLogger::LogInfoMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarding xrInitializeLoaderKHR call to runtime before "
+ "calling xrNegotiateLoaderRuntimeInterface.");
+ XrResult res = initLoader(LoaderInitData::instance().getParam());
+ if (!XR_SUCCEEDED(res)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarded call to xrInitializeLoaderKHR failed.");
+
+ LoaderPlatformLibraryClose(runtime_library);
+ return res;
+ }
+ forwardedInitLoader = true;
+ }
+ }
+#endif
+
+ // Get and settle on an runtime interface version (using any provided name if required).
+ std::string function_name = manifest_file->GetFunctionName("xrNegotiateLoaderRuntimeInterface");
+ auto negotiate =
+ reinterpret_cast<PFN_xrNegotiateLoaderRuntimeInterface>(LoaderPlatformLibraryGetProcAddr(runtime_library, function_name));
+
+ // Loader info for negotiation
+ XrNegotiateLoaderInfo loader_info = {};
+ loader_info.structType = XR_LOADER_INTERFACE_STRUCT_LOADER_INFO;
+ loader_info.structVersion = XR_LOADER_INFO_STRUCT_VERSION;
+ loader_info.structSize = sizeof(XrNegotiateLoaderInfo);
+ loader_info.minInterfaceVersion = 1;
+ loader_info.maxInterfaceVersion = XR_CURRENT_LOADER_RUNTIME_VERSION;
+ loader_info.minApiVersion = XR_MAKE_VERSION(1, 0, 0);
+ loader_info.maxApiVersion = XR_MAKE_VERSION(1, 0x3ff, 0xfff); // Maximum allowed version for this major version.
+
+ // Set up the runtime return structure
+ XrNegotiateRuntimeRequest runtime_info = {};
+ runtime_info.structType = XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST;
+ runtime_info.structVersion = XR_RUNTIME_INFO_STRUCT_VERSION;
+ runtime_info.structSize = sizeof(XrNegotiateRuntimeRequest);
+
+ // Skip calling the negotiate function and fail if the function pointer
+ // could not get loaded
+ XrResult res = XR_ERROR_RUNTIME_FAILURE;
+ if (nullptr != negotiate) {
+ res = negotiate(&loader_info, &runtime_info);
+ }
+ // If we supposedly succeeded, but got a nullptr for GetInstanceProcAddr
+ // then something still went wrong, so return with an error.
+ if (XR_SUCCEEDED(res)) {
+ uint32_t runtime_major = XR_VERSION_MAJOR(runtime_info.runtimeApiVersion);
+ uint32_t runtime_minor = XR_VERSION_MINOR(runtime_info.runtimeApiVersion);
+ uint32_t loader_major = XR_VERSION_MAJOR(XR_CURRENT_API_VERSION);
+ if (nullptr == runtime_info.getInstanceProcAddr) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", negotiation succeeded but returned NULL getInstanceProcAddr";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ } else if (0 >= runtime_info.runtimeInterfaceVersion ||
+ XR_CURRENT_LOADER_RUNTIME_VERSION < runtime_info.runtimeInterfaceVersion) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", negotiation succeeded but returned invalid interface version";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ } else if (runtime_major != loader_major || (runtime_major == 0 && runtime_minor == 0)) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", OpenXR version returned not compatible with this loader";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ }
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ if (XR_SUCCEEDED(res) && !forwardedInitLoader) {
+ // Forward initialize loader call, where possible and if we did not do so before.
+ PFN_xrVoidFunction initializeVoid = nullptr;
+ PFN_xrInitializeLoaderKHR initialize = nullptr;
+
+ // Now we may try asking xrGetInstanceProcAddr
+ if (XR_SUCCEEDED(runtime_info.getInstanceProcAddr(XR_NULL_HANDLE, "xrInitializeLoaderKHR", &initializeVoid))) {
+ if (initializeVoid == nullptr) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime got success from xrGetInstanceProcAddr "
+ "for xrInitializeLoaderKHR, but output a null pointer.");
+ res = XR_ERROR_RUNTIME_FAILURE;
+ } else {
+ initialize = reinterpret_cast<PFN_xrInitializeLoaderKHR>(initializeVoid);
+ }
+ }
+ if (initialize != nullptr) {
+ // we found the entry point one way or another.
+ LoaderLogger::LogInfoMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarding xrInitializeLoaderKHR call to runtime after "
+ "calling xrNegotiateLoaderRuntimeInterface.");
+ res = initialize(LoaderInitData::instance().getParam());
+ if (!XR_SUCCEEDED(res)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarded call to xrInitializeLoaderKHR failed.");
+ }
+ }
+ }
+#endif
+ if (XR_FAILED(res)) {
+ std::string warning_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ warning_message += manifest_file->Filename();
+ warning_message += ", negotiation failed with error ";
+ warning_message += std::to_string(res);
+ LoaderLogger::LogErrorMessage(openxr_command, warning_message);
+ LoaderPlatformLibraryClose(runtime_library);
+ return res;
+ }
+
+ std::string info_message = "RuntimeInterface::LoadRuntime succeeded loading runtime defined in manifest file ";
+ info_message += manifest_file->Filename();
+ info_message += " using interface version ";
+ info_message += std::to_string(runtime_info.runtimeInterfaceVersion);
+ info_message += " and OpenXR API version ";
+ info_message += std::to_string(XR_VERSION_MAJOR(runtime_info.runtimeApiVersion));
+ info_message += ".";
+ info_message += std::to_string(XR_VERSION_MINOR(runtime_info.runtimeApiVersion));
+ LoaderLogger::LogInfoMessage(openxr_command, info_message);
+
+ // Use this runtime
+ GetInstance().reset(new RuntimeInterface(runtime_library, runtime_info.getInstanceProcAddr));
+
+ // Grab the list of extensions this runtime supports for easy filtering after the
+ // xrCreateInstance call
+ std::vector<std::string> supported_extensions;
+ std::vector<XrExtensionProperties> extension_properties;
+ GetInstance()->GetInstanceExtensionProperties(extension_properties);
+ supported_extensions.reserve(extension_properties.size());
+ for (XrExtensionProperties ext_prop : extension_properties) {
+ supported_extensions.emplace_back(ext_prop.extensionName);
+ }
+ GetInstance()->SetSupportedExtensions(supported_extensions);
+
+ return XR_SUCCESS;
+}
+
+XrResult RuntimeInterface::LoadRuntime(const std::string& openxr_command) {
+ // If something's already loaded, we're done here.
+ if (GetInstance() != nullptr) {
+ return XR_SUCCESS;
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+
+ if (!LoaderInitData::instance().initialized()) {
+ LoaderLogger::LogErrorMessage(
+ openxr_command, "RuntimeInterface::LoadRuntime cannot run because xrInitializeLoaderKHR was not successfully called.");
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+#endif // XR_KHR_LOADER_INIT_SUPPORT
+
+ std::vector<std::unique_ptr<RuntimeManifestFile>> runtime_manifest_files = {};
+
+ // Find the available runtimes which we may need to report information for.
+ XrResult last_error = RuntimeManifestFile::FindManifestFiles(runtime_manifest_files);
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntimes - unknown error");
+ } else {
+ last_error = XR_ERROR_RUNTIME_UNAVAILABLE;
+ for (std::unique_ptr<RuntimeManifestFile>& manifest_file : runtime_manifest_files) {
+ last_error = RuntimeInterface::TryLoadingSingleRuntime(openxr_command, manifest_file);
+ if (XR_SUCCEEDED(last_error)) {
+ break;
+ }
+ }
+ }
+
+ // Unsuccessful in loading any runtime, throw the runtime unavailable message.
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntimes - failed to load a runtime");
+ last_error = XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+
+ return last_error;
+}
+
+void RuntimeInterface::UnloadRuntime(const std::string& openxr_command) {
+ if (GetInstance()) {
+ LoaderLogger::LogInfoMessage(openxr_command, "RuntimeInterface::UnloadRuntime - Unloading RuntimeInterface");
+ GetInstance().reset();
+ }
+}
+
+XrResult RuntimeInterface::GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function) {
+ return GetInstance()->_get_instance_proc_addr(instance, name, function);
+}
+
+const XrGeneratedDispatchTable* RuntimeInterface::GetDispatchTable(XrInstance instance) {
+ XrGeneratedDispatchTable* table = nullptr;
+ std::lock_guard<std::mutex> mlock(GetInstance()->_dispatch_table_mutex);
+ auto it = GetInstance()->_dispatch_table_map.find(instance);
+ if (it != GetInstance()->_dispatch_table_map.end()) {
+ table = it->second.get();
+ }
+ return table;
+}
+
+const XrGeneratedDispatchTable* RuntimeInterface::GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger) {
+ XrInstance runtime_instance = XR_NULL_HANDLE;
+ {
+ std::lock_guard<std::mutex> mlock(GetInstance()->_messenger_to_instance_mutex);
+ auto it = GetInstance()->_messenger_to_instance_map.find(messenger);
+ if (it != GetInstance()->_messenger_to_instance_map.end()) {
+ runtime_instance = it->second;
+ }
+ }
+ return GetDispatchTable(runtime_instance);
+}
+
+RuntimeInterface::RuntimeInterface(LoaderPlatformLibraryHandle runtime_library, PFN_xrGetInstanceProcAddr get_instance_proc_addr)
+ : _runtime_library(runtime_library), _get_instance_proc_addr(get_instance_proc_addr) {}
+
+RuntimeInterface::~RuntimeInterface() {
+ std::string info_message = "RuntimeInterface being destroyed.";
+ LoaderLogger::LogInfoMessage("", info_message);
+ {
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ _dispatch_table_map.clear();
+ }
+ LoaderPlatformLibraryClose(_runtime_library);
+}
+
+void RuntimeInterface::GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties) {
+ std::vector<XrExtensionProperties> runtime_extension_properties;
+ PFN_xrEnumerateInstanceExtensionProperties rt_xrEnumerateInstanceExtensionProperties;
+ _get_instance_proc_addr(XR_NULL_HANDLE, "xrEnumerateInstanceExtensionProperties",
+ reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrEnumerateInstanceExtensionProperties));
+ uint32_t count = 0;
+ uint32_t count_output = 0;
+ // Get the count from the runtime
+ rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, nullptr);
+ if (count_output > 0) {
+ runtime_extension_properties.resize(count_output);
+ count = count_output;
+ for (XrExtensionProperties& ext_prop : runtime_extension_properties) {
+ ext_prop.type = XR_TYPE_EXTENSION_PROPERTIES;
+ ext_prop.next = nullptr;
+ }
+ rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, runtime_extension_properties.data());
+ }
+ size_t ext_count = runtime_extension_properties.size();
+ size_t props_count = extension_properties.size();
+ for (size_t ext = 0; ext < ext_count; ++ext) {
+ bool found = false;
+ for (size_t prop = 0; prop < props_count; ++prop) {
+ // If we find it, then make sure the spec version matches that of the runtime instead of the
+ // layer.
+ if (strcmp(extension_properties[prop].extensionName, runtime_extension_properties[ext].extensionName) == 0) {
+ // Make sure the spec version used is the runtime's
+ extension_properties[prop].extensionVersion = runtime_extension_properties[ext].extensionVersion;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ extension_properties.push_back(runtime_extension_properties[ext]);
+ }
+ }
+}
+
+XrResult RuntimeInterface::CreateInstance(const XrInstanceCreateInfo* info, XrInstance* instance) {
+ XrResult res = XR_SUCCESS;
+ bool create_succeeded = false;
+ PFN_xrCreateInstance rt_xrCreateInstance;
+ _get_instance_proc_addr(XR_NULL_HANDLE, "xrCreateInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrCreateInstance));
+ res = rt_xrCreateInstance(info, instance);
+ if (XR_SUCCEEDED(res)) {
+ create_succeeded = true;
+ std::unique_ptr<XrGeneratedDispatchTable> dispatch_table(new XrGeneratedDispatchTable());
+ GeneratedXrPopulateDispatchTable(dispatch_table.get(), *instance, _get_instance_proc_addr);
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ _dispatch_table_map[*instance] = std::move(dispatch_table);
+ }
+
+ // If the failure occurred during the populate, clean up the instance we had picked up from the runtime
+ if (XR_FAILED(res) && create_succeeded) {
+ PFN_xrDestroyInstance rt_xrDestroyInstance;
+ _get_instance_proc_addr(*instance, "xrDestroyInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrDestroyInstance));
+ rt_xrDestroyInstance(*instance);
+ *instance = XR_NULL_HANDLE;
+ }
+
+ return res;
+}
+
+XrResult RuntimeInterface::DestroyInstance(XrInstance instance) {
+ if (XR_NULL_HANDLE != instance) {
+ // Destroy the dispatch table for this instance first
+ {
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ auto map_iter = _dispatch_table_map.find(instance);
+ if (map_iter != _dispatch_table_map.end()) {
+ _dispatch_table_map.erase(map_iter);
+ }
+ }
+ // Now delete the instance
+ PFN_xrDestroyInstance rt_xrDestroyInstance;
+ _get_instance_proc_addr(instance, "xrDestroyInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrDestroyInstance));
+ rt_xrDestroyInstance(instance);
+ }
+ return XR_SUCCESS;
+}
+
+bool RuntimeInterface::TrackDebugMessenger(XrInstance instance, XrDebugUtilsMessengerEXT messenger) {
+ std::lock_guard<std::mutex> mlock(_messenger_to_instance_mutex);
+ _messenger_to_instance_map[messenger] = instance;
+ return true;
+}
+
+void RuntimeInterface::ForgetDebugMessenger(XrDebugUtilsMessengerEXT messenger) {
+ if (XR_NULL_HANDLE != messenger) {
+ std::lock_guard<std::mutex> mlock(_messenger_to_instance_mutex);
+ _messenger_to_instance_map.erase(messenger);
+ }
+}
+
+void RuntimeInterface::SetSupportedExtensions(std::vector<std::string>& supported_extensions) {
+ _supported_extensions = supported_extensions;
+}
+
+bool RuntimeInterface::SupportsExtension(const std::string& extension_name) {
+ bool found_prop = false;
+ for (const std::string& supported_extension : _supported_extensions) {
+ if (supported_extension == extension_name) {
+ found_prop = true;
+ break;
+ }
+ }
+ return found_prop;
+}
diff --git a/thirdparty/openxr/src/loader/runtime_interface.hpp b/thirdparty/openxr/src/loader/runtime_interface.hpp
new file mode 100644
index 0000000000..5f49b28abe
--- /dev/null
+++ b/thirdparty/openxr/src/loader/runtime_interface.hpp
@@ -0,0 +1,84 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include "loader_platform.hpp"
+
+#include <openxr/openxr.h>
+
+#include <string>
+#include <vector>
+#include <unordered_map>
+#include <mutex>
+#include <memory>
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#define XR_KHR_LOADER_INIT_SUPPORT
+#endif
+
+namespace Json {
+class Value;
+}
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+//! Initialize loader, where required.
+XrResult InitializeLoader(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest);
+#endif
+
+class RuntimeManifestFile;
+struct XrGeneratedDispatchTable;
+
+class RuntimeInterface {
+ public:
+ virtual ~RuntimeInterface();
+
+ // Helper functions for loading and unloading the runtime (but only when necessary)
+ static XrResult LoadRuntime(const std::string& openxr_command);
+ static void UnloadRuntime(const std::string& openxr_command);
+ static RuntimeInterface& GetRuntime() { return *(GetInstance().get()); }
+ static XrResult GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function);
+
+ // Get the direct dispatch table to this runtime, without API layers or loader terminators.
+ static const XrGeneratedDispatchTable* GetDispatchTable(XrInstance instance);
+ static const XrGeneratedDispatchTable* GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger);
+
+ void GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties);
+ bool SupportsExtension(const std::string& extension_name);
+ XrResult CreateInstance(const XrInstanceCreateInfo* info, XrInstance* instance);
+ XrResult DestroyInstance(XrInstance instance);
+ bool TrackDebugMessenger(XrInstance instance, XrDebugUtilsMessengerEXT messenger);
+ void ForgetDebugMessenger(XrDebugUtilsMessengerEXT messenger);
+
+ // No default construction
+ RuntimeInterface() = delete;
+
+ // Non-copyable
+ RuntimeInterface(const RuntimeInterface&) = delete;
+ RuntimeInterface& operator=(const RuntimeInterface&) = delete;
+
+ private:
+ RuntimeInterface(LoaderPlatformLibraryHandle runtime_library, PFN_xrGetInstanceProcAddr get_instance_proc_addr);
+ void SetSupportedExtensions(std::vector<std::string>& supported_extensions);
+ static XrResult TryLoadingSingleRuntime(const std::string& openxr_command, std::unique_ptr<RuntimeManifestFile>& manifest_file);
+
+ static std::unique_ptr<RuntimeInterface>& GetInstance() {
+ static std::unique_ptr<RuntimeInterface> instance;
+ return instance;
+ }
+
+ LoaderPlatformLibraryHandle _runtime_library;
+ PFN_xrGetInstanceProcAddr _get_instance_proc_addr;
+ std::unordered_map<XrInstance, std::unique_ptr<XrGeneratedDispatchTable>> _dispatch_table_map;
+ std::mutex _dispatch_table_mutex;
+ std::unordered_map<XrDebugUtilsMessengerEXT, XrInstance> _messenger_to_instance_map;
+ std::mutex _messenger_to_instance_mutex;
+ std::vector<std::string> _supported_extensions;
+};
diff --git a/thirdparty/openxr/src/loader/xr_generated_loader.cpp b/thirdparty/openxr/src/loader/xr_generated_loader.cpp
new file mode 100644
index 0000000000..2ce323e51f
--- /dev/null
+++ b/thirdparty/openxr/src/loader/xr_generated_loader.cpp
@@ -0,0 +1,700 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See loader_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#include "xr_generated_loader.hpp"
+
+#include "api_layer_interface.hpp"
+#include "exception_handling.hpp"
+#include "hex_and_handles.h"
+#include "loader_instance.hpp"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+#include <cstring>
+#include <memory>
+#include <new>
+#include <string>
+#include <unordered_map>
+
+
+// Automatically generated instance trampolines and terminators
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInstanceProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetInstanceProperties(instance, instanceProperties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrPollEvent");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->PollEvent(instance, eventData);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrResultToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ResultToString(instance, value, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStructureTypeToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StructureTypeToString(instance, value, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetSystem");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetSystem(instance, getInfo, systemId);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetSystemProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetSystemProperties(instance, systemId, properties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateEnvironmentBlendModes");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateEnvironmentBlendModes(instance, systemId, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateSession(instance, createInfo, session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateReferenceSpaces");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateReferenceSpaces(session, spaceCapacityInput, spaceCountOutput, spaces);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateReferenceSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateReferenceSpace(session, createInfo, space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetReferenceSpaceBoundsRect");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetReferenceSpaceBoundsRect(session, referenceSpaceType, bounds);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateActionSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateActionSpace(session, createInfo, space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrLocateSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->LocateSpace(space, baseSpace, time, location);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySpace(space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateViewConfigurations");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateViewConfigurations(instance, systemId, viewConfigurationTypeCapacityInput, viewConfigurationTypeCountOutput, viewConfigurationTypes);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetViewConfigurationProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetViewConfigurationProperties(instance, systemId, viewConfigurationType, configurationProperties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateViewConfigurationViews");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateViewConfigurationViews(instance, systemId, viewConfigurationType, viewCapacityInput, viewCountOutput, views);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateSwapchainFormats");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateSwapchainFormats(session, formatCapacityInput, formatCountOutput, formats);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateSwapchain");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateSwapchain(session, createInfo, swapchain);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySwapchain");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySwapchain(swapchain);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateSwapchainImages");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateSwapchainImages(swapchain, imageCapacityInput, imageCountOutput, images);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrAcquireSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->AcquireSwapchainImage(swapchain, acquireInfo, index);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrWaitSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->WaitSwapchainImage(swapchain, waitInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrReleaseSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ReleaseSwapchainImage(swapchain, releaseInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrBeginSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->BeginSession(session, beginInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEndSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EndSession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrRequestExitSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->RequestExitSession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrWaitFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->WaitFrame(session, frameWaitInfo, frameState);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrBeginFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->BeginFrame(session, frameBeginInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEndFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EndFrame(session, frameEndInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrLocateViews");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->LocateViews(session, viewLocateInfo, viewState, viewCapacityInput, viewCountOutput, views);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStringToPath");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StringToPath(instance, pathString, path);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrPathToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->PathToString(instance, path, bufferCapacityInput, bufferCountOutput, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateActionSet");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateActionSet(instance, createInfo, actionSet);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyActionSet");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroyActionSet(actionSet);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateAction(actionSet, createInfo, action);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroyAction(action);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSuggestInteractionProfileBindings");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SuggestInteractionProfileBindings(instance, suggestedBindings);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrAttachSessionActionSets");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->AttachSessionActionSets(session, attachInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetCurrentInteractionProfile");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetCurrentInteractionProfile(session, topLevelUserPath, interactionProfile);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateBoolean");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateBoolean(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateFloat");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateFloat(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateVector2f");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateVector2f(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStatePose");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStatePose(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSyncActions");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SyncActions(session, syncInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateBoundSourcesForAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateBoundSourcesForAction(session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInputSourceLocalizedName");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetInputSourceLocalizedName(session, getInfo, bufferCapacityInput, bufferCountOutput, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrApplyHapticFeedback");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ApplyHapticFeedback(session, hapticActionInfo, hapticFeedback);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStopHapticFeedback");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StopHapticFeedback(session, hapticActionInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+
diff --git a/thirdparty/openxr/src/loader/xr_generated_loader.hpp b/thirdparty/openxr/src/loader/xr_generated_loader.hpp
new file mode 100644
index 0000000000..482cf1e83e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/xr_generated_loader.hpp
@@ -0,0 +1,252 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See loader_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+#include <unordered_map>
+#include <thread>
+#include <mutex>
+
+#include "xr_dependencies.h"
+#include "openxr/openxr.h"
+#include "openxr/openxr_platform.h"
+
+#include "loader_interfaces.h"
+
+#include "loader_instance.hpp"
+
+#include "loader_platform.hpp"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Loader manually generated function prototypes
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo);
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.c b/thirdparty/openxr/src/xr_generated_dispatch_table.c
new file mode 100644
index 0000000000..79fbefc52a
--- /dev/null
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.c
@@ -0,0 +1,347 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See utility_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#include "xr_generated_dispatch_table.h"
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+// Helper function to populate an instance dispatch table
+void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
+ XrInstance instance,
+ PFN_xrGetInstanceProcAddr get_inst_proc_addr) {
+
+ // ---- Core 1.0 commands
+ table->GetInstanceProcAddr = get_inst_proc_addr;
+ (get_inst_proc_addr(instance, "xrCreateInstance", (PFN_xrVoidFunction*)&table->CreateInstance));
+ (get_inst_proc_addr(instance, "xrDestroyInstance", (PFN_xrVoidFunction*)&table->DestroyInstance));
+ (get_inst_proc_addr(instance, "xrGetInstanceProperties", (PFN_xrVoidFunction*)&table->GetInstanceProperties));
+ (get_inst_proc_addr(instance, "xrPollEvent", (PFN_xrVoidFunction*)&table->PollEvent));
+ (get_inst_proc_addr(instance, "xrResultToString", (PFN_xrVoidFunction*)&table->ResultToString));
+ (get_inst_proc_addr(instance, "xrStructureTypeToString", (PFN_xrVoidFunction*)&table->StructureTypeToString));
+ (get_inst_proc_addr(instance, "xrGetSystem", (PFN_xrVoidFunction*)&table->GetSystem));
+ (get_inst_proc_addr(instance, "xrGetSystemProperties", (PFN_xrVoidFunction*)&table->GetSystemProperties));
+ (get_inst_proc_addr(instance, "xrEnumerateEnvironmentBlendModes", (PFN_xrVoidFunction*)&table->EnumerateEnvironmentBlendModes));
+ (get_inst_proc_addr(instance, "xrCreateSession", (PFN_xrVoidFunction*)&table->CreateSession));
+ (get_inst_proc_addr(instance, "xrDestroySession", (PFN_xrVoidFunction*)&table->DestroySession));
+ (get_inst_proc_addr(instance, "xrEnumerateReferenceSpaces", (PFN_xrVoidFunction*)&table->EnumerateReferenceSpaces));
+ (get_inst_proc_addr(instance, "xrCreateReferenceSpace", (PFN_xrVoidFunction*)&table->CreateReferenceSpace));
+ (get_inst_proc_addr(instance, "xrGetReferenceSpaceBoundsRect", (PFN_xrVoidFunction*)&table->GetReferenceSpaceBoundsRect));
+ (get_inst_proc_addr(instance, "xrCreateActionSpace", (PFN_xrVoidFunction*)&table->CreateActionSpace));
+ (get_inst_proc_addr(instance, "xrLocateSpace", (PFN_xrVoidFunction*)&table->LocateSpace));
+ (get_inst_proc_addr(instance, "xrDestroySpace", (PFN_xrVoidFunction*)&table->DestroySpace));
+ (get_inst_proc_addr(instance, "xrEnumerateViewConfigurations", (PFN_xrVoidFunction*)&table->EnumerateViewConfigurations));
+ (get_inst_proc_addr(instance, "xrGetViewConfigurationProperties", (PFN_xrVoidFunction*)&table->GetViewConfigurationProperties));
+ (get_inst_proc_addr(instance, "xrEnumerateViewConfigurationViews", (PFN_xrVoidFunction*)&table->EnumerateViewConfigurationViews));
+ (get_inst_proc_addr(instance, "xrEnumerateSwapchainFormats", (PFN_xrVoidFunction*)&table->EnumerateSwapchainFormats));
+ (get_inst_proc_addr(instance, "xrCreateSwapchain", (PFN_xrVoidFunction*)&table->CreateSwapchain));
+ (get_inst_proc_addr(instance, "xrDestroySwapchain", (PFN_xrVoidFunction*)&table->DestroySwapchain));
+ (get_inst_proc_addr(instance, "xrEnumerateSwapchainImages", (PFN_xrVoidFunction*)&table->EnumerateSwapchainImages));
+ (get_inst_proc_addr(instance, "xrAcquireSwapchainImage", (PFN_xrVoidFunction*)&table->AcquireSwapchainImage));
+ (get_inst_proc_addr(instance, "xrWaitSwapchainImage", (PFN_xrVoidFunction*)&table->WaitSwapchainImage));
+ (get_inst_proc_addr(instance, "xrReleaseSwapchainImage", (PFN_xrVoidFunction*)&table->ReleaseSwapchainImage));
+ (get_inst_proc_addr(instance, "xrBeginSession", (PFN_xrVoidFunction*)&table->BeginSession));
+ (get_inst_proc_addr(instance, "xrEndSession", (PFN_xrVoidFunction*)&table->EndSession));
+ (get_inst_proc_addr(instance, "xrRequestExitSession", (PFN_xrVoidFunction*)&table->RequestExitSession));
+ (get_inst_proc_addr(instance, "xrWaitFrame", (PFN_xrVoidFunction*)&table->WaitFrame));
+ (get_inst_proc_addr(instance, "xrBeginFrame", (PFN_xrVoidFunction*)&table->BeginFrame));
+ (get_inst_proc_addr(instance, "xrEndFrame", (PFN_xrVoidFunction*)&table->EndFrame));
+ (get_inst_proc_addr(instance, "xrLocateViews", (PFN_xrVoidFunction*)&table->LocateViews));
+ (get_inst_proc_addr(instance, "xrStringToPath", (PFN_xrVoidFunction*)&table->StringToPath));
+ (get_inst_proc_addr(instance, "xrPathToString", (PFN_xrVoidFunction*)&table->PathToString));
+ (get_inst_proc_addr(instance, "xrCreateActionSet", (PFN_xrVoidFunction*)&table->CreateActionSet));
+ (get_inst_proc_addr(instance, "xrDestroyActionSet", (PFN_xrVoidFunction*)&table->DestroyActionSet));
+ (get_inst_proc_addr(instance, "xrCreateAction", (PFN_xrVoidFunction*)&table->CreateAction));
+ (get_inst_proc_addr(instance, "xrDestroyAction", (PFN_xrVoidFunction*)&table->DestroyAction));
+ (get_inst_proc_addr(instance, "xrSuggestInteractionProfileBindings", (PFN_xrVoidFunction*)&table->SuggestInteractionProfileBindings));
+ (get_inst_proc_addr(instance, "xrAttachSessionActionSets", (PFN_xrVoidFunction*)&table->AttachSessionActionSets));
+ (get_inst_proc_addr(instance, "xrGetCurrentInteractionProfile", (PFN_xrVoidFunction*)&table->GetCurrentInteractionProfile));
+ (get_inst_proc_addr(instance, "xrGetActionStateBoolean", (PFN_xrVoidFunction*)&table->GetActionStateBoolean));
+ (get_inst_proc_addr(instance, "xrGetActionStateFloat", (PFN_xrVoidFunction*)&table->GetActionStateFloat));
+ (get_inst_proc_addr(instance, "xrGetActionStateVector2f", (PFN_xrVoidFunction*)&table->GetActionStateVector2f));
+ (get_inst_proc_addr(instance, "xrGetActionStatePose", (PFN_xrVoidFunction*)&table->GetActionStatePose));
+ (get_inst_proc_addr(instance, "xrSyncActions", (PFN_xrVoidFunction*)&table->SyncActions));
+ (get_inst_proc_addr(instance, "xrEnumerateBoundSourcesForAction", (PFN_xrVoidFunction*)&table->EnumerateBoundSourcesForAction));
+ (get_inst_proc_addr(instance, "xrGetInputSourceLocalizedName", (PFN_xrVoidFunction*)&table->GetInputSourceLocalizedName));
+ (get_inst_proc_addr(instance, "xrApplyHapticFeedback", (PFN_xrVoidFunction*)&table->ApplyHapticFeedback));
+ (get_inst_proc_addr(instance, "xrStopHapticFeedback", (PFN_xrVoidFunction*)&table->StopHapticFeedback));
+
+ // ---- XR_KHR_android_thread_settings extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ (get_inst_proc_addr(instance, "xrSetAndroidApplicationThreadKHR", (PFN_xrVoidFunction*)&table->SetAndroidApplicationThreadKHR));
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_android_surface_swapchain extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ (get_inst_proc_addr(instance, "xrCreateSwapchainAndroidSurfaceKHR", (PFN_xrVoidFunction*)&table->CreateSwapchainAndroidSurfaceKHR));
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_opengl_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+ (get_inst_proc_addr(instance, "xrGetOpenGLGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetOpenGLGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
+
+ // ---- XR_KHR_opengl_es_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+ (get_inst_proc_addr(instance, "xrGetOpenGLESGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetOpenGLESGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+
+ // ---- XR_KHR_vulkan_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanInstanceExtensionsKHR", (PFN_xrVoidFunction*)&table->GetVulkanInstanceExtensionsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanDeviceExtensionsKHR", (PFN_xrVoidFunction*)&table->GetVulkanDeviceExtensionsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsDeviceKHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsDeviceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_KHR_D3D11_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+ (get_inst_proc_addr(instance, "xrGetD3D11GraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetD3D11GraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_D3D11)
+
+ // ---- XR_KHR_D3D12_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+ (get_inst_proc_addr(instance, "xrGetD3D12GraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetD3D12GraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_D3D12)
+
+ // ---- XR_KHR_visibility_mask extension commands
+ (get_inst_proc_addr(instance, "xrGetVisibilityMaskKHR", (PFN_xrVoidFunction*)&table->GetVisibilityMaskKHR));
+
+ // ---- XR_KHR_win32_convert_performance_counter_time extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrConvertWin32PerformanceCounterToTimeKHR", (PFN_xrVoidFunction*)&table->ConvertWin32PerformanceCounterToTimeKHR));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrConvertTimeToWin32PerformanceCounterKHR", (PFN_xrVoidFunction*)&table->ConvertTimeToWin32PerformanceCounterKHR));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_KHR_convert_timespec_time extension commands
+#if defined(XR_USE_TIMESPEC)
+ (get_inst_proc_addr(instance, "xrConvertTimespecTimeToTimeKHR", (PFN_xrVoidFunction*)&table->ConvertTimespecTimeToTimeKHR));
+#endif // defined(XR_USE_TIMESPEC)
+#if defined(XR_USE_TIMESPEC)
+ (get_inst_proc_addr(instance, "xrConvertTimeToTimespecTimeKHR", (PFN_xrVoidFunction*)&table->ConvertTimeToTimespecTimeKHR));
+#endif // defined(XR_USE_TIMESPEC)
+
+ // ---- XR_KHR_vulkan_enable2 extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrCreateVulkanInstanceKHR", (PFN_xrVoidFunction*)&table->CreateVulkanInstanceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrCreateVulkanDeviceKHR", (PFN_xrVoidFunction*)&table->CreateVulkanDeviceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsDevice2KHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsDevice2KHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsRequirements2KHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsRequirements2KHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_EXT_performance_settings extension commands
+ (get_inst_proc_addr(instance, "xrPerfSettingsSetPerformanceLevelEXT", (PFN_xrVoidFunction*)&table->PerfSettingsSetPerformanceLevelEXT));
+
+ // ---- XR_EXT_thermal_query extension commands
+ (get_inst_proc_addr(instance, "xrThermalGetTemperatureTrendEXT", (PFN_xrVoidFunction*)&table->ThermalGetTemperatureTrendEXT));
+
+ // ---- XR_EXT_debug_utils extension commands
+ (get_inst_proc_addr(instance, "xrSetDebugUtilsObjectNameEXT", (PFN_xrVoidFunction*)&table->SetDebugUtilsObjectNameEXT));
+ (get_inst_proc_addr(instance, "xrCreateDebugUtilsMessengerEXT", (PFN_xrVoidFunction*)&table->CreateDebugUtilsMessengerEXT));
+ (get_inst_proc_addr(instance, "xrDestroyDebugUtilsMessengerEXT", (PFN_xrVoidFunction*)&table->DestroyDebugUtilsMessengerEXT));
+ (get_inst_proc_addr(instance, "xrSubmitDebugUtilsMessageEXT", (PFN_xrVoidFunction*)&table->SubmitDebugUtilsMessageEXT));
+ (get_inst_proc_addr(instance, "xrSessionBeginDebugUtilsLabelRegionEXT", (PFN_xrVoidFunction*)&table->SessionBeginDebugUtilsLabelRegionEXT));
+ (get_inst_proc_addr(instance, "xrSessionEndDebugUtilsLabelRegionEXT", (PFN_xrVoidFunction*)&table->SessionEndDebugUtilsLabelRegionEXT));
+ (get_inst_proc_addr(instance, "xrSessionInsertDebugUtilsLabelEXT", (PFN_xrVoidFunction*)&table->SessionInsertDebugUtilsLabelEXT));
+
+ // ---- XR_MSFT_spatial_anchor extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorSpaceMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorMSFT));
+
+ // ---- XR_EXT_conformance_automation extension commands
+ (get_inst_proc_addr(instance, "xrSetInputDeviceActiveEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceActiveEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateBoolEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateBoolEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateFloatEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateFloatEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateVector2fEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateVector2fEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceLocationEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceLocationEXT));
+
+ // ---- XR_MSFT_spatial_graph_bridge extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialGraphNodeSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialGraphNodeSpaceMSFT));
+
+ // ---- XR_EXT_hand_tracking extension commands
+ (get_inst_proc_addr(instance, "xrCreateHandTrackerEXT", (PFN_xrVoidFunction*)&table->CreateHandTrackerEXT));
+ (get_inst_proc_addr(instance, "xrDestroyHandTrackerEXT", (PFN_xrVoidFunction*)&table->DestroyHandTrackerEXT));
+ (get_inst_proc_addr(instance, "xrLocateHandJointsEXT", (PFN_xrVoidFunction*)&table->LocateHandJointsEXT));
+
+ // ---- XR_MSFT_hand_tracking_mesh extension commands
+ (get_inst_proc_addr(instance, "xrCreateHandMeshSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateHandMeshSpaceMSFT));
+ (get_inst_proc_addr(instance, "xrUpdateHandMeshMSFT", (PFN_xrVoidFunction*)&table->UpdateHandMeshMSFT));
+
+ // ---- XR_MSFT_controller_model extension commands
+ (get_inst_proc_addr(instance, "xrGetControllerModelKeyMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelKeyMSFT));
+ (get_inst_proc_addr(instance, "xrLoadControllerModelMSFT", (PFN_xrVoidFunction*)&table->LoadControllerModelMSFT));
+ (get_inst_proc_addr(instance, "xrGetControllerModelPropertiesMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelPropertiesMSFT));
+ (get_inst_proc_addr(instance, "xrGetControllerModelStateMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelStateMSFT));
+
+ // ---- XR_MSFT_perception_anchor_interop extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFromPerceptionAnchorMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFromPerceptionAnchorMSFT));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->TryGetPerceptionAnchorFromSpatialAnchorMSFT));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_MSFT_composition_layer_reprojection extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateReprojectionModesMSFT", (PFN_xrVoidFunction*)&table->EnumerateReprojectionModesMSFT));
+
+ // ---- XR_FB_swapchain_update_state extension commands
+ (get_inst_proc_addr(instance, "xrUpdateSwapchainFB", (PFN_xrVoidFunction*)&table->UpdateSwapchainFB));
+ (get_inst_proc_addr(instance, "xrGetSwapchainStateFB", (PFN_xrVoidFunction*)&table->GetSwapchainStateFB));
+
+ // ---- XR_MSFT_scene_understanding extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateSceneComputeFeaturesMSFT", (PFN_xrVoidFunction*)&table->EnumerateSceneComputeFeaturesMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSceneObserverMSFT", (PFN_xrVoidFunction*)&table->CreateSceneObserverMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySceneObserverMSFT", (PFN_xrVoidFunction*)&table->DestroySceneObserverMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSceneMSFT", (PFN_xrVoidFunction*)&table->CreateSceneMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySceneMSFT", (PFN_xrVoidFunction*)&table->DestroySceneMSFT));
+ (get_inst_proc_addr(instance, "xrComputeNewSceneMSFT", (PFN_xrVoidFunction*)&table->ComputeNewSceneMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneComputeStateMSFT", (PFN_xrVoidFunction*)&table->GetSceneComputeStateMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneComponentsMSFT", (PFN_xrVoidFunction*)&table->GetSceneComponentsMSFT));
+ (get_inst_proc_addr(instance, "xrLocateSceneComponentsMSFT", (PFN_xrVoidFunction*)&table->LocateSceneComponentsMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneMeshBuffersMSFT", (PFN_xrVoidFunction*)&table->GetSceneMeshBuffersMSFT));
+
+ // ---- XR_MSFT_scene_understanding_serialization extension commands
+ (get_inst_proc_addr(instance, "xrDeserializeSceneMSFT", (PFN_xrVoidFunction*)&table->DeserializeSceneMSFT));
+ (get_inst_proc_addr(instance, "xrGetSerializedSceneFragmentDataMSFT", (PFN_xrVoidFunction*)&table->GetSerializedSceneFragmentDataMSFT));
+
+ // ---- XR_FB_display_refresh_rate extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateDisplayRefreshRatesFB", (PFN_xrVoidFunction*)&table->EnumerateDisplayRefreshRatesFB));
+ (get_inst_proc_addr(instance, "xrGetDisplayRefreshRateFB", (PFN_xrVoidFunction*)&table->GetDisplayRefreshRateFB));
+ (get_inst_proc_addr(instance, "xrRequestDisplayRefreshRateFB", (PFN_xrVoidFunction*)&table->RequestDisplayRefreshRateFB));
+
+ // ---- XR_HTCX_vive_tracker_interaction extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateViveTrackerPathsHTCX", (PFN_xrVoidFunction*)&table->EnumerateViveTrackerPathsHTCX));
+
+ // ---- XR_HTC_facial_tracking extension commands
+ (get_inst_proc_addr(instance, "xrCreateFacialTrackerHTC", (PFN_xrVoidFunction*)&table->CreateFacialTrackerHTC));
+ (get_inst_proc_addr(instance, "xrDestroyFacialTrackerHTC", (PFN_xrVoidFunction*)&table->DestroyFacialTrackerHTC));
+ (get_inst_proc_addr(instance, "xrGetFacialExpressionsHTC", (PFN_xrVoidFunction*)&table->GetFacialExpressionsHTC));
+
+ // ---- XR_FB_color_space extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateColorSpacesFB", (PFN_xrVoidFunction*)&table->EnumerateColorSpacesFB));
+ (get_inst_proc_addr(instance, "xrSetColorSpaceFB", (PFN_xrVoidFunction*)&table->SetColorSpaceFB));
+
+ // ---- XR_FB_hand_tracking_mesh extension commands
+ (get_inst_proc_addr(instance, "xrGetHandMeshFB", (PFN_xrVoidFunction*)&table->GetHandMeshFB));
+
+ // ---- XR_FB_foveation extension commands
+ (get_inst_proc_addr(instance, "xrCreateFoveationProfileFB", (PFN_xrVoidFunction*)&table->CreateFoveationProfileFB));
+ (get_inst_proc_addr(instance, "xrDestroyFoveationProfileFB", (PFN_xrVoidFunction*)&table->DestroyFoveationProfileFB));
+
+ // ---- XR_FB_keyboard_tracking extension commands
+ (get_inst_proc_addr(instance, "xrQuerySystemTrackedKeyboardFB", (PFN_xrVoidFunction*)&table->QuerySystemTrackedKeyboardFB));
+ (get_inst_proc_addr(instance, "xrCreateKeyboardSpaceFB", (PFN_xrVoidFunction*)&table->CreateKeyboardSpaceFB));
+
+ // ---- XR_FB_triangle_mesh extension commands
+ (get_inst_proc_addr(instance, "xrCreateTriangleMeshFB", (PFN_xrVoidFunction*)&table->CreateTriangleMeshFB));
+ (get_inst_proc_addr(instance, "xrDestroyTriangleMeshFB", (PFN_xrVoidFunction*)&table->DestroyTriangleMeshFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshGetVertexBufferFB", (PFN_xrVoidFunction*)&table->TriangleMeshGetVertexBufferFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshGetIndexBufferFB", (PFN_xrVoidFunction*)&table->TriangleMeshGetIndexBufferFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshBeginUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshBeginUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshEndUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshEndUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshBeginVertexBufferUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshBeginVertexBufferUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshEndVertexBufferUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshEndVertexBufferUpdateFB));
+
+ // ---- XR_FB_passthrough extension commands
+ (get_inst_proc_addr(instance, "xrCreatePassthroughFB", (PFN_xrVoidFunction*)&table->CreatePassthroughFB));
+ (get_inst_proc_addr(instance, "xrDestroyPassthroughFB", (PFN_xrVoidFunction*)&table->DestroyPassthroughFB));
+ (get_inst_proc_addr(instance, "xrPassthroughStartFB", (PFN_xrVoidFunction*)&table->PassthroughStartFB));
+ (get_inst_proc_addr(instance, "xrPassthroughPauseFB", (PFN_xrVoidFunction*)&table->PassthroughPauseFB));
+ (get_inst_proc_addr(instance, "xrCreatePassthroughLayerFB", (PFN_xrVoidFunction*)&table->CreatePassthroughLayerFB));
+ (get_inst_proc_addr(instance, "xrDestroyPassthroughLayerFB", (PFN_xrVoidFunction*)&table->DestroyPassthroughLayerFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerPauseFB", (PFN_xrVoidFunction*)&table->PassthroughLayerPauseFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerResumeFB", (PFN_xrVoidFunction*)&table->PassthroughLayerResumeFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerSetStyleFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetStyleFB));
+ (get_inst_proc_addr(instance, "xrCreateGeometryInstanceFB", (PFN_xrVoidFunction*)&table->CreateGeometryInstanceFB));
+ (get_inst_proc_addr(instance, "xrDestroyGeometryInstanceFB", (PFN_xrVoidFunction*)&table->DestroyGeometryInstanceFB));
+ (get_inst_proc_addr(instance, "xrGeometryInstanceSetTransformFB", (PFN_xrVoidFunction*)&table->GeometryInstanceSetTransformFB));
+
+ // ---- XR_FB_render_model extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateRenderModelPathsFB", (PFN_xrVoidFunction*)&table->EnumerateRenderModelPathsFB));
+ (get_inst_proc_addr(instance, "xrGetRenderModelPropertiesFB", (PFN_xrVoidFunction*)&table->GetRenderModelPropertiesFB));
+ (get_inst_proc_addr(instance, "xrLoadRenderModelFB", (PFN_xrVoidFunction*)&table->LoadRenderModelFB));
+
+ // ---- XR_VARJO_environment_depth_estimation extension commands
+ (get_inst_proc_addr(instance, "xrSetEnvironmentDepthEstimationVARJO", (PFN_xrVoidFunction*)&table->SetEnvironmentDepthEstimationVARJO));
+
+ // ---- XR_VARJO_marker_tracking extension commands
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingVARJO));
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingTimeoutVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingTimeoutVARJO));
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingPredictionVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingPredictionVARJO));
+ (get_inst_proc_addr(instance, "xrGetMarkerSizeVARJO", (PFN_xrVoidFunction*)&table->GetMarkerSizeVARJO));
+ (get_inst_proc_addr(instance, "xrCreateMarkerSpaceVARJO", (PFN_xrVoidFunction*)&table->CreateMarkerSpaceVARJO));
+
+ // ---- XR_MSFT_spatial_anchor_persistence extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorStoreConnectionMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorStoreConnectionMSFT));
+ (get_inst_proc_addr(instance, "xrPersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->PersistSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrEnumeratePersistedSpatialAnchorNamesMSFT", (PFN_xrVoidFunction*)&table->EnumeratePersistedSpatialAnchorNamesMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFromPersistedNameMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFromPersistedNameMSFT));
+ (get_inst_proc_addr(instance, "xrUnpersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->UnpersistSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrClearSpatialAnchorStoreMSFT", (PFN_xrVoidFunction*)&table->ClearSpatialAnchorStoreMSFT));
+
+ // ---- XR_OCULUS_audio_device_guid extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrGetAudioOutputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioOutputDeviceGuidOculus));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrGetAudioInputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioInputDeviceGuidOculus));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_ALMALENCE_digital_lens_control extension commands
+ (get_inst_proc_addr(instance, "xrSetDigitalLensControlALMALENCE", (PFN_xrVoidFunction*)&table->SetDigitalLensControlALMALENCE));
+
+ // ---- XR_FB_passthrough_keyboard_hands extension commands
+ (get_inst_proc_addr(instance, "xrPassthroughLayerSetKeyboardHandsIntensityFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetKeyboardHandsIntensityFB));
+}
+
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.h b/thirdparty/openxr/src/xr_generated_dispatch_table.h
new file mode 100644
index 0000000000..34e0de93f5
--- /dev/null
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.h
@@ -0,0 +1,355 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See utility_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+// Generated dispatch table
+struct XrGeneratedDispatchTable {
+
+ // ---- Core 1.0 commands
+ PFN_xrGetInstanceProcAddr GetInstanceProcAddr;
+ PFN_xrEnumerateApiLayerProperties EnumerateApiLayerProperties;
+ PFN_xrEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
+ PFN_xrCreateInstance CreateInstance;
+ PFN_xrDestroyInstance DestroyInstance;
+ PFN_xrGetInstanceProperties GetInstanceProperties;
+ PFN_xrPollEvent PollEvent;
+ PFN_xrResultToString ResultToString;
+ PFN_xrStructureTypeToString StructureTypeToString;
+ PFN_xrGetSystem GetSystem;
+ PFN_xrGetSystemProperties GetSystemProperties;
+ PFN_xrEnumerateEnvironmentBlendModes EnumerateEnvironmentBlendModes;
+ PFN_xrCreateSession CreateSession;
+ PFN_xrDestroySession DestroySession;
+ PFN_xrEnumerateReferenceSpaces EnumerateReferenceSpaces;
+ PFN_xrCreateReferenceSpace CreateReferenceSpace;
+ PFN_xrGetReferenceSpaceBoundsRect GetReferenceSpaceBoundsRect;
+ PFN_xrCreateActionSpace CreateActionSpace;
+ PFN_xrLocateSpace LocateSpace;
+ PFN_xrDestroySpace DestroySpace;
+ PFN_xrEnumerateViewConfigurations EnumerateViewConfigurations;
+ PFN_xrGetViewConfigurationProperties GetViewConfigurationProperties;
+ PFN_xrEnumerateViewConfigurationViews EnumerateViewConfigurationViews;
+ PFN_xrEnumerateSwapchainFormats EnumerateSwapchainFormats;
+ PFN_xrCreateSwapchain CreateSwapchain;
+ PFN_xrDestroySwapchain DestroySwapchain;
+ PFN_xrEnumerateSwapchainImages EnumerateSwapchainImages;
+ PFN_xrAcquireSwapchainImage AcquireSwapchainImage;
+ PFN_xrWaitSwapchainImage WaitSwapchainImage;
+ PFN_xrReleaseSwapchainImage ReleaseSwapchainImage;
+ PFN_xrBeginSession BeginSession;
+ PFN_xrEndSession EndSession;
+ PFN_xrRequestExitSession RequestExitSession;
+ PFN_xrWaitFrame WaitFrame;
+ PFN_xrBeginFrame BeginFrame;
+ PFN_xrEndFrame EndFrame;
+ PFN_xrLocateViews LocateViews;
+ PFN_xrStringToPath StringToPath;
+ PFN_xrPathToString PathToString;
+ PFN_xrCreateActionSet CreateActionSet;
+ PFN_xrDestroyActionSet DestroyActionSet;
+ PFN_xrCreateAction CreateAction;
+ PFN_xrDestroyAction DestroyAction;
+ PFN_xrSuggestInteractionProfileBindings SuggestInteractionProfileBindings;
+ PFN_xrAttachSessionActionSets AttachSessionActionSets;
+ PFN_xrGetCurrentInteractionProfile GetCurrentInteractionProfile;
+ PFN_xrGetActionStateBoolean GetActionStateBoolean;
+ PFN_xrGetActionStateFloat GetActionStateFloat;
+ PFN_xrGetActionStateVector2f GetActionStateVector2f;
+ PFN_xrGetActionStatePose GetActionStatePose;
+ PFN_xrSyncActions SyncActions;
+ PFN_xrEnumerateBoundSourcesForAction EnumerateBoundSourcesForAction;
+ PFN_xrGetInputSourceLocalizedName GetInputSourceLocalizedName;
+ PFN_xrApplyHapticFeedback ApplyHapticFeedback;
+ PFN_xrStopHapticFeedback StopHapticFeedback;
+
+ // ---- XR_KHR_android_thread_settings extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ PFN_xrSetAndroidApplicationThreadKHR SetAndroidApplicationThreadKHR;
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_android_surface_swapchain extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ PFN_xrCreateSwapchainAndroidSurfaceKHR CreateSwapchainAndroidSurfaceKHR;
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_opengl_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+ PFN_xrGetOpenGLGraphicsRequirementsKHR GetOpenGLGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
+
+ // ---- XR_KHR_opengl_es_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+ PFN_xrGetOpenGLESGraphicsRequirementsKHR GetOpenGLESGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+
+ // ---- XR_KHR_vulkan_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanInstanceExtensionsKHR GetVulkanInstanceExtensionsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanDeviceExtensionsKHR GetVulkanDeviceExtensionsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsDeviceKHR GetVulkanGraphicsDeviceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsRequirementsKHR GetVulkanGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_KHR_D3D11_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+ PFN_xrGetD3D11GraphicsRequirementsKHR GetD3D11GraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_D3D11)
+
+ // ---- XR_KHR_D3D12_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+ PFN_xrGetD3D12GraphicsRequirementsKHR GetD3D12GraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_D3D12)
+
+ // ---- XR_KHR_visibility_mask extension commands
+ PFN_xrGetVisibilityMaskKHR GetVisibilityMaskKHR;
+
+ // ---- XR_KHR_win32_convert_performance_counter_time extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrConvertWin32PerformanceCounterToTimeKHR ConvertWin32PerformanceCounterToTimeKHR;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrConvertTimeToWin32PerformanceCounterKHR ConvertTimeToWin32PerformanceCounterKHR;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_KHR_convert_timespec_time extension commands
+#if defined(XR_USE_TIMESPEC)
+ PFN_xrConvertTimespecTimeToTimeKHR ConvertTimespecTimeToTimeKHR;
+#endif // defined(XR_USE_TIMESPEC)
+#if defined(XR_USE_TIMESPEC)
+ PFN_xrConvertTimeToTimespecTimeKHR ConvertTimeToTimespecTimeKHR;
+#endif // defined(XR_USE_TIMESPEC)
+
+ // ---- XR_KHR_loader_init extension commands
+ PFN_xrInitializeLoaderKHR InitializeLoaderKHR;
+
+ // ---- XR_KHR_vulkan_enable2 extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrCreateVulkanInstanceKHR CreateVulkanInstanceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrCreateVulkanDeviceKHR CreateVulkanDeviceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsDevice2KHR GetVulkanGraphicsDevice2KHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsRequirements2KHR GetVulkanGraphicsRequirements2KHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_EXT_performance_settings extension commands
+ PFN_xrPerfSettingsSetPerformanceLevelEXT PerfSettingsSetPerformanceLevelEXT;
+
+ // ---- XR_EXT_thermal_query extension commands
+ PFN_xrThermalGetTemperatureTrendEXT ThermalGetTemperatureTrendEXT;
+
+ // ---- XR_EXT_debug_utils extension commands
+ PFN_xrSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
+ PFN_xrCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
+ PFN_xrDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
+ PFN_xrSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
+ PFN_xrSessionBeginDebugUtilsLabelRegionEXT SessionBeginDebugUtilsLabelRegionEXT;
+ PFN_xrSessionEndDebugUtilsLabelRegionEXT SessionEndDebugUtilsLabelRegionEXT;
+ PFN_xrSessionInsertDebugUtilsLabelEXT SessionInsertDebugUtilsLabelEXT;
+
+ // ---- XR_MSFT_spatial_anchor extension commands
+ PFN_xrCreateSpatialAnchorMSFT CreateSpatialAnchorMSFT;
+ PFN_xrCreateSpatialAnchorSpaceMSFT CreateSpatialAnchorSpaceMSFT;
+ PFN_xrDestroySpatialAnchorMSFT DestroySpatialAnchorMSFT;
+
+ // ---- XR_EXT_conformance_automation extension commands
+ PFN_xrSetInputDeviceActiveEXT SetInputDeviceActiveEXT;
+ PFN_xrSetInputDeviceStateBoolEXT SetInputDeviceStateBoolEXT;
+ PFN_xrSetInputDeviceStateFloatEXT SetInputDeviceStateFloatEXT;
+ PFN_xrSetInputDeviceStateVector2fEXT SetInputDeviceStateVector2fEXT;
+ PFN_xrSetInputDeviceLocationEXT SetInputDeviceLocationEXT;
+
+ // ---- XR_MSFT_spatial_graph_bridge extension commands
+ PFN_xrCreateSpatialGraphNodeSpaceMSFT CreateSpatialGraphNodeSpaceMSFT;
+
+ // ---- XR_EXT_hand_tracking extension commands
+ PFN_xrCreateHandTrackerEXT CreateHandTrackerEXT;
+ PFN_xrDestroyHandTrackerEXT DestroyHandTrackerEXT;
+ PFN_xrLocateHandJointsEXT LocateHandJointsEXT;
+
+ // ---- XR_MSFT_hand_tracking_mesh extension commands
+ PFN_xrCreateHandMeshSpaceMSFT CreateHandMeshSpaceMSFT;
+ PFN_xrUpdateHandMeshMSFT UpdateHandMeshMSFT;
+
+ // ---- XR_MSFT_controller_model extension commands
+ PFN_xrGetControllerModelKeyMSFT GetControllerModelKeyMSFT;
+ PFN_xrLoadControllerModelMSFT LoadControllerModelMSFT;
+ PFN_xrGetControllerModelPropertiesMSFT GetControllerModelPropertiesMSFT;
+ PFN_xrGetControllerModelStateMSFT GetControllerModelStateMSFT;
+
+ // ---- XR_MSFT_perception_anchor_interop extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT CreateSpatialAnchorFromPerceptionAnchorMSFT;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT TryGetPerceptionAnchorFromSpatialAnchorMSFT;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_MSFT_composition_layer_reprojection extension commands
+ PFN_xrEnumerateReprojectionModesMSFT EnumerateReprojectionModesMSFT;
+
+ // ---- XR_FB_swapchain_update_state extension commands
+ PFN_xrUpdateSwapchainFB UpdateSwapchainFB;
+ PFN_xrGetSwapchainStateFB GetSwapchainStateFB;
+
+ // ---- XR_MSFT_scene_understanding extension commands
+ PFN_xrEnumerateSceneComputeFeaturesMSFT EnumerateSceneComputeFeaturesMSFT;
+ PFN_xrCreateSceneObserverMSFT CreateSceneObserverMSFT;
+ PFN_xrDestroySceneObserverMSFT DestroySceneObserverMSFT;
+ PFN_xrCreateSceneMSFT CreateSceneMSFT;
+ PFN_xrDestroySceneMSFT DestroySceneMSFT;
+ PFN_xrComputeNewSceneMSFT ComputeNewSceneMSFT;
+ PFN_xrGetSceneComputeStateMSFT GetSceneComputeStateMSFT;
+ PFN_xrGetSceneComponentsMSFT GetSceneComponentsMSFT;
+ PFN_xrLocateSceneComponentsMSFT LocateSceneComponentsMSFT;
+ PFN_xrGetSceneMeshBuffersMSFT GetSceneMeshBuffersMSFT;
+
+ // ---- XR_MSFT_scene_understanding_serialization extension commands
+ PFN_xrDeserializeSceneMSFT DeserializeSceneMSFT;
+ PFN_xrGetSerializedSceneFragmentDataMSFT GetSerializedSceneFragmentDataMSFT;
+
+ // ---- XR_FB_display_refresh_rate extension commands
+ PFN_xrEnumerateDisplayRefreshRatesFB EnumerateDisplayRefreshRatesFB;
+ PFN_xrGetDisplayRefreshRateFB GetDisplayRefreshRateFB;
+ PFN_xrRequestDisplayRefreshRateFB RequestDisplayRefreshRateFB;
+
+ // ---- XR_HTCX_vive_tracker_interaction extension commands
+ PFN_xrEnumerateViveTrackerPathsHTCX EnumerateViveTrackerPathsHTCX;
+
+ // ---- XR_HTC_facial_tracking extension commands
+ PFN_xrCreateFacialTrackerHTC CreateFacialTrackerHTC;
+ PFN_xrDestroyFacialTrackerHTC DestroyFacialTrackerHTC;
+ PFN_xrGetFacialExpressionsHTC GetFacialExpressionsHTC;
+
+ // ---- XR_FB_color_space extension commands
+ PFN_xrEnumerateColorSpacesFB EnumerateColorSpacesFB;
+ PFN_xrSetColorSpaceFB SetColorSpaceFB;
+
+ // ---- XR_FB_hand_tracking_mesh extension commands
+ PFN_xrGetHandMeshFB GetHandMeshFB;
+
+ // ---- XR_FB_foveation extension commands
+ PFN_xrCreateFoveationProfileFB CreateFoveationProfileFB;
+ PFN_xrDestroyFoveationProfileFB DestroyFoveationProfileFB;
+
+ // ---- XR_FB_keyboard_tracking extension commands
+ PFN_xrQuerySystemTrackedKeyboardFB QuerySystemTrackedKeyboardFB;
+ PFN_xrCreateKeyboardSpaceFB CreateKeyboardSpaceFB;
+
+ // ---- XR_FB_triangle_mesh extension commands
+ PFN_xrCreateTriangleMeshFB CreateTriangleMeshFB;
+ PFN_xrDestroyTriangleMeshFB DestroyTriangleMeshFB;
+ PFN_xrTriangleMeshGetVertexBufferFB TriangleMeshGetVertexBufferFB;
+ PFN_xrTriangleMeshGetIndexBufferFB TriangleMeshGetIndexBufferFB;
+ PFN_xrTriangleMeshBeginUpdateFB TriangleMeshBeginUpdateFB;
+ PFN_xrTriangleMeshEndUpdateFB TriangleMeshEndUpdateFB;
+ PFN_xrTriangleMeshBeginVertexBufferUpdateFB TriangleMeshBeginVertexBufferUpdateFB;
+ PFN_xrTriangleMeshEndVertexBufferUpdateFB TriangleMeshEndVertexBufferUpdateFB;
+
+ // ---- XR_FB_passthrough extension commands
+ PFN_xrCreatePassthroughFB CreatePassthroughFB;
+ PFN_xrDestroyPassthroughFB DestroyPassthroughFB;
+ PFN_xrPassthroughStartFB PassthroughStartFB;
+ PFN_xrPassthroughPauseFB PassthroughPauseFB;
+ PFN_xrCreatePassthroughLayerFB CreatePassthroughLayerFB;
+ PFN_xrDestroyPassthroughLayerFB DestroyPassthroughLayerFB;
+ PFN_xrPassthroughLayerPauseFB PassthroughLayerPauseFB;
+ PFN_xrPassthroughLayerResumeFB PassthroughLayerResumeFB;
+ PFN_xrPassthroughLayerSetStyleFB PassthroughLayerSetStyleFB;
+ PFN_xrCreateGeometryInstanceFB CreateGeometryInstanceFB;
+ PFN_xrDestroyGeometryInstanceFB DestroyGeometryInstanceFB;
+ PFN_xrGeometryInstanceSetTransformFB GeometryInstanceSetTransformFB;
+
+ // ---- XR_FB_render_model extension commands
+ PFN_xrEnumerateRenderModelPathsFB EnumerateRenderModelPathsFB;
+ PFN_xrGetRenderModelPropertiesFB GetRenderModelPropertiesFB;
+ PFN_xrLoadRenderModelFB LoadRenderModelFB;
+
+ // ---- XR_VARJO_environment_depth_estimation extension commands
+ PFN_xrSetEnvironmentDepthEstimationVARJO SetEnvironmentDepthEstimationVARJO;
+
+ // ---- XR_VARJO_marker_tracking extension commands
+ PFN_xrSetMarkerTrackingVARJO SetMarkerTrackingVARJO;
+ PFN_xrSetMarkerTrackingTimeoutVARJO SetMarkerTrackingTimeoutVARJO;
+ PFN_xrSetMarkerTrackingPredictionVARJO SetMarkerTrackingPredictionVARJO;
+ PFN_xrGetMarkerSizeVARJO GetMarkerSizeVARJO;
+ PFN_xrCreateMarkerSpaceVARJO CreateMarkerSpaceVARJO;
+
+ // ---- XR_MSFT_spatial_anchor_persistence extension commands
+ PFN_xrCreateSpatialAnchorStoreConnectionMSFT CreateSpatialAnchorStoreConnectionMSFT;
+ PFN_xrDestroySpatialAnchorStoreConnectionMSFT DestroySpatialAnchorStoreConnectionMSFT;
+ PFN_xrPersistSpatialAnchorMSFT PersistSpatialAnchorMSFT;
+ PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT EnumeratePersistedSpatialAnchorNamesMSFT;
+ PFN_xrCreateSpatialAnchorFromPersistedNameMSFT CreateSpatialAnchorFromPersistedNameMSFT;
+ PFN_xrUnpersistSpatialAnchorMSFT UnpersistSpatialAnchorMSFT;
+ PFN_xrClearSpatialAnchorStoreMSFT ClearSpatialAnchorStoreMSFT;
+
+ // ---- XR_OCULUS_audio_device_guid extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrGetAudioOutputDeviceGuidOculus GetAudioOutputDeviceGuidOculus;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrGetAudioInputDeviceGuidOculus GetAudioInputDeviceGuidOculus;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_ALMALENCE_digital_lens_control extension commands
+ PFN_xrSetDigitalLensControlALMALENCE SetDigitalLensControlALMALENCE;
+
+ // ---- XR_FB_passthrough_keyboard_hands extension commands
+ PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB PassthroughLayerSetKeyboardHandsIntensityFB;
+};
+
+
+// Prototype for dispatch table helper function
+void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
+ XrInstance instance,
+ PFN_xrGetInstanceProcAddr get_inst_proc_addr);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/volk/volk.c b/thirdparty/volk/volk.c
index bb8b928326..c3383ee41d 100644
--- a/thirdparty/volk/volk.c
+++ b/thirdparty/volk/volk.c
@@ -176,6 +176,9 @@ static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*,
vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2");
vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2");
#endif /* defined(VK_VERSION_1_1) */
+#if defined(VK_VERSION_1_3)
+ vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)load(context, "vkGetPhysicalDeviceToolProperties");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_EXT_acquire_drm_display)
vkAcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)load(context, "vkAcquireDrmDisplayEXT");
vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)load(context, "vkGetDrmDisplayEXT");
@@ -503,6 +506,44 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
+ vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
+ vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
+ vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
+ vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
+ vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
+ vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
+ vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
+ vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
+ vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
+ vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
+ vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
+ vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
+ vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
+ vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
+ vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
+ vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
+ vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
+ vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
+ vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
+ vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
+ vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
+ vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
+ vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
+ vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
+ vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
+ vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
+ vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
+ vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
+ vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
+ vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
+ vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
+ vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
+ vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
+ vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
+ vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
#endif /* defined(VK_AMD_buffer_marker) */
@@ -593,6 +634,9 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
@@ -619,6 +663,13 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
#if defined(VK_EXT_vertex_input_dynamic_state)
vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
+ vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
+ vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
+ vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+ vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
@@ -714,6 +765,10 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
+ vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
@@ -752,6 +807,11 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
#if defined(VK_KHR_maintenance3)
vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
+ vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
+ vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
@@ -1063,6 +1123,44 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ table->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
+ table->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
+ table->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
+ table->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
+ table->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
+ table->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
+ table->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
+ table->vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
+ table->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
+ table->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
+ table->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
+ table->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
+ table->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
+ table->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
+ table->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
+ table->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
+ table->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
+ table->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
+ table->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
+ table->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
+ table->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
+ table->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
+ table->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
+ table->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
+ table->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
+ table->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
+ table->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
+ table->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
+ table->vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
+ table->vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
+ table->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
+ table->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
+ table->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
+ table->vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
+ table->vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
+ table->vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
table->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1153,6 +1251,9 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
table->vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ table->vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
table->vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
table->vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
@@ -1179,6 +1280,13 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
#if defined(VK_EXT_vertex_input_dynamic_state)
table->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ table->vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
+ table->vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
+ table->vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
+ table->vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+ table->vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
table->vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
table->vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
@@ -1274,6 +1382,10 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
table->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ table->vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
+ table->vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
@@ -1312,6 +1424,11 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
#if defined(VK_KHR_maintenance3)
table->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ table->vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
+ table->vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
+ table->vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
table->vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
table->vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
@@ -1658,6 +1775,45 @@ PFN_vkResetQueryPool vkResetQueryPool;
PFN_vkSignalSemaphore vkSignalSemaphore;
PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+PFN_vkCmdBeginRendering vkCmdBeginRendering;
+PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+PFN_vkCmdEndRendering vkCmdEndRendering;
+PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+PFN_vkCmdSetCullMode vkCmdSetCullMode;
+PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
+PFN_vkGetPrivateData vkGetPrivateData;
+PFN_vkQueueSubmit2 vkQueueSubmit2;
+PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1792,6 +1948,9 @@ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -1822,6 +1981,13 @@ PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
#if defined(VK_EXT_vertex_input_dynamic_state)
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -1938,6 +2104,10 @@ PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_capabilities)
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
#endif /* defined(VK_KHR_external_fence_capabilities) */
@@ -2005,6 +2175,11 @@ PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
#if defined(VK_KHR_maintenance3)
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
diff --git a/thirdparty/volk/volk.h b/thirdparty/volk/volk.h
index 2e292ca114..cdeedfc5ff 100644
--- a/thirdparty/volk/volk.h
+++ b/thirdparty/volk/volk.h
@@ -15,7 +15,7 @@
#endif
/* VOLK_GENERATE_VERSION_DEFINE */
-#define VOLK_HEADER_VERSION 190
+#define VOLK_HEADER_VERSION 204
/* VOLK_GENERATE_VERSION_DEFINE */
#ifndef VK_NO_PROTOTYPES
@@ -285,6 +285,44 @@ struct VolkDeviceTable
PFN_vkSignalSemaphore vkSignalSemaphore;
PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ PFN_vkCmdBeginRendering vkCmdBeginRendering;
+ PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+ PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+ PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+ PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+ PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+ PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+ PFN_vkCmdEndRendering vkCmdEndRendering;
+ PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+ PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+ PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+ PFN_vkCmdSetCullMode vkCmdSetCullMode;
+ PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+ PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+ PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+ PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+ PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+ PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+ PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+ PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+ PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+ PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+ PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+ PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+ PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+ PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+ PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+ PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+ PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+ PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+ PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+ PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+ PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+ PFN_vkGetPrivateData vkGetPrivateData;
+ PFN_vkQueueSubmit2 vkQueueSubmit2;
+ PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -375,6 +413,9 @@ struct VolkDeviceTable
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -401,6 +442,13 @@ struct VolkDeviceTable
#if defined(VK_EXT_vertex_input_dynamic_state)
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+ PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+ PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+ PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+ PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -496,6 +544,10 @@ struct VolkDeviceTable
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+ PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
PFN_vkGetFenceFdKHR vkGetFenceFdKHR;
PFN_vkImportFenceFdKHR vkImportFenceFdKHR;
@@ -534,6 +586,11 @@ struct VolkDeviceTable
#if defined(VK_KHR_maintenance3)
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+ PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+ PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR;
@@ -872,6 +929,45 @@ extern PFN_vkResetQueryPool vkResetQueryPool;
extern PFN_vkSignalSemaphore vkSignalSemaphore;
extern PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+extern PFN_vkCmdBeginRendering vkCmdBeginRendering;
+extern PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+extern PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+extern PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+extern PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+extern PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+extern PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+extern PFN_vkCmdEndRendering vkCmdEndRendering;
+extern PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+extern PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+extern PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+extern PFN_vkCmdSetCullMode vkCmdSetCullMode;
+extern PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+extern PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+extern PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+extern PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+extern PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+extern PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+extern PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+extern PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+extern PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+extern PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+extern PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+extern PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+extern PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+extern PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+extern PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+extern PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+extern PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+extern PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+extern PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+extern PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+extern PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+extern PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
+extern PFN_vkGetPrivateData vkGetPrivateData;
+extern PFN_vkQueueSubmit2 vkQueueSubmit2;
+extern PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
extern PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1006,6 +1102,9 @@ extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
extern PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
extern PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+extern PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
extern PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
extern PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -1036,6 +1135,13 @@ extern PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
#if defined(VK_EXT_vertex_input_dynamic_state)
extern PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+extern PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+extern PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+extern PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+extern PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+extern PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
extern PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
extern PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -1152,6 +1258,10 @@ extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
extern PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
extern PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+extern PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+extern PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_capabilities)
extern PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
#endif /* defined(VK_KHR_external_fence_capabilities) */
@@ -1219,6 +1329,11 @@ extern PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
#if defined(VK_KHR_maintenance3)
extern PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+extern PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+extern PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+extern PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
extern PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
extern PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
diff --git a/thirdparty/vulkan/patches/01-VMA-fix-nullability.patch b/thirdparty/vulkan/patches/01-VMA-fix-nullability.patch
deleted file mode 100644
index 7deada97b0..0000000000
--- a/thirdparty/vulkan/patches/01-VMA-fix-nullability.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
-index 52b403bede..d88c305a7c 100644
---- a/thirdparty/vulkan/vk_mem_alloc.h
-+++ b/thirdparty/vulkan/vk_mem_alloc.h
-@@ -2366,7 +2366,7 @@ VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(
- */
- VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(
- VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- VmaVirtualAllocation allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
-+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
-
- /** \brief Allocates new virtual allocation inside given #VmaVirtualBlock.
-
-diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
-index d1138a7bc8..74c66b9789 100644
---- a/thirdparty/vulkan/vk_mem_alloc.h
-+++ b/thirdparty/vulkan/vk_mem_alloc.h
-@@ -2386,7 +2386,7 @@ If the allocation fails due to not enough free space available, `VK_ERROR_OUT_OF
- VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(
- VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
-- VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
-+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
- VkDeviceSize* VMA_NULLABLE pOffset);
-
- /** \brief Frees virtual allocation inside given #VmaVirtualBlock.
-@@ -2391,7 +2391,7 @@ It is correct to call this function with `allocation == VK_NULL_HANDLE` - it doe
- */
- VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(
- VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- VmaVirtualAllocation allocation);
-+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation);
-
- /** \brief Frees all virtual allocations inside given #VmaVirtualBlock.
-
-@@ -2408,7 +2408,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(
- */
- VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(
- VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- VmaVirtualAllocation allocation,
-+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation,
- void* VMA_NULLABLE pUserData);
-
- /** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
-@@ -17835,7 +17835,7 @@ VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(VmaVirtualBlock VMA_N
- }
-
- VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- VmaVirtualAllocation allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
-+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
- {
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pVirtualAllocInfo != VMA_NULL);
- VMA_DEBUG_LOG("vmaGetVirtualAllocationInfo");
-@@ -17853,7 +17853,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_N
- return virtualBlock->Allocate(*pCreateInfo, *pAllocation, pOffset);
- }
-
--VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation allocation)
-+VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation)
- {
- if(allocation != VK_NULL_HANDLE)
- {
-@@ -17873,7 +17873,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(VmaVirtualBlock VMA_NOT_NUL
- }
-
- VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- VmaVirtualAllocation allocation, void* VMA_NULLABLE pUserData)
-+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, void* VMA_NULLABLE pUserData)
- {
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
- VMA_DEBUG_LOG("vmaSetVirtualAllocationUserData");
-@@ -17848,7 +17848,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_
- }
-
- VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
-- const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
-+ const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
- VkDeviceSize* VMA_NULLABLE pOffset)
- {
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pAllocation != VMA_NULL);
diff --git a/thirdparty/vulkan/patches/03-VMA-universal-pools.patch b/thirdparty/vulkan/patches/03-VMA-universal-pools.patch
deleted file mode 100644
index a5de3aaace..0000000000
--- a/thirdparty/vulkan/patches/03-VMA-universal-pools.patch
+++ /dev/null
@@ -1,567 +0,0 @@
-diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
-index 74c66b9789..89e00e6326 100644
---- a/thirdparty/vulkan/vk_mem_alloc.h
-+++ b/thirdparty/vulkan/vk_mem_alloc.h
-@@ -1127,31 +1127,26 @@ typedef struct VmaAllocationCreateInfo
- /** \brief Intended usage of memory.
-
- You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n
-- If `pool` is not null, this member is ignored.
- */
- VmaMemoryUsage usage;
- /** \brief Flags that must be set in a Memory Type chosen for an allocation.
-
-- Leave 0 if you specify memory requirements in other way. \n
-- If `pool` is not null, this member is ignored.*/
-+ Leave 0 if you specify memory requirements in other way.*/
- VkMemoryPropertyFlags requiredFlags;
- /** \brief Flags that preferably should be set in a memory type chosen for an allocation.
-
-- Set to 0 if no additional flags are preferred. \n
-- If `pool` is not null, this member is ignored. */
-+ Set to 0 if no additional flags are preferred.*/
- VkMemoryPropertyFlags preferredFlags;
- /** \brief Bitmask containing one bit set for every memory type acceptable for this allocation.
-
- Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if
- it meets other requirements specified by this structure, with no further
- restrictions on memory type index. \n
-- If `pool` is not null, this member is ignored.
- */
- uint32_t memoryTypeBits;
- /** \brief Pool that this allocation should be created in.
-
-- Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members:
-- `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored.
-+ Leave `VK_NULL_HANDLE` to allocate from default pool.
- */
- VmaPool VMA_NULLABLE pool;
- /** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData().
-@@ -1173,9 +1168,6 @@ typedef struct VmaAllocationCreateInfo
- /// Describes parameter of created #VmaPool.
- typedef struct VmaPoolCreateInfo
- {
-- /** \brief Vulkan memory type index to allocate this pool from.
-- */
-- uint32_t memoryTypeIndex;
- /** \brief Use combination of #VmaPoolCreateFlagBits.
- */
- VmaPoolCreateFlags flags;
-@@ -10904,13 +10896,12 @@ struct VmaPool_T
- friend struct VmaPoolListItemTraits;
- VMA_CLASS_NO_COPY(VmaPool_T)
- public:
-- VmaBlockVector m_BlockVector;
-- VmaDedicatedAllocationList m_DedicatedAllocations;
-+ VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES];
-+ VmaDedicatedAllocationList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES];
-
- VmaPool_T(
- VmaAllocator hAllocator,
-- const VmaPoolCreateInfo& createInfo,
-- VkDeviceSize preferredBlockSize);
-+ const VmaPoolCreateInfo& createInfo);
- ~VmaPool_T();
-
- uint32_t GetId() const { return m_Id; }
-@@ -10924,6 +10915,7 @@ public:
- #endif
-
- private:
-+ const VmaAllocator m_hAllocator;
- uint32_t m_Id;
- char* m_Name;
- VmaPool_T* m_PrevPool = VMA_NULL;
-@@ -11405,8 +11397,10 @@ private:
-
- void ValidateVulkanFunctions();
-
-+public: // I'm sorry
- VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex);
-
-+private:
- VkResult AllocateMemoryOfType(
- VmaPool pool,
- VkDeviceSize size,
-@@ -14176,30 +14170,36 @@ void VmaDefragmentationContext_T::AddPools(uint32_t poolCount, const VmaPool* pP
- {
- VmaPool pool = pPools[poolIndex];
- VMA_ASSERT(pool);
-- // Pools with algorithm other than default are not defragmented.
-- if (pool->m_BlockVector.GetAlgorithm() == 0)
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
- {
-- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
--
-- for (size_t i = m_CustomPoolContexts.size(); i--; )
-+ if(pool->m_pBlockVectors[memTypeIndex])
- {
-- if (m_CustomPoolContexts[i]->GetCustomPool() == pool)
-+ // Pools with algorithm other than default are not defragmented.
-+ if (pool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
- {
-- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
-- break;
-- }
-- }
-+ VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
-
-- if (!pBlockVectorDefragCtx)
-- {
-- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
-- m_hAllocator,
-- pool,
-- &pool->m_BlockVector);
-- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
-- }
-+ for (size_t i = m_CustomPoolContexts.size(); i--; )
-+ {
-+ if (m_CustomPoolContexts[i]->GetCustomPool() == pool)
-+ {
-+ pBlockVectorDefragCtx = m_CustomPoolContexts[i];
-+ break;
-+ }
-+ }
-+
-+ if (!pBlockVectorDefragCtx)
-+ {
-+ pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
-+ m_hAllocator,
-+ pool,
-+ pool->m_pBlockVectors[memTypeIndex]);
-+ m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
-+ }
-
-- pBlockVectorDefragCtx->AddAll();
-+ pBlockVectorDefragCtx->AddAll();
-+ }
-+ }
- }
- }
- }
-@@ -14214,6 +14214,7 @@ void VmaDefragmentationContext_T::AddAllocations(
- {
- const VmaAllocation hAlloc = pAllocations[allocIndex];
- VMA_ASSERT(hAlloc);
-+ const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
- // DedicatedAlloc cannot be defragmented.
- if (hAlloc->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK)
- {
-@@ -14224,7 +14225,7 @@ void VmaDefragmentationContext_T::AddAllocations(
- if (hAllocPool != VK_NULL_HANDLE)
- {
- // Pools with algorithm other than default are not defragmented.
-- if (hAllocPool->m_BlockVector.GetAlgorithm() == 0)
-+ if (hAllocPool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
- {
- for (size_t i = m_CustomPoolContexts.size(); i--; )
- {
-@@ -14239,7 +14240,7 @@ void VmaDefragmentationContext_T::AddAllocations(
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- hAllocPool,
-- &hAllocPool->m_BlockVector);
-+ hAllocPool->m_pBlockVectors[memTypeIndex]);
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
- }
- }
-@@ -14247,7 +14248,6 @@ void VmaDefragmentationContext_T::AddAllocations(
- // This allocation belongs to default pool.
- else
- {
-- const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
- pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];
- if (!pBlockVectorDefragCtx)
- {
-@@ -14481,41 +14481,61 @@ VkResult VmaDefragmentationContext_T::DefragmentPassEnd()
- #ifndef _VMA_POOL_T_FUNCTIONS
- VmaPool_T::VmaPool_T(
- VmaAllocator hAllocator,
-- const VmaPoolCreateInfo& createInfo,
-- VkDeviceSize preferredBlockSize)
-- : m_BlockVector(
-- hAllocator,
-- this, // hParentPool
-- createInfo.memoryTypeIndex,
-- createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,
-- createInfo.minBlockCount,
-- createInfo.maxBlockCount,
-- (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
-- createInfo.blockSize != 0, // explicitBlockSize
-- createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
-- createInfo.priority,
-- VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),
-- createInfo.pMemoryAllocateNext),
-+ const VmaPoolCreateInfo& createInfo) :
-+ m_hAllocator(hAllocator),
-+ m_pBlockVectors{},
- m_Id(0),
-- m_Name(VMA_NULL) {}
-+ m_Name(VMA_NULL)
-+{
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
-+ {
-+ // Create only supported types
-+ if((hAllocator->GetGlobalMemoryTypeBits() & (1u << memTypeIndex)) != 0)
-+ {
-+ m_pBlockVectors[memTypeIndex] = vma_new(hAllocator, VmaBlockVector)(
-+ hAllocator,
-+ this, // hParentPool
-+ memTypeIndex,
-+ createInfo.blockSize != 0 ? createInfo.blockSize : hAllocator->CalcPreferredBlockSize(memTypeIndex),
-+ createInfo.minBlockCount,
-+ createInfo.maxBlockCount,
-+ (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
-+ false, // explicitBlockSize
-+ createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
-+ createInfo.priority,
-+ VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(memTypeIndex), createInfo.minAllocationAlignment),
-+ createInfo.pMemoryAllocateNext);
-+ }
-+ }
-+}
-
- VmaPool_T::~VmaPool_T()
- {
- VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL);
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
-+ {
-+ vma_delete(m_hAllocator, m_pBlockVectors[memTypeIndex]);
-+ }
- }
-
- void VmaPool_T::SetName(const char* pName)
- {
-- const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks();
-- VmaFreeString(allocs, m_Name);
--
-- if (pName != VMA_NULL)
-- {
-- m_Name = VmaCreateStringCopy(allocs, pName);
-- }
-- else
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
- {
-- m_Name = VMA_NULL;
-+ if(m_pBlockVectors[memTypeIndex])
-+ {
-+ const VkAllocationCallbacks* allocs = m_pBlockVectors[memTypeIndex]->GetAllocator()->GetAllocationCallbacks();
-+ VmaFreeString(allocs, m_Name);
-+
-+ if (pName != VMA_NULL)
-+ {
-+ m_Name = VmaCreateStringCopy(allocs, pName);
-+ }
-+ else
-+ {
-+ m_Name = VMA_NULL;
-+ }
-+ }
- }
- }
- #endif // _VMA_POOL_T_FUNCTIONS
-@@ -15377,15 +15397,22 @@ VkResult VmaAllocator_T::CalcAllocationParams(
- inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
- }
-
-- if(inoutCreateInfo.pool != VK_NULL_HANDLE)
-+ if(inoutCreateInfo.pool != VK_NULL_HANDLE && (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
- {
-- if(inoutCreateInfo.pool->m_BlockVector.HasExplicitBlockSize() &&
-- (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
-+ // Assuming here every block has the same block size and priority.
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
-- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
-- return VK_ERROR_FEATURE_NOT_PRESENT;
-+ if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex])
-+ {
-+ if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->HasExplicitBlockSize())
-+ {
-+ VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
-+ return VK_ERROR_FEATURE_NOT_PRESENT;
-+ }
-+ inoutCreateInfo.priority = inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->GetPriority();
-+ break;
-+ }
- }
-- inoutCreateInfo.priority = inoutCreateInfo.pool->m_BlockVector.GetPriority();
- }
-
- if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
-@@ -15429,67 +15456,46 @@ VkResult VmaAllocator_T::AllocateMemory(
- if(res != VK_SUCCESS)
- return res;
-
-- if(createInfoFinal.pool != VK_NULL_HANDLE)
-+ // Bit mask of memory Vulkan types acceptable for this allocation.
-+ uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
-+ uint32_t memTypeIndex = UINT32_MAX;
-+ res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
-+ // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
-+ if(res != VK_SUCCESS)
-+ return res;
-+ do
- {
-- VmaBlockVector& blockVector = createInfoFinal.pool->m_BlockVector;
-- return AllocateMemoryOfType(
-+ VmaBlockVector* blockVector = createInfoFinal.pool == VK_NULL_HANDLE ? m_pBlockVectors[memTypeIndex] : createInfoFinal.pool->m_pBlockVectors[memTypeIndex];
-+ VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
-+ VmaDedicatedAllocationList& dedicatedAllocations = createInfoFinal.pool == VK_NULL_HANDLE ? m_DedicatedAllocations[memTypeIndex] : createInfoFinal.pool->m_DedicatedAllocations[memTypeIndex];
-+ res = AllocateMemoryOfType(
- createInfoFinal.pool,
- vkMemReq.size,
- vkMemReq.alignment,
-- prefersDedicatedAllocation,
-+ requiresDedicatedAllocation || prefersDedicatedAllocation,
- dedicatedBuffer,
- dedicatedBufferUsage,
- dedicatedImage,
- createInfoFinal,
-- blockVector.GetMemoryTypeIndex(),
-+ memTypeIndex,
- suballocType,
-- createInfoFinal.pool->m_DedicatedAllocations,
-- blockVector,
-+ dedicatedAllocations,
-+ *blockVector,
- allocationCount,
- pAllocations);
-- }
-- else
-- {
-- // Bit mask of memory Vulkan types acceptable for this allocation.
-- uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
-- uint32_t memTypeIndex = UINT32_MAX;
-- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
-- // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
-- if(res != VK_SUCCESS)
-- return res;
-- do
-- {
-- VmaBlockVector* blockVector = m_pBlockVectors[memTypeIndex];
-- VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
-- res = AllocateMemoryOfType(
-- VK_NULL_HANDLE,
-- vkMemReq.size,
-- vkMemReq.alignment,
-- requiresDedicatedAllocation || prefersDedicatedAllocation,
-- dedicatedBuffer,
-- dedicatedBufferUsage,
-- dedicatedImage,
-- createInfoFinal,
-- memTypeIndex,
-- suballocType,
-- m_DedicatedAllocations[memTypeIndex],
-- *blockVector,
-- allocationCount,
-- pAllocations);
-- // Allocation succeeded
-- if(res == VK_SUCCESS)
-- return VK_SUCCESS;
-+ // Allocation succeeded
-+ if(res == VK_SUCCESS)
-+ return VK_SUCCESS;
-
-- // Remove old memTypeIndex from list of possibilities.
-- memoryTypeBits &= ~(1u << memTypeIndex);
-- // Find alternative memTypeIndex.
-- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
-- } while(res == VK_SUCCESS);
-+ // Remove old memTypeIndex from list of possibilities.
-+ memoryTypeBits &= ~(1u << memTypeIndex);
-+ // Find alternative memTypeIndex.
-+ res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
-+ } while(res == VK_SUCCESS);
-
-- // No other matching memory type index could be found.
-- // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
-- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
-- }
-+ // No other matching memory type index could be found.
-+ // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
-+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
-
- void VmaAllocator_T::FreeMemory(
-@@ -15515,16 +15521,16 @@ void VmaAllocator_T::FreeMemory(
- {
- VmaBlockVector* pBlockVector = VMA_NULL;
- VmaPool hPool = allocation->GetParentPool();
-+ const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
- if(hPool != VK_NULL_HANDLE)
- {
-- pBlockVector = &hPool->m_BlockVector;
-+ pBlockVector = hPool->m_pBlockVectors[memTypeIndex];
- }
- else
- {
-- const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
- pBlockVector = m_pBlockVectors[memTypeIndex];
-- VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
- }
-+ VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
- pBlockVector->Free(allocation);
- }
- break;
-@@ -15564,11 +15570,17 @@ void VmaAllocator_T::CalculateStats(VmaStats* pStats)
- VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
- for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
- {
-- VmaBlockVector& blockVector = pool->m_BlockVector;
-- blockVector.AddStats(pStats);
-- const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
-- const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
-- pool->m_DedicatedAllocations.AddStats(pStats, memTypeIndex, memHeapIndex);
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
-+ {
-+ if (pool->m_pBlockVectors[memTypeIndex])
-+ {
-+ VmaBlockVector& blockVector = *pool->m_pBlockVectors[memTypeIndex];
-+ blockVector.AddStats(pStats);
-+ const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
-+ const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
-+ pool->m_DedicatedAllocations[memTypeIndex].AddStats(pStats, memTypeIndex, memHeapIndex);
-+ }
-+ }
- }
- }
-
-@@ -15720,27 +15732,26 @@ VkResult VmaAllocator_T::CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPoo
- {
- return VK_ERROR_INITIALIZATION_FAILED;
- }
-- // Memory type index out of range or forbidden.
-- if(pCreateInfo->memoryTypeIndex >= GetMemoryTypeCount() ||
-- ((1u << pCreateInfo->memoryTypeIndex) & m_GlobalMemoryTypeBits) == 0)
-- {
-- return VK_ERROR_FEATURE_NOT_PRESENT;
-- }
- if(newCreateInfo.minAllocationAlignment > 0)
- {
- VMA_ASSERT(VmaIsPow2(newCreateInfo.minAllocationAlignment));
- }
-
-- const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.memoryTypeIndex);
--
-- *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo, preferredBlockSize);
-+ *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo);
-
-- VkResult res = (*pPool)->m_BlockVector.CreateMinBlocks();
-- if(res != VK_SUCCESS)
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
-- vma_delete(this, *pPool);
-- *pPool = VMA_NULL;
-- return res;
-+ // Create only supported types
-+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
-+ {
-+ VkResult res = (*pPool)->m_pBlockVectors[memTypeIndex]->CreateMinBlocks();
-+ if(res != VK_SUCCESS)
-+ {
-+ vma_delete(this, *pPool);
-+ *pPool = VMA_NULL;
-+ return res;
-+ }
-+ }
- }
-
- // Add to m_Pools.
-@@ -15772,8 +15783,14 @@ void VmaAllocator_T::GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats)
- pPoolStats->unusedRangeCount = 0;
- pPoolStats->blockCount = 0;
-
-- pool->m_BlockVector.AddPoolStats(pPoolStats);
-- pool->m_DedicatedAllocations.AddPoolStats(pPoolStats);
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
-+ {
-+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
-+ {
-+ pool->m_pBlockVectors[memTypeIndex]->AddPoolStats(pPoolStats);
-+ pool->m_DedicatedAllocations[memTypeIndex].AddPoolStats(pPoolStats);
-+ }
-+ }
- }
-
- void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
-@@ -15790,7 +15807,13 @@ void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
-
- VkResult VmaAllocator_T::CheckPoolCorruption(VmaPool hPool)
- {
-- return hPool->m_BlockVector.CheckCorruption();
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
-+ {
-+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
-+ {
-+ return hPool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
-+ }
-+ }
- }
-
- VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
-@@ -15822,18 +15845,21 @@ VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
- VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
- for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
- {
-- if(((1u << pool->m_BlockVector.GetMemoryTypeIndex()) & memoryTypeBits) != 0)
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
-- VkResult localRes = pool->m_BlockVector.CheckCorruption();
-- switch(localRes)
-+ if(pool->m_pBlockVectors[memTypeIndex] && ((1u << memTypeIndex) & memoryTypeBits) != 0)
- {
-- case VK_ERROR_FEATURE_NOT_PRESENT:
-- break;
-- case VK_SUCCESS:
-- finalRes = VK_SUCCESS;
-- break;
-- default:
-- return localRes;
-+ VkResult localRes = pool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
-+ switch(localRes)
-+ {
-+ case VK_ERROR_FEATURE_NOT_PRESENT:
-+ break;
-+ case VK_SUCCESS:
-+ finalRes = VK_SUCCESS;
-+ break;
-+ default:
-+ return localRes;
-+ }
- }
- }
- }
-@@ -16155,7 +16181,7 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
- else
- {
- // Custom pool
-- parentPool->m_DedicatedAllocations.Unregister(allocation);
-+ parentPool->m_DedicatedAllocations[memTypeIndex].Unregister(allocation);
- }
-
- VkDeviceMemory hMemory = allocation->GetMemory();
-@@ -16430,12 +16456,18 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
- json.EndString();
-
- json.BeginObject();
-- pool->m_BlockVector.PrintDetailedMap(json);
--
-- if (!pool->m_DedicatedAllocations.IsEmpty())
-+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
-- json.WriteString("DedicatedAllocations");
-- pool->m_DedicatedAllocations.BuildStatsString(json);
-+ if (pool->m_pBlockVectors[memTypeIndex])
-+ {
-+ pool->m_pBlockVectors[memTypeIndex]->PrintDetailedMap(json);
-+ }
-+
-+ if (!pool->m_DedicatedAllocations[memTypeIndex].IsEmpty())
-+ {
-+ json.WriteString("DedicatedAllocations");
-+ pool->m_DedicatedAllocations->BuildStatsString(json);
-+ }
- }
- json.EndObject();
- }
diff --git a/thirdparty/vulkan/patches/02-VMA-use-volk.patch b/thirdparty/vulkan/patches/VMA-use-volk.patch
index 1b6e0f04b8..1b6e0f04b8 100644
--- a/thirdparty/vulkan/patches/02-VMA-use-volk.patch
+++ b/thirdparty/vulkan/patches/VMA-use-volk.patch
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
index 89e00e6326..6618f1d1f0 100644
--- a/thirdparty/vulkan/vk_mem_alloc.h
+++ b/thirdparty/vulkan/vk_mem_alloc.h
@@ -1,5 +1,5 @@
//
-/// Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.
+// Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -49,7 +49,6 @@ License: MIT
- [Mapping functions](@ref memory_mapping_mapping_functions)
- [Persistently mapped memory](@ref memory_mapping_persistently_mapped_memory)
- [Cache flush and invalidate](@ref memory_mapping_cache_control)
- - [Finding out if memory is mappable](@ref memory_mapping_finding_if_memory_mappable)
- \subpage staying_within_budget
- [Querying for budget](@ref staying_within_budget_querying_for_budget)
- [Controlling memory usage](@ref staying_within_budget_controlling_memory_usage)
@@ -61,12 +60,7 @@ License: MIT
- [Stack](@ref linear_algorithm_stack)
- [Double stack](@ref linear_algorithm_double_stack)
- [Ring buffer](@ref linear_algorithm_ring_buffer)
- - [Buddy allocation algorithm](@ref buddy_algorithm)
- \subpage defragmentation
- - [Defragmenting CPU memory](@ref defragmentation_cpu)
- - [Defragmenting GPU memory](@ref defragmentation_gpu)
- - [Additional notes](@ref defragmentation_additional_notes)
- - [Writing custom allocation algorithm](@ref defragmentation_custom_algorithm)
- \subpage statistics
- [Numeric statistics](@ref statistics_numeric_statistics)
- [JSON dump](@ref statistics_json_dump)
@@ -80,17 +74,19 @@ License: MIT
- [Corruption detection](@ref debugging_memory_usage_corruption_detection)
- \subpage opengl_interop
- \subpage usage_patterns
- - [Common mistakes](@ref usage_patterns_common_mistakes)
- - [Simple patterns](@ref usage_patterns_simple)
- - [Advanced patterns](@ref usage_patterns_advanced)
+ - [GPU-only resource](@ref usage_patterns_gpu_only)
+ - [Staging copy for upload](@ref usage_patterns_staging_copy_upload)
+ - [Readback](@ref usage_patterns_readback)
+ - [Advanced data uploading](@ref usage_patterns_advanced_data_uploading)
+ - [Other use cases](@ref usage_patterns_other_use_cases)
- \subpage configuration
- [Pointers to Vulkan functions](@ref config_Vulkan_functions)
- [Custom host memory allocator](@ref custom_memory_allocator)
- [Device memory allocation callbacks](@ref allocation_callbacks)
- [Device heap memory limit](@ref heap_memory_limit)
- - \subpage vk_khr_dedicated_allocation
- - \subpage enabling_buffer_device_address
- - \subpage vk_amd_device_coherent_memory
+- \subpage vk_khr_dedicated_allocation
+- \subpage enabling_buffer_device_address
+- \subpage vk_amd_device_coherent_memory
- \subpage general_considerations
- [Thread safety](@ref general_considerations_thread_safety)
- [Validation layer warnings](@ref general_considerations_validation_layer_warnings)
@@ -99,8 +95,8 @@ License: MIT
\section main_see_also See also
-- [Product page on GPUOpen](https://gpuopen.com/gaming-product/vulkan-memory-allocator/)
-- [Source repository on GitHub](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
+- [**Product page on GPUOpen**](https://gpuopen.com/gaming-product/vulkan-memory-allocator/)
+- [**Source repository on GitHub**](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
\defgroup group_init Library initialization
@@ -119,6 +115,7 @@ for user-defined purpose without allocating any real GPU memory.
\defgroup group_stats Statistics
\brief API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format.
+See documentation chapter: \ref statistics.
*/
@@ -178,13 +175,6 @@ extern "C" {
#endif // #if VMA_VULKAN_VERSION >= 1001000
#endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES
-#if !defined(VK_VERSION_1_2)
- // This one is tricky. Vulkan specification defines this code as available since
- // Vulkan 1.0, but doesn't actually define it in Vulkan SDK earlier than 1.2.131.
- // See pull request #207.
- #define VK_ERROR_UNKNOWN ((VkResult)-13)
-#endif
-
#if !defined(VMA_DEDICATED_ALLOCATION)
#if VK_KHR_get_memory_requirements2 && VK_KHR_dedicated_allocation
#define VMA_DEDICATED_ALLOCATION 1
@@ -307,9 +297,9 @@ extern "C" {
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-//
+//
// INTERFACE
-//
+//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -453,56 +443,33 @@ typedef enum VmaMemoryUsage
Use other members of VmaAllocationCreateInfo to specify your requirements.
*/
VMA_MEMORY_USAGE_UNKNOWN = 0,
- /** Memory will be used on device only, so fast access from the device is preferred.
- It usually means device-local GPU (video) memory.
- No need to be mappable on host.
- It is roughly equivalent of `D3D12_HEAP_TYPE_DEFAULT`.
-
- Usage:
-
- - Resources written and read by device, e.g. images used as attachments.
- - Resources transferred from host once (immutable) or infrequently and read by
- device multiple times, e.g. textures to be sampled, vertex buffers, uniform
- (constant) buffers, and majority of other types of resources used on GPU.
-
- Allocation may still end up in `HOST_VISIBLE` memory on some implementations.
- In such case, you are free to map it.
- You can use #VMA_ALLOCATION_CREATE_MAPPED_BIT with this usage type.
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
*/
VMA_MEMORY_USAGE_GPU_ONLY = 1,
- /** Memory will be mappable on host.
- It usually means CPU (system) memory.
- Guarantees to be `HOST_VISIBLE` and `HOST_COHERENT`.
- CPU access is typically uncached. Writes may be write-combined.
- Resources created in this pool may still be accessible to the device, but access to them can be slow.
- It is roughly equivalent of `D3D12_HEAP_TYPE_UPLOAD`.
-
- Usage: Staging copy of resources used as transfer source.
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` and `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`.
*/
VMA_MEMORY_USAGE_CPU_ONLY = 2,
/**
- Memory that is both mappable on host (guarantees to be `HOST_VISIBLE`) and preferably fast to access by GPU.
- CPU access is typically uncached. Writes may be write-combined.
-
- Usage: Resources written frequently by host (dynamic), read by device. E.g. textures (with LINEAR layout), vertex buffers, uniform buffers updated every frame or every draw call.
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
*/
VMA_MEMORY_USAGE_CPU_TO_GPU = 3,
- /** Memory mappable on host (guarantees to be `HOST_VISIBLE`) and cached.
- It is roughly equivalent of `D3D12_HEAP_TYPE_READBACK`.
-
- Usage:
-
- - Resources written by device, read by host - results of some computations, e.g. screen capture, average scene luminance for HDR tone mapping.
- - Any resources read or accessed randomly on host, e.g. CPU-side copy of vertex buffer used as source of transfer, but also used for collision detection.
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`.
*/
VMA_MEMORY_USAGE_GPU_TO_CPU = 4,
- /** CPU memory - memory that is preferably not `DEVICE_LOCAL`, but also not guaranteed to be `HOST_VISIBLE`.
-
- Usage: Staging copy of resources moved from GPU memory to CPU memory as part
- of custom paging/residency mechanism, to be moved back to GPU memory when needed.
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Prefers not `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
*/
VMA_MEMORY_USAGE_CPU_COPY = 5,
- /** Lazily allocated GPU memory having `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`.
+ /**
+ Lazily allocated GPU memory having `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`.
Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.
Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with `VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT`.
@@ -510,6 +477,43 @@ typedef enum VmaMemoryUsage
Allocations with this usage are always created as dedicated - it implies #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
*/
VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED = 6,
+ /**
+ Selects best memory type automatically.
+ This flag is recommended for most common use cases.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO = 7,
+ /**
+ Selects best memory type automatically with preference for GPU (device) memory.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE = 8,
+ /**
+ Selects best memory type automatically with preference for CPU (host) memory.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO_PREFER_HOST = 9,
VMA_MEMORY_USAGE_MAX_ENUM = 0x7FFFFFFF
} VmaMemoryUsage;
@@ -570,11 +574,51 @@ typedef enum VmaAllocationCreateFlagBits
*/
VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT = 0x00000100,
/** \brief Set this flag if the allocated memory will have aliasing resources.
- *
+
Usage of this flag prevents supplying `VkMemoryDedicatedAllocateInfoKHR` when #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified.
Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors.
*/
VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT = 0x00000200,
+ /**
+ Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT).
+
+ - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value,
+ you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect.
+ - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`.
+ This includes allocations created in \ref custom_memory_pools.
+
+ Declares that mapped memory will only be written sequentially, e.g. using `memcpy()` or a loop writing number-by-number,
+ never read or accessed randomly, so a memory type can be selected that is uncached and write-combined.
+
+ \warning Violating this declaration may work correctly, but will likely be very slow.
+ Watch out for implicit reads introduces by doing e.g. `pMappedData[i] += x;`
+ Better prepare your data in a local variable and `memcpy()` it to the mapped pointer all at once.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT = 0x00000400,
+ /**
+ Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT).
+
+ - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value,
+ you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect.
+ - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`.
+ This includes allocations created in \ref custom_memory_pools.
+
+ Declares that mapped memory can be read, written, and accessed in random order,
+ so a `HOST_CACHED` memory type is preferred.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT = 0x00000800,
+ /**
+ Together with #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT,
+ it says that despite request for host access, a not-`HOST_VISIBLE` memory type can be selected
+ if it may improve performance.
+
+ By using this flag, you declare that you will check if the allocation ended up in a `HOST_VISIBLE` memory type
+ (e.g. using vmaGetAllocationMemoryProperties()) and if not, you will create some "staging" buffer and
+ issue an explicit transfer to write/read your data.
+ To prepare for this possibility, don't forget to add appropriate flags like
+ `VK_BUFFER_USAGE_TRANSFER_DST_BIT`, `VK_BUFFER_USAGE_TRANSFER_SRC_BIT` to the parameters of created buffer or image.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT = 0x00001000,
/** Allocation strategy that chooses smallest possible free range for the allocation
to minimize memory usage and fragmentation, possibly at the expense of allocation time.
*/
@@ -584,6 +628,11 @@ typedef enum VmaAllocationCreateFlagBits
to minimize allocation time, possibly at the expense of allocation quality.
*/
VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = 0x00020000,
+ /** Allocation strategy that chooses always the lowest offset in available space.
+ This is not the most efficient strategy but achieves highly packed data.
+ Used internally by defragmentation, not recomended in typical usage.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT = 0x00040000,
/** Alias to #VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT.
*/
VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT,
@@ -594,7 +643,8 @@ typedef enum VmaAllocationCreateFlagBits
*/
VMA_ALLOCATION_CREATE_STRATEGY_MASK =
VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT |
- VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT |
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaAllocationCreateFlagBits;
@@ -635,48 +685,60 @@ typedef enum VmaPoolCreateFlagBits
*/
VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT = 0x00000004,
- /** \brief Enables alternative, buddy allocation algorithm in this pool.
-
- It operates on a tree of blocks, each having size that is a power of two and
- a half of its parent's size. Comparing to default algorithm, this one provides
- faster allocation and deallocation and decreased external fragmentation,
- at the expense of more memory wasted (internal fragmentation).
- For details, see documentation chapter \ref buddy_algorithm.
- */
- VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT = 0x00000008,
-
- /** \brief Enables alternative, Two-Level Segregated Fit (TLSF) allocation algorithm in this pool.
-
- This algorithm is based on 2-level lists dividing address space into smaller
- chunks. The first level is aligned to power of two which serves as buckets for requested
- memory to fall into, and the second level is lineary subdivided into lists of free memory.
- This algorithm aims to achieve bounded response time even in the worst case scenario.
- Allocation time can be sometimes slightly longer than compared to other algorithms
- but in return the application can avoid stalls in case of fragmentation, giving
- predictable results, suitable for real-time use cases.
- */
- VMA_POOL_CREATE_TLSF_ALGORITHM_BIT = 0x00000010,
-
/** Bit mask to extract only `ALGORITHM` bits from entire set of flags.
*/
VMA_POOL_CREATE_ALGORITHM_MASK =
- VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT |
- VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT |
- VMA_POOL_CREATE_TLSF_ALGORITHM_BIT,
+ VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT,
VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaPoolCreateFlagBits;
/// Flags to be passed as VmaPoolCreateInfo::flags. See #VmaPoolCreateFlagBits.
typedef VkFlags VmaPoolCreateFlags;
-/// Flags to be used in vmaDefragmentationBegin(). None at the moment. Reserved for future use.
+/// Flags to be passed as VmaDefragmentationInfo::flags.
typedef enum VmaDefragmentationFlagBits
{
- VMA_DEFRAGMENTATION_FLAG_INCREMENTAL = 0x1,
+ /* \brief Use simple but fast algorithm for defragmentation.
+ May not achieve best results but will require least time to compute and least allocations to copy.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT = 0x1,
+ /* \brief Default defragmentation algorithm, applied also when no `ALGORITHM` flag is specified.
+ Offers a balance between defragmentation quality and the amount of allocations and bytes that need to be moved.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT = 0x2,
+ /* \brief Perform full defragmentation of memory.
+ Can result in notably more time to compute and allocations to copy, but will achieve best memory packing.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT = 0x4,
+ /** \brief Use the most roboust algorithm at the cost of time to compute and number of copies to make.
+ Only available when bufferImageGranularity is greater than 1, since it aims to reduce
+ alignment issues between different types of resources.
+ Otherwise falls back to same behavior as #VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT = 0x8,
+
+ /// A bit mask to extract only `ALGORITHM` bits from entire set of flags.
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK =
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT,
+
VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaDefragmentationFlagBits;
typedef VkFlags VmaDefragmentationFlags;
+/// Operation performed on single defragmentation move.
+typedef enum VmaDefragmentationMoveOperation
+{
+ /// Buffer/image has been recreated at `dstMemory` + `dstOffset`, data has been copied, old buffer/image has been destroyed. `srcAllocation` should be changed to point to the new place. This is the default value set by vmaBeginDefragmentationPass().
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY = 0,
+ /// Set this value if you cannot move the allocation. New place reserved `dstMemory` + `dstOffset` will be freed. `srcAllocation` will remain unchanged.
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE = 1,
+ /// Set this value if you decide to abandon the allocation and you destroyed the buffer/image. New place reserved `dstMemory` + `dstOffset` will be freed, along with `srcAllocation`.
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY = 2,
+} VmaDefragmentationMoveOperation;
+
/** @} */
/**
@@ -700,34 +762,10 @@ typedef enum VmaVirtualBlockCreateFlagBits
*/
VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT = 0x00000001,
- /** \brief Enables alternative, buddy allocation algorithm in this virtual block.
-
- It operates on a tree of blocks, each having size that is a power of two and
- a half of its parent's size. Comparing to default algorithm, this one provides
- faster allocation and deallocation and decreased external fragmentation,
- at the expense of more memory wasted (internal fragmentation).
- For details, see documentation chapter \ref buddy_algorithm.
- */
- VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT = 0x00000002,
-
- /** \brief Enables alternative, TLSF allocation algorithm in virtual block.
-
- This algorithm is based on 2-level lists dividing address space into smaller
- chunks. The first level is aligned to power of two which serves as buckets for requested
- memory to fall into, and the second level is lineary subdivided into lists of free memory.
- This algorithm aims to achieve bounded response time even in the worst case scenario.
- Allocation time can be sometimes slightly longer than compared to other algorithms
- but in return the application can avoid stalls in case of fragmentation, giving
- predictable results, suitable for real-time use cases.
- */
- VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT = 0x00000004,
-
/** \brief Bit mask to extract only `ALGORITHM` bits from entire set of flags.
*/
VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK =
- VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT |
- VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT |
- VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT,
+ VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT,
VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaVirtualBlockCreateFlagBits;
@@ -748,6 +786,10 @@ typedef enum VmaVirtualAllocationCreateFlagBits
/** \brief Allocation strategy that tries to minimize allocation time.
*/
VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT,
+ /** Allocation strategy that chooses always the lowest offset in available space.
+ This is not the most efficient strategy but achieves highly packed data.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_PACKED_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT ,
/** \brief A bit mask to extract only `STRATEGY` bits from entire set of flags.
These strategy flags are binary compatible with equivalent flags in #VmaAllocationCreateFlagBits.
@@ -821,10 +863,10 @@ returned structure VmaAllocationInfo.
VK_DEFINE_HANDLE(VmaAllocation)
/** \struct VmaDefragmentationContext
-\brief Represents Opaque object that represents started defragmentation process.
+\brief An opaque object that represents started defragmentation process.
-Fill structure #VmaDefragmentationInfo2 and call function vmaDefragmentationBegin() to create it.
-Call function vmaDefragmentationEnd() to destroy it.
+Fill structure #VmaDefragmentationInfo and call function vmaBeginDefragmentation() to create it.
+Call function vmaEndDefragmentation() to destroy it.
*/
VK_DEFINE_HANDLE(VmaDefragmentationContext)
@@ -943,6 +985,12 @@ typedef struct VmaVulkanFunctions
#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION >= 1001000
PFN_vkGetPhysicalDeviceMemoryProperties2KHR VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties2KHR;
#endif
+#if VMA_VULKAN_VERSION >= 1003000
+ /// Fetch from "vkGetDeviceBufferMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceBufferMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4.
+ PFN_vkGetDeviceBufferMemoryRequirements VMA_NULLABLE vkGetDeviceBufferMemoryRequirements;
+ /// Fetch from "vkGetDeviceImageMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceImageMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4.
+ PFN_vkGetDeviceImageMemoryRequirements VMA_NULLABLE vkGetDeviceImageMemoryRequirements;
+#endif
} VmaVulkanFunctions;
/// Description of a Allocator to be created.
@@ -1051,59 +1099,102 @@ typedef struct VmaAllocatorInfo
@{
*/
-/// Calculated statistics of memory usage in entire allocator.
-typedef struct VmaStatInfo
+/** \brief Calculated statistics of memory usage e.g. in a specific memory type, heap, custom pool, or total.
+
+These are fast to calculate.
+See functions: vmaGetHeapBudgets(), vmaGetPoolStatistics().
+*/
+typedef struct VmaStatistics
{
- /// Number of `VkDeviceMemory` Vulkan memory blocks allocated.
+ /** \brief Number of `VkDeviceMemory` objects - Vulkan memory blocks allocated.
+ */
uint32_t blockCount;
- /// Number of #VmaAllocation allocation objects allocated.
+ /** \brief Number of #VmaAllocation objects allocated.
+
+ Dedicated allocations have their own blocks, so each one adds 1 to `allocationCount` as well as `blockCount`.
+ */
uint32_t allocationCount;
+ /** \brief Number of bytes allocated in `VkDeviceMemory` blocks.
+
+ \note To avoid confusion, please be aware that what Vulkan calls an "allocation" - a whole `VkDeviceMemory` object
+ (e.g. as in `VkPhysicalDeviceLimits::maxMemoryAllocationCount`) is called a "block" in VMA, while VMA calls
+ "allocation" a #VmaAllocation object that represents a memory region sub-allocated from such block, usually for a single buffer or image.
+ */
+ VkDeviceSize blockBytes;
+ /** \brief Total number of bytes occupied by all #VmaAllocation objects.
+
+ Always less or equal than `blockBytes`.
+ Difference `(blockBytes - allocationBytes)` is the amount of memory allocated from Vulkan
+ but unused by any #VmaAllocation.
+ */
+ VkDeviceSize allocationBytes;
+} VmaStatistics;
+
+/** \brief More detailed statistics than #VmaStatistics.
+
+These are slower to calculate. Use for debugging purposes.
+See functions: vmaCalculateStatistics(), vmaCalculatePoolStatistics().
+
+Previous version of the statistics API provided averages, but they have been removed
+because they can be easily calculated as:
+
+\code
+VkDeviceSize allocationSizeAvg = detailedStats.statistics.allocationBytes / detailedStats.statistics.allocationCount;
+VkDeviceSize unusedBytes = detailedStats.statistics.blockBytes - detailedStats.statistics.allocationBytes;
+VkDeviceSize unusedRangeSizeAvg = unusedBytes / detailedStats.unusedRangeCount;
+\endcode
+*/
+typedef struct VmaDetailedStatistics
+{
+ /// Basic statistics.
+ VmaStatistics statistics;
/// Number of free ranges of memory between allocations.
uint32_t unusedRangeCount;
- /// Total number of bytes occupied by all allocations.
- VkDeviceSize usedBytes;
- /// Total number of bytes occupied by unused ranges.
- VkDeviceSize unusedBytes;
- VkDeviceSize allocationSizeMin, allocationSizeAvg, allocationSizeMax;
- VkDeviceSize unusedRangeSizeMin, unusedRangeSizeAvg, unusedRangeSizeMax;
-} VmaStatInfo;
-
-/// General statistics from current state of Allocator.
-typedef struct VmaStats
-{
- VmaStatInfo memoryType[VK_MAX_MEMORY_TYPES];
- VmaStatInfo memoryHeap[VK_MAX_MEMORY_HEAPS];
- VmaStatInfo total;
-} VmaStats;
-
-/// Statistics of current memory usage and available budget, in bytes, for specific memory heap.
-typedef struct VmaBudget
+ /// Smallest allocation size. `VK_WHOLE_SIZE` if there are 0 allocations.
+ VkDeviceSize allocationSizeMin;
+ /// Largest allocation size. 0 if there are 0 allocations.
+ VkDeviceSize allocationSizeMax;
+ /// Smallest empty range size. `VK_WHOLE_SIZE` if there are 0 empty ranges.
+ VkDeviceSize unusedRangeSizeMin;
+ /// Largest empty range size. 0 if there are 0 empty ranges.
+ VkDeviceSize unusedRangeSizeMax;
+} VmaDetailedStatistics;
+
+/** \brief General statistics from current state of the Allocator -
+total memory usage across all memory heaps and types.
+
+These are slower to calculate. Use for debugging purposes.
+See function vmaCalculateStatistics().
+*/
+typedef struct VmaTotalStatistics
{
- /** \brief Sum size of all `VkDeviceMemory` blocks allocated from particular heap, in bytes.
- */
- VkDeviceSize blockBytes;
+ VmaDetailedStatistics memoryType[VK_MAX_MEMORY_TYPES];
+ VmaDetailedStatistics memoryHeap[VK_MAX_MEMORY_HEAPS];
+ VmaDetailedStatistics total;
+} VmaTotalStatistics;
- /** \brief Sum size of all allocations created in particular heap, in bytes.
+/** \brief Statistics of current memory usage and available budget for a specific memory heap.
- Usually less or equal than `blockBytes`.
- Difference `blockBytes - allocationBytes` is the amount of memory allocated but unused -
- available for new allocations or wasted due to fragmentation.
+These are fast to calculate.
+See function vmaGetHeapBudgets().
+*/
+typedef struct VmaBudget
+{
+ /** \brief Statistics fetched from the library.
*/
- VkDeviceSize allocationBytes;
-
+ VmaStatistics statistics;
/** \brief Estimated current memory usage of the program, in bytes.
- Fetched from system using `VK_EXT_memory_budget` extension if enabled.
+ Fetched from system using VK_EXT_memory_budget extension if enabled.
- It might be different than `blockBytes` (usually higher) due to additional implicit objects
+ It might be different than `statistics.blockBytes` (usually higher) due to additional implicit objects
also occupying the memory, like swapchain, pipelines, descriptor heaps, command buffers, or
`VkDeviceMemory` blocks allocated outside of this library, if any.
*/
VkDeviceSize usage;
-
/** \brief Estimated amount of memory available to the program, in bytes.
- Fetched from system using `VK_EXT_memory_budget` extension if enabled.
+ Fetched from system using VK_EXT_memory_budget extension if enabled.
It might be different (most probably smaller) than `VkMemoryHeap::size[heapIndex]` due to factors
external to the program, like other programs also consuming system resources.
@@ -1127,26 +1218,31 @@ typedef struct VmaAllocationCreateInfo
/** \brief Intended usage of memory.
You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n
+ If `pool` is not null, this member is ignored.
*/
VmaMemoryUsage usage;
/** \brief Flags that must be set in a Memory Type chosen for an allocation.
- Leave 0 if you specify memory requirements in other way.*/
+ Leave 0 if you specify memory requirements in other way. \n
+ If `pool` is not null, this member is ignored.*/
VkMemoryPropertyFlags requiredFlags;
/** \brief Flags that preferably should be set in a memory type chosen for an allocation.
- Set to 0 if no additional flags are preferred.*/
+ Set to 0 if no additional flags are preferred. \n
+ If `pool` is not null, this member is ignored. */
VkMemoryPropertyFlags preferredFlags;
/** \brief Bitmask containing one bit set for every memory type acceptable for this allocation.
Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if
it meets other requirements specified by this structure, with no further
restrictions on memory type index. \n
+ If `pool` is not null, this member is ignored.
*/
uint32_t memoryTypeBits;
/** \brief Pool that this allocation should be created in.
- Leave `VK_NULL_HANDLE` to allocate from default pool.
+ Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members:
+ `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored.
*/
VmaPool VMA_NULLABLE pool;
/** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData().
@@ -1168,6 +1264,9 @@ typedef struct VmaAllocationCreateInfo
/// Describes parameter of created #VmaPool.
typedef struct VmaPoolCreateInfo
{
+ /** \brief Vulkan memory type index to allocate this pool from.
+ */
+ uint32_t memoryTypeIndex;
/** \brief Use combination of #VmaPoolCreateFlagBits.
*/
VmaPoolCreateFlags flags;
@@ -1222,33 +1321,6 @@ typedef struct VmaPoolCreateInfo
/** @} */
/**
-\addtogroup group_stats
-@{
-*/
-
-/// Describes parameter of existing #VmaPool.
-typedef struct VmaPoolStats
-{
- /** \brief Total amount of `VkDeviceMemory` allocated from Vulkan for this pool, in bytes.
- */
- VkDeviceSize size;
- /** \brief Total number of bytes in the pool not used by any #VmaAllocation.
- */
- VkDeviceSize unusedSize;
- /** \brief Number of #VmaAllocation objects created from this pool that were not destroyed.
- */
- size_t allocationCount;
- /** \brief Number of continuous memory ranges in the pool not used by any #VmaAllocation.
- */
- size_t unusedRangeCount;
- /** \brief Number of `VkDeviceMemory` blocks allocated for this pool.
- */
- size_t blockCount;
-} VmaPoolStats;
-
-/** @} */
-
-/**
\addtogroup group_alloc
@{
*/
@@ -1307,116 +1379,79 @@ typedef struct VmaAllocationInfo
/** \brief Parameters for defragmentation.
-To be used with function vmaDefragmentationBegin().
+To be used with function vmaBeginDefragmentation().
*/
-typedef struct VmaDefragmentationInfo2
+typedef struct VmaDefragmentationInfo
{
- /** \brief Reserved for future use. Should be 0.
- */
+ /// \brief Use combination of #VmaDefragmentationFlagBits.
VmaDefragmentationFlags flags;
- /** \brief Number of allocations in `pAllocations` array.
- */
- uint32_t allocationCount;
- /** \brief Pointer to array of allocations that can be defragmented.
-
- The array should have `allocationCount` elements.
- The array should not contain nulls.
- Elements in the array should be unique - same allocation cannot occur twice.
- All allocations not present in this array are considered non-moveable during this defragmentation.
- */
- const VmaAllocation VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations;
- /** \brief Optional, output. Pointer to array that will be filled with information whether the allocation at certain index has been changed during defragmentation.
-
- The array should have `allocationCount` elements.
- You can pass null if you are not interested in this information.
- */
- VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged;
- /** \brief Numer of pools in `pPools` array.
- */
- uint32_t poolCount;
- /** \brief Either null or pointer to array of pools to be defragmented.
-
- All the allocations in the specified pools can be moved during defragmentation
- and there is no way to check if they were really moved as in `pAllocationsChanged`,
- so you must query all the allocations in all these pools for new `VkDeviceMemory`
- and offset using vmaGetAllocationInfo() if you might need to recreate buffers
- and images bound to them.
+ /** \brief Custom pool to be defragmented.
- The array should have `poolCount` elements.
- The array should not contain nulls.
- Elements in the array should be unique - same pool cannot occur twice.
-
- Using this array is equivalent to specifying all allocations from the pools in `pAllocations`.
- It might be more efficient.
- */
- const VmaPool VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(poolCount) pPools;
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places using transfers on CPU side, like `memcpy()`, `memmove()`.
-
- `VK_WHOLE_SIZE` means no limit.
- */
- VkDeviceSize maxCpuBytesToMove;
- /** \brief Maximum number of allocations that can be moved to a different place using transfers on CPU side, like `memcpy()`, `memmove()`.
-
- `UINT32_MAX` means no limit.
+ If null then default pools will undergo defragmentation process.
*/
- uint32_t maxCpuAllocationsToMove;
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places using transfers on GPU side, posted to `commandBuffer`.
+ VmaPool VMA_NULLABLE pool;
+ /** \brief Maximum numbers of bytes that can be copied during single pass, while moving allocations to different places.
- `VK_WHOLE_SIZE` means no limit.
+ `0` means no limit.
*/
- VkDeviceSize maxGpuBytesToMove;
- /** \brief Maximum number of allocations that can be moved to a different place using transfers on GPU side, posted to `commandBuffer`.
+ VkDeviceSize maxBytesPerPass;
+ /** \brief Maximum number of allocations that can be moved during single pass to a different place.
- `UINT32_MAX` means no limit.
+ `0` means no limit.
*/
- uint32_t maxGpuAllocationsToMove;
- /** \brief Optional. Command buffer where GPU copy commands will be posted.
-
- If not null, it must be a valid command buffer handle that supports Transfer queue type.
- It must be in the recording state and outside of a render pass instance.
- You need to submit it and make sure it finished execution before calling vmaDefragmentationEnd().
-
- Passing null means that only CPU defragmentation will be performed.
- */
- VkCommandBuffer VMA_NULLABLE commandBuffer;
-} VmaDefragmentationInfo2;
+ uint32_t maxAllocationsPerPass;
+} VmaDefragmentationInfo;
-typedef struct VmaDefragmentationPassMoveInfo
+/// Single move of an allocation to be done for defragmentation.
+typedef struct VmaDefragmentationMove
{
- VmaAllocation VMA_NOT_NULL allocation;
- VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory;
- VkDeviceSize offset;
-} VmaDefragmentationPassMoveInfo;
+ /// Operation to be performed on the allocation by vmaEndDefragmentationPass(). Default value is #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY. You can modify it.
+ VmaDefragmentationMoveOperation operation;
+ /// Allocation that should be moved.
+ VmaAllocation VMA_NOT_NULL srcAllocation;
+ /// Destination memory block where the allocation should be moved.
+ VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE dstMemory;
+ /// Destination offset where the allocation should be moved.
+ VkDeviceSize dstOffset;
+ /// Internal data used by VMA. Do not use or modify!
+ void* VMA_NOT_NULL internalData;
+} VmaDefragmentationMove;
/** \brief Parameters for incremental defragmentation steps.
To be used with function vmaBeginDefragmentationPass().
*/
-typedef struct VmaDefragmentationPassInfo
+typedef struct VmaDefragmentationPassMoveInfo
{
+ /// Number of elements in the `pMoves` array.
uint32_t moveCount;
- VmaDefragmentationPassMoveInfo* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(moveCount) pMoves;
-} VmaDefragmentationPassInfo;
+ /** \brief Array of moves to be performed by the user in the current defragmentation pass.
+
+ Pointer to an array of `moveCount` elements, owned by VMA, created in vmaBeginDefragmentationPass(), destroyed in vmaEndDefragmentationPass().
-/** \brief Deprecated. Optional configuration parameters to be passed to function vmaDefragment().
+ For each element, you should:
+
+ 1. Create a new buffer/image in the place pointed by VmaDefragmentationMove::dstMemory + VmaDefragmentationMove::dstOffset.
+ 2. Copy data from the VmaDefragmentationMove::srcAllocation e.g. using `vkCmdCopyBuffer`, `vkCmdCopyImage`.
+ 3. Make sure these commands finished executing on the GPU.
+ 4. Destroy the old buffer/image.
+
+ Only then you can finish defragmentation pass by calling vmaEndDefragmentationPass().
+ After this call, the allocation will point to the new place in memory.
-\deprecated This is a part of the old interface. It is recommended to use structure #VmaDefragmentationInfo2 and function vmaDefragmentationBegin() instead.
-*/
-typedef struct VmaDefragmentationInfo
-{
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places.
+ Alternatively, if you cannot move specific allocation, you can set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE.
- Default is `VK_WHOLE_SIZE`, which means no limit.
- */
- VkDeviceSize maxBytesToMove;
- /** \brief Maximum number of allocations that can be moved to different place.
+ Alternatively, if you decide you want to completely remove the allocation:
- Default is `UINT32_MAX`, which means no limit.
+ 1. Destroy its buffer/image.
+ 2. Set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY.
+
+ Then, after vmaEndDefragmentationPass() the allocation will be freed.
*/
- uint32_t maxAllocationsToMove;
-} VmaDefragmentationInfo;
+ VmaDefragmentationMove* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(moveCount) pMoves;
+} VmaDefragmentationPassMoveInfo;
-/// Statistics returned by function vmaDefragment().
+/// Statistics returned for defragmentation process in function vmaEndDefragmentation().
typedef struct VmaDefragmentationStats
{
/// Total number of bytes that have been copied while moving allocations to different places.
@@ -1484,7 +1519,7 @@ typedef struct VmaVirtualAllocationCreateInfo
typedef struct VmaVirtualAllocationInfo
{
/** \brief Offset of the allocation.
-
+
Offset at which the allocation was made.
*/
VkDeviceSize offset;
@@ -1572,23 +1607,24 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex(
/** \brief Retrieves statistics from current state of the Allocator.
This function is called "calculate" not "get" because it has to traverse all
-internal data structures, so it may be quite slow. For faster but more brief statistics
-suitable to be called every frame or every allocation, use vmaGetHeapBudgets().
+internal data structures, so it may be quite slow. Use it for debugging purposes.
+For faster but more brief statistics suitable to be called every frame or every allocation,
+use vmaGetHeapBudgets().
Note that when using allocator from multiple threads, returned information may immediately
become outdated.
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics(
VmaAllocator VMA_NOT_NULL allocator,
- VmaStats* VMA_NOT_NULL pStats);
+ VmaTotalStatistics* VMA_NOT_NULL pStats);
-/** \brief Retrieves information about current memory budget for all memory heaps.
+/** \brief Retrieves information about current memory usage and budget for all memory heaps.
\param allocator
\param[out] pBudgets Must point to array with number of elements at least equal to number of memory heaps in physical device used.
This function is called "get" not "calculate" because it is very fast, suitable to be called
-every frame or every allocation. For more detailed statistics use vmaCalculateStats().
+every frame or every allocation. For more detailed statistics use vmaCalculateStatistics().
Note that when using allocator from multiple threads, returned information may immediately
become outdated.
@@ -1631,12 +1667,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex(
It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex.
It internally creates a temporary, dummy buffer that never has memory bound.
-It is just a convenience function, equivalent to calling:
-
-- `vkCreateBuffer`
-- `vkGetBufferMemoryRequirements`
-- `vmaFindMemoryTypeIndex`
-- `vkDestroyBuffer`
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
VmaAllocator VMA_NOT_NULL allocator,
@@ -1649,12 +1679,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex.
It internally creates a temporary, dummy image that never has memory bound.
-It is just a convenience function, equivalent to calling:
-
-- `vkCreateImage`
-- `vkGetImageMemoryRequirements`
-- `vmaFindMemoryTypeIndex`
-- `vkDestroyImage`
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo(
VmaAllocator VMA_NOT_NULL allocator,
@@ -1692,10 +1716,21 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool(
\param pool Pool object.
\param[out] pPoolStats Statistics of specified pool.
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics(
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NOT_NULL pool,
- VmaPoolStats* VMA_NOT_NULL pPoolStats);
+ VmaStatistics* VMA_NOT_NULL pPoolStats);
+
+/** \brief Retrieves detailed statistics of existing #VmaPool object.
+
+\param allocator Allocator object.
+\param pool Pool object.
+\param[out] pPoolStats Statistics of specified pool.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaPool VMA_NOT_NULL pool,
+ VmaDetailedStatistics* VMA_NOT_NULL pPoolStats);
/** @} */
@@ -2056,103 +2091,66 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(
\param allocator Allocator object.
\param pInfo Structure filled with parameters of defragmentation.
-\param[out] pStats Optional. Statistics of defragmentation. You can pass null if you are not interested in this information.
-\param[out] pContext Context object that must be passed to vmaDefragmentationEnd() to finish defragmentation.
-\return `VK_SUCCESS` and `*pContext == null` if defragmentation finished within this function call. `VK_NOT_READY` and `*pContext != null` if defragmentation has been started and you need to call vmaDefragmentationEnd() to finish it. Negative value in case of error.
-
-Use this function instead of old, deprecated vmaDefragment().
-
-Warning! Between the call to vmaDefragmentationBegin() and vmaDefragmentationEnd():
-
-- You should not use any of allocations passed as `pInfo->pAllocations` or
- any allocations that belong to pools passed as `pInfo->pPools`,
- including calling vmaGetAllocationInfo(), or access
- their data.
-- Some mutexes protecting internal data structures may be locked, so trying to
- make or free any allocations, bind buffers or images, map memory, or launch
- another simultaneous defragmentation in between may cause stall (when done on
- another thread) or deadlock (when done on the same thread), unless you are
- 100% sure that defragmented allocations are in different pools.
-- Information returned via `pStats` and `pInfo->pAllocationsChanged` are undefined.
- They become valid after call to vmaDefragmentationEnd().
-- If `pInfo->commandBuffer` is not null, you must submit that command buffer
- and make sure it finished execution before calling vmaDefragmentationEnd().
-
-For more information and important limitations regarding defragmentation, see documentation chapter:
+\param[out] pContext Context object that must be passed to vmaEndDefragmentation() to finish defragmentation.
+
+For more information about defragmentation, see documentation chapter:
[Defragmentation](@ref defragmentation).
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationBegin(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation(
VmaAllocator VMA_NOT_NULL allocator,
- const VmaDefragmentationInfo2* VMA_NOT_NULL pInfo,
- VmaDefragmentationStats* VMA_NULLABLE pStats,
+ const VmaDefragmentationInfo* VMA_NOT_NULL pInfo,
VmaDefragmentationContext VMA_NULLABLE* VMA_NOT_NULL pContext);
/** \brief Ends defragmentation process.
-Use this function to finish defragmentation started by vmaDefragmentationBegin().
-It is safe to pass `context == null`. The function then does nothing.
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param[out] pStats Optional stats for the defragmentation. Can be null.
+
+Use this function to finish defragmentation started by vmaBeginDefragmentation().
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationEnd(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentation(
VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context);
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationStats* VMA_NULLABLE pStats);
+
+/** \brief Starts single defragmentation pass.
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param[out] pPassInfo Computed informations for current pass.
+\returns
+- `VK_SUCCESS` if no more moves are possible. Then you can omit call to vmaEndDefragmentationPass() and simply end whole defragmentation.
+- `VK_INCOMPLETE` if there are pending moves returned in `pPassInfo`. You need to perform them, call vmaEndDefragmentationPass(),
+ and then preferably try another pass with vmaBeginDefragmentationPass().
+*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass(
VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context,
- VmaDefragmentationPassInfo* VMA_NOT_NULL pInfo);
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo);
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context);
+/** \brief Ends single defragmentation pass.
-/** \brief Deprecated. Compacts memory by moving allocations.
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param pPassInfo Computed informations for current pass filled by vmaBeginDefragmentationPass() and possibly modified by you.
-\param allocator
-\param pAllocations Array of allocations that can be moved during this compation.
-\param allocationCount Number of elements in pAllocations and pAllocationsChanged arrays.
-\param[out] pAllocationsChanged Array of boolean values that will indicate whether matching allocation in pAllocations array has been moved. This parameter is optional. Pass null if you don't need this information.
-\param pDefragmentationInfo Configuration parameters. Optional - pass null to use default values.
-\param[out] pDefragmentationStats Statistics returned by the function. Optional - pass null if you don't need this information.
-\return `VK_SUCCESS` if completed, negative error code in case of error.
-
-\deprecated This is a part of the old interface. It is recommended to use structure #VmaDefragmentationInfo2 and function vmaDefragmentationBegin() instead.
-
-This function works by moving allocations to different places (different
-`VkDeviceMemory` objects and/or different offsets) in order to optimize memory
-usage. Only allocations that are in `pAllocations` array can be moved. All other
-allocations are considered nonmovable in this call. Basic rules:
-
-- Only allocations made in memory types that have
- `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` and `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`
- flags can be compacted. You may pass other allocations but it makes no sense -
- these will never be moved.
-- Custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT or
- #VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT flag are not defragmented. Allocations
- passed to this function that come from such pools are ignored.
-- Allocations created with #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT or
- created as dedicated allocations for any other reason are also ignored.
-- Both allocations made with or without #VMA_ALLOCATION_CREATE_MAPPED_BIT
- flag can be compacted. If not persistently mapped, memory will be mapped
- temporarily inside this function if needed.
-- You must not pass same #VmaAllocation object multiple times in `pAllocations` array.
-
-The function also frees empty `VkDeviceMemory` blocks.
-
-Warning: This function may be time-consuming, so you shouldn't call it too often
-(like after every resource creation/destruction).
-You can call it on special occasions (like when reloading a game level or
-when you just destroyed a lot of objects). Calling it every frame may be OK, but
-you should measure that on your platform.
-
-For more information, see [Defragmentation](@ref defragmentation) chapter.
+Returns `VK_SUCCESS` if no more moves are possible or `VK_INCOMPLETE` if more defragmentations are possible.
+
+Ends incremental defragmentation pass and commits all defragmentation moves from `pPassInfo`.
+After this call:
+
+- Allocations at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY
+ (which is the default) will be pointing to the new destination place.
+- Allocation at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY
+ will be freed.
+
+If no more moves are possible you can end whole defragmentation.
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragment(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass(
VmaAllocator VMA_NOT_NULL allocator,
- const VmaAllocation VMA_NOT_NULL* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,
- size_t allocationCount,
- VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged,
- const VmaDefragmentationInfo* VMA_NULLABLE pDefragmentationInfo,
- VmaDefragmentationStats* VMA_NULLABLE pDefragmentationStats);
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo);
/** \brief Binds buffer to allocation.
@@ -2408,10 +2406,21 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(
void* VMA_NULLABLE pUserData);
/** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
+
+This function is fast to call. For more detailed statistics, see vmaCalculateVirtualBlockStatistics().
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaStatistics* VMA_NOT_NULL pStats);
+
+/** \brief Calculates and returns detailed statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
+
+This function is slow to call. Use for debugging purposes.
+For less detailed statistics, see vmaGetVirtualBlockStatistics().
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics(
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VmaStatInfo* VMA_NOT_NULL pStatInfo);
+ VmaDetailedStatistics* VMA_NOT_NULL pStats);
/** @} */
@@ -2424,7 +2433,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStats(
/** \brief Builds and returns a null-terminated string in JSON format with information about given #VmaVirtualBlock.
\param virtualBlock Virtual block.
\param[out] ppStatsString Returned string.
-\param detailedMap Pass `VK_FALSE` to only obtain statistics as returned by vmaCalculateVirtualBlockStats(). Pass `VK_TRUE` to also obtain full list of allocations and free spaces.
+\param detailedMap Pass `VK_FALSE` to only obtain statistics as returned by vmaCalculateVirtualBlockStatistics(). Pass `VK_TRUE` to also obtain full list of allocations and free spaces.
Returned string must be freed using vmaFreeVirtualBlockStatsString().
*/
@@ -2466,9 +2475,9 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
-//
+//
// IMPLEMENTATION
-//
+//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -2485,6 +2494,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
#include <cstring>
#include <utility>
+#ifdef _MSC_VER
+ #include <intrin.h> // For functions like __popcnt, _BitScanForward etc.
+#endif
+
/*******************************************************************************
CONFIGURATION SECTION
@@ -2886,6 +2899,17 @@ If providing your own implementation, you need to implement a subset of std::ato
#define VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE (256ull * 1024 * 1024)
#endif
+/*
+Mapping hysteresis is a logic that launches when vmaMapMemory/vmaUnmapMemory is called
+or a persistently mapped allocation is created and destroyed several times in a row.
+It keeps additional +1 mapping of a device memory block to prevent calling actual
+vkMapMemory/vkUnmapMemory too many times, which may improve performance and help
+tools like RenderDOc.
+*/
+#ifndef VMA_MAPPING_HYSTERESIS_ENABLED
+ #define VMA_MAPPING_HYSTERESIS_ENABLED 1
+#endif
+
#ifndef VMA_CLASS_NO_COPY
#define VMA_CLASS_NO_COPY(className) \
private: \
@@ -2913,10 +2937,17 @@ static const uint32_t VMA_CORRUPTION_DETECTION_MAGIC_VALUE = 0x7F84E666;
static const uint32_t VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY = 0x00000040;
static const uint32_t VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY = 0x00000080;
static const uint32_t VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY = 0x00020000;
+static const uint32_t VK_IMAGE_CREATE_DISJOINT_BIT_COPY = 0x00000200;
+static const int32_t VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY = 1000158000;
static const uint32_t VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET = 0x10000000u;
static const uint32_t VMA_ALLOCATION_TRY_COUNT = 32;
static const uint32_t VMA_VENDOR_ID_AMD = 4098;
+// This one is tricky. Vulkan specification defines this code as available since
+// Vulkan 1.0, but doesn't actually define it in Vulkan SDK earlier than 1.2.131.
+// See pull request #207.
+#define VK_ERROR_UNKNOWN_COPY ((VkResult)-13)
+
#if VMA_STATS_STRING_ENABLED
// Correspond to values of enum VmaSuballocationType.
@@ -3032,23 +3063,13 @@ typedef VmaList<VmaSuballocation, VmaStlAllocator<VmaSuballocation>> VmaSuballoc
struct VmaAllocationRequest;
class VmaBlockMetadata;
-class VmaBlockMetadata_Generic;
class VmaBlockMetadata_Linear;
-class VmaBlockMetadata_Buddy;
class VmaBlockMetadata_TLSF;
class VmaBlockVector;
-struct VmaDefragmentationMove;
-class VmaDefragmentationAlgorithm;
-class VmaDefragmentationAlgorithm_Generic;
-class VmaDefragmentationAlgorithm_Fast;
-
struct VmaPoolListItemTraits;
-struct VmaBlockDefragmentationContext;
-class VmaBlockVectorDefragmentationContext;
-
struct VmaCurrentBudgetData;
class VmaAllocationObjectAllocator;
@@ -3056,7 +3077,7 @@ class VmaAllocationObjectAllocator;
#endif // _VMA_FORWARD_DECLARATIONS
-#ifndef _VMA_FUNCTIONS
+#ifndef _VMA_FUNCTIONS
// Returns number of bits set to 1 in (v).
static inline uint32_t VmaCountBitsSet(uint32_t v)
{
@@ -3267,12 +3288,8 @@ static const char* VmaAlgorithmToStr(uint32_t algorithm)
{
case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT:
return "Linear";
- case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
- return "Buddy";
- case VMA_POOL_CREATE_TLSF_ALGORITHM_BIT:
- return "TLSF";
case 0:
- return "Default";
+ return "TLSF";
default:
VMA_ASSERT(0);
return "";
@@ -3497,6 +3514,150 @@ static inline void VmaPnextChainPushFront(MainT* mainStruct, NewT* newStruct)
mainStruct->pNext = newStruct;
}
+// This is the main algorithm that guides the selection of a memory type best for an allocation -
+// converts usage to required/preferred/not preferred flags.
+static bool FindMemoryPreferences(
+ bool isIntegratedGPU,
+ const VmaAllocationCreateInfo& allocCreateInfo,
+ VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown.
+ VkMemoryPropertyFlags& outRequiredFlags,
+ VkMemoryPropertyFlags& outPreferredFlags,
+ VkMemoryPropertyFlags& outNotPreferredFlags)
+{
+ outRequiredFlags = allocCreateInfo.requiredFlags;
+ outPreferredFlags = allocCreateInfo.preferredFlags;
+ outNotPreferredFlags = 0;
+
+ switch(allocCreateInfo.usage)
+ {
+ case VMA_MEMORY_USAGE_UNKNOWN:
+ break;
+ case VMA_MEMORY_USAGE_GPU_ONLY:
+ if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ case VMA_MEMORY_USAGE_CPU_ONLY:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
+ break;
+ case VMA_MEMORY_USAGE_CPU_TO_GPU:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ case VMA_MEMORY_USAGE_GPU_TO_CPU:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ outPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ break;
+ case VMA_MEMORY_USAGE_CPU_COPY:
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ break;
+ case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
+ break;
+ case VMA_MEMORY_USAGE_AUTO:
+ case VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE:
+ case VMA_MEMORY_USAGE_AUTO_PREFER_HOST:
+ {
+ if(bufImgUsage == UINT32_MAX)
+ {
+ VMA_ASSERT(0 && "VMA_MEMORY_USAGE_AUTO* values can only be used with functions like vmaCreateBuffer, vmaCreateImage so that the details of the created resource are known.");
+ return false;
+ }
+ // This relies on values of VK_IMAGE_USAGE_TRANSFER* being the same VK_BUFFER_IMAGE_TRANSFER*.
+ const bool deviceAccess = (bufImgUsage & ~(VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) != 0;
+ const bool hostAccessSequentialWrite = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT) != 0;
+ const bool hostAccessRandom = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) != 0;
+ const bool hostAccessAllowTransferInstead = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) != 0;
+ const bool preferDevice = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
+ const bool preferHost = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST;
+
+ // CPU random access - e.g. a buffer written to or transferred from GPU to read back on CPU.
+ if(hostAccessRandom)
+ {
+ if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost)
+ {
+ // Nice if it will end up in HOST_VISIBLE, but more importantly prefer DEVICE_LOCAL.
+ // Omitting HOST_VISIBLE here is intentional.
+ // In case there is DEVICE_LOCAL | HOST_VISIBLE | HOST_CACHED, it will pick that one.
+ // Otherwise, this will give same weight to DEVICE_LOCAL as HOST_VISIBLE | HOST_CACHED and select the former if occurs first on the list.
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ }
+ else
+ {
+ // Always CPU memory, cached.
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ }
+ }
+ // CPU sequential write - may be CPU or host-visible GPU memory, uncached and write-combined.
+ else if(hostAccessSequentialWrite)
+ {
+ // Want uncached and write-combined.
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+
+ if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ }
+ else
+ {
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ // Direct GPU access, CPU sequential write (e.g. a dynamic uniform buffer updated every frame)
+ if(deviceAccess)
+ {
+ // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose GPU memory.
+ if(preferHost)
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ // GPU no direct access, CPU sequential write (e.g. an upload buffer to be transferred to the GPU)
+ else
+ {
+ // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose CPU memory.
+ if(preferDevice)
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ }
+ }
+ // No CPU access
+ else
+ {
+ // GPU access, no CPU access (e.g. a color attachment image) - prefer GPU memory
+ if(deviceAccess)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ // No direct GPU access, no CPU access, just transfers.
+ // It may be staging copy intended for e.g. preserving image for next frame (then better GPU memory) or
+ // a "swap file" copy to free some GPU memory (then better CPU memory).
+ // Up to the user to decide. If no preferece, assume the former and choose GPU memory.
+ if(preferHost)
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ }
+ default:
+ VMA_ASSERT(0);
+ }
+
+ // Avoid DEVICE_COHERENT unless explicitly requested.
+ if(((allocCreateInfo.requiredFlags | allocCreateInfo.preferredFlags) &
+ (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)
+ {
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY;
+ }
+
+ return true;
+}
+
////////////////////////////////////////////////////////////////////////////////
// Memory allocation
@@ -3635,65 +3796,60 @@ bool VmaVectorRemoveSorted(VectorT& vector, const typename VectorT::value_type&
}
#endif // _VMA_FUNCTIONS
-#ifndef _VMA_STAT_INFO_FUNCTIONS
-static void VmaInitStatInfo(VmaStatInfo& outInfo)
+#ifndef _VMA_STATISTICS_FUNCTIONS
+
+static void VmaClearStatistics(VmaStatistics& outStats)
{
- memset(&outInfo, 0, sizeof(outInfo));
- outInfo.allocationSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
+ outStats.blockCount = 0;
+ outStats.allocationCount = 0;
+ outStats.blockBytes = 0;
+ outStats.allocationBytes = 0;
}
-// Adds statistics srcInfo into inoutInfo, like: inoutInfo += srcInfo.
-static void VmaAddStatInfo(VmaStatInfo& inoutInfo, const VmaStatInfo& srcInfo)
+static void VmaAddStatistics(VmaStatistics& inoutStats, const VmaStatistics& src)
{
- inoutInfo.blockCount += srcInfo.blockCount;
- inoutInfo.allocationCount += srcInfo.allocationCount;
- inoutInfo.unusedRangeCount += srcInfo.unusedRangeCount;
- inoutInfo.usedBytes += srcInfo.usedBytes;
- inoutInfo.unusedBytes += srcInfo.unusedBytes;
- inoutInfo.allocationSizeMin = VMA_MIN(inoutInfo.allocationSizeMin, srcInfo.allocationSizeMin);
- inoutInfo.allocationSizeMax = VMA_MAX(inoutInfo.allocationSizeMax, srcInfo.allocationSizeMax);
- inoutInfo.unusedRangeSizeMin = VMA_MIN(inoutInfo.unusedRangeSizeMin, srcInfo.unusedRangeSizeMin);
- inoutInfo.unusedRangeSizeMax = VMA_MAX(inoutInfo.unusedRangeSizeMax, srcInfo.unusedRangeSizeMax);
+ inoutStats.blockCount += src.blockCount;
+ inoutStats.allocationCount += src.allocationCount;
+ inoutStats.blockBytes += src.blockBytes;
+ inoutStats.allocationBytes += src.allocationBytes;
}
-static void VmaAddStatInfoAllocation(VmaStatInfo& inoutInfo, VkDeviceSize size)
+static void VmaClearDetailedStatistics(VmaDetailedStatistics& outStats)
{
- ++inoutInfo.allocationCount;
- inoutInfo.usedBytes += size;
- if (size < inoutInfo.allocationSizeMin)
- {
- inoutInfo.allocationSizeMin = size;
- }
- if (size > inoutInfo.allocationSizeMax)
- {
- inoutInfo.allocationSizeMax = size;
- }
+ VmaClearStatistics(outStats.statistics);
+ outStats.unusedRangeCount = 0;
+ outStats.allocationSizeMin = VK_WHOLE_SIZE;
+ outStats.allocationSizeMax = 0;
+ outStats.unusedRangeSizeMin = VK_WHOLE_SIZE;
+ outStats.unusedRangeSizeMax = 0;
}
-static void VmaAddStatInfoUnusedRange(VmaStatInfo& inoutInfo, VkDeviceSize size)
+static void VmaAddDetailedStatisticsAllocation(VmaDetailedStatistics& inoutStats, VkDeviceSize size)
{
- ++inoutInfo.unusedRangeCount;
- inoutInfo.unusedBytes += size;
- if (size < inoutInfo.unusedRangeSizeMin)
- {
- inoutInfo.unusedRangeSizeMin = size;
- }
- if (size > inoutInfo.unusedRangeSizeMax)
- {
- inoutInfo.unusedRangeSizeMax = size;
- }
+ inoutStats.statistics.allocationCount++;
+ inoutStats.statistics.allocationBytes += size;
+ inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, size);
+ inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, size);
+}
+
+static void VmaAddDetailedStatisticsUnusedRange(VmaDetailedStatistics& inoutStats, VkDeviceSize size)
+{
+ inoutStats.unusedRangeCount++;
+ inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, size);
+ inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, size);
}
-static void VmaPostprocessCalcStatInfo(VmaStatInfo& inoutInfo)
+static void VmaAddDetailedStatistics(VmaDetailedStatistics& inoutStats, const VmaDetailedStatistics& src)
{
- inoutInfo.allocationSizeAvg = (inoutInfo.allocationCount > 0) ?
- VmaRoundDiv<VkDeviceSize>(inoutInfo.usedBytes, inoutInfo.allocationCount) : 0;
- inoutInfo.unusedRangeSizeAvg = (inoutInfo.unusedRangeCount > 0) ?
- VmaRoundDiv<VkDeviceSize>(inoutInfo.unusedBytes, inoutInfo.unusedRangeCount) : 0;
+ VmaAddStatistics(inoutStats.statistics, src.statistics);
+ inoutStats.unusedRangeCount += src.unusedRangeCount;
+ inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, src.allocationSizeMin);
+ inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, src.allocationSizeMax);
+ inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, src.unusedRangeSizeMin);
+ inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, src.unusedRangeSizeMax);
}
-#endif // _VMA_STAT_INFO_FUNCTIONS
+#endif // _VMA_STATISTICS_FUNCTIONS
#ifndef _VMA_MUTEX_LOCK
// Helper RAII class to lock a mutex in constructor and unlock it in destructor (at the end of scope).
@@ -4089,8 +4245,9 @@ VmaSmallVector<T, AllocatorT, N>::VmaSmallVector(size_t count, const AllocatorT&
template<typename T, typename AllocatorT, size_t N>
void VmaSmallVector<T, AllocatorT, N>::push_back(const T& src)
{
- resize(m_Count + 1);
- data()[m_Count] = src;
+ const size_t newIndex = size();
+ resize(newIndex + 1);
+ data()[newIndex] = src;
}
template<typename T, typename AllocatorT, size_t N>
@@ -4589,6 +4746,7 @@ public:
class iterator
{
+ friend class const_iterator;
friend class VmaList<T, AllocatorT>;
public:
iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
@@ -4614,6 +4772,7 @@ public:
};
class reverse_iterator
{
+ friend class const_reverse_iterator;
friend class VmaList<T, AllocatorT>;
public:
reverse_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
@@ -4645,6 +4804,8 @@ public:
const_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
const_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+ iterator drop_const() { return { const_cast<VmaRawList<T>*>(m_pList), const_cast<VmaListItem<T>*>(m_pItem) }; }
+
const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
@@ -4671,6 +4832,8 @@ public:
const_reverse_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
const_reverse_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+ reverse_iterator drop_const() { return { const_cast<VmaRawList<T>*>(m_pList), const_cast<VmaListItem<T>*>(m_pItem) }; }
+
const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
@@ -4707,8 +4870,8 @@ public:
reverse_iterator rbegin() { return reverse_iterator(&m_RawList, m_RawList.Back()); }
reverse_iterator rend() { return reverse_iterator(&m_RawList, VMA_NULL); }
- const_reverse_iterator crbegin() { return const_reverse_iterator(&m_RawList, m_RawList.Back()); }
- const_reverse_iterator crend() { return const_reverse_iterator(&m_RawList, VMA_NULL); }
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(&m_RawList, m_RawList.Back()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(&m_RawList, VMA_NULL); }
const_reverse_iterator rbegin() const { return crbegin(); }
const_reverse_iterator rend() const { return crend(); }
@@ -4813,7 +4976,7 @@ public:
VmaIntrusiveLinkedList& operator=(VmaIntrusiveLinkedList&& src);
VmaIntrusiveLinkedList& operator=(const VmaIntrusiveLinkedList&) = delete;
~VmaIntrusiveLinkedList() { VMA_HEAVY_ASSERT(IsEmpty()); }
-
+
size_t GetCount() const { return m_Count; }
bool IsEmpty() const { return m_Count == 0; }
ItemType* Front() { return m_Front; }
@@ -5077,13 +5240,14 @@ public:
iterator begin() { return m_Vector.begin(); }
iterator end() { return m_Vector.end(); }
+ size_t size() { return m_Vector.size(); }
void insert(const PairType& pair);
iterator find(const KeyT& key);
void erase(iterator it);
private:
- VmaVector< PairType, VmaStlAllocator<PairType> > m_Vector;
+ VmaVector< PairType, VmaStlAllocator<PairType>> m_Vector;
};
#ifndef _VMA_MAP_FUNCTIONS
@@ -5224,7 +5388,7 @@ public:
// Writes a string value inside "".
// pStr can contain any ANSI characters, including '"', new line etc. - they will be properly escaped.
void WriteString(const char* pStr);
-
+
// Begins writing a string value.
// Call BeginString, ContinueString, ContinueString, ..., EndString instead of
// WriteString to conveniently build the string content incrementally, made of
@@ -5503,33 +5667,31 @@ void VmaJsonWriter::WriteIndent(bool oneLess)
}
#endif // _VMA_JSON_WRITER_FUNCTIONS
-static void VmaPrintStatInfo(VmaJsonWriter& json, const VmaStatInfo& stat)
+static void VmaPrintDetailedStatistics(VmaJsonWriter& json, const VmaDetailedStatistics& stat)
{
json.BeginObject();
- json.WriteString("Blocks");
- json.WriteNumber(stat.blockCount);
+ json.WriteString("BlockCount");
+ json.WriteNumber(stat.statistics.blockCount);
- json.WriteString("Allocations");
- json.WriteNumber(stat.allocationCount);
+ json.WriteString("AllocationCount");
+ json.WriteNumber(stat.statistics.allocationCount);
- json.WriteString("UnusedRanges");
+ json.WriteString("UnusedRangeCount");
json.WriteNumber(stat.unusedRangeCount);
- json.WriteString("UsedBytes");
- json.WriteNumber(stat.usedBytes);
+ json.WriteString("BlockBytes");
+ json.WriteNumber(stat.statistics.blockBytes);
- json.WriteString("UnusedBytes");
- json.WriteNumber(stat.unusedBytes);
+ json.WriteString("AllocationBytes");
+ json.WriteNumber(stat.statistics.allocationBytes);
- if (stat.allocationCount > 1)
+ if (stat.statistics.allocationCount > 1)
{
json.WriteString("AllocationSize");
json.BeginObject(true);
json.WriteString("Min");
json.WriteNumber(stat.allocationSizeMin);
- json.WriteString("Avg");
- json.WriteNumber(stat.allocationSizeAvg);
json.WriteString("Max");
json.WriteNumber(stat.allocationSizeMax);
json.EndObject();
@@ -5541,8 +5703,6 @@ static void VmaPrintStatInfo(VmaJsonWriter& json, const VmaStatInfo& stat)
json.BeginObject(true);
json.WriteString("Min");
json.WriteNumber(stat.unusedRangeSizeMin);
- json.WriteString("Avg");
- json.WriteNumber(stat.unusedRangeSizeAvg);
json.WriteString("Max");
json.WriteNumber(stat.unusedRangeSizeMax);
json.EndObject();
@@ -5552,12 +5712,109 @@ static void VmaPrintStatInfo(VmaJsonWriter& json, const VmaStatInfo& stat)
}
#endif // _VMA_JSON_WRITER
+#ifndef _VMA_MAPPING_HYSTERESIS
+
+class VmaMappingHysteresis
+{
+ VMA_CLASS_NO_COPY(VmaMappingHysteresis)
+public:
+ VmaMappingHysteresis() = default;
+
+ uint32_t GetExtraMapping() const { return m_ExtraMapping; }
+
+ // Call when Map was called.
+ // Returns true if switched to extra +1 mapping reference count.
+ bool PostMap()
+ {
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 0)
+ {
+ ++m_MajorCounter;
+ if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING)
+ {
+ m_ExtraMapping = 1;
+ m_MajorCounter = 0;
+ m_MinorCounter = 0;
+ return true;
+ }
+ }
+ else // m_ExtraMapping == 1
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ return false;
+ }
+
+ // Call when Unmap was called.
+ void PostUnmap()
+ {
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 0)
+ ++m_MajorCounter;
+ else // m_ExtraMapping == 1
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ }
+
+ // Call when allocation was made from the memory block.
+ void PostAlloc()
+ {
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 1)
+ ++m_MajorCounter;
+ else // m_ExtraMapping == 0
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ }
+
+ // Call when allocation was freed from the memory block.
+ // Returns true if switched to extra -1 mapping reference count.
+ bool PostFree()
+ {
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 1)
+ {
+ ++m_MajorCounter;
+ if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING &&
+ m_MajorCounter > m_MinorCounter + 1)
+ {
+ m_ExtraMapping = 0;
+ m_MajorCounter = 0;
+ m_MinorCounter = 0;
+ return true;
+ }
+ }
+ else // m_ExtraMapping == 0
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ return false;
+ }
+
+private:
+ static const int32_t COUNTER_MIN_EXTRA_MAPPING = 7;
+
+ uint32_t m_MinorCounter = 0;
+ uint32_t m_MajorCounter = 0;
+ uint32_t m_ExtraMapping = 0; // 0 or 1.
+
+ void PostMinorCounter()
+ {
+ if(m_MinorCounter < m_MajorCounter)
+ ++m_MinorCounter;
+ else if(m_MajorCounter > 0)
+ --m_MajorCounter, --m_MinorCounter;
+ }
+};
+
+#endif // _VMA_MAPPING_HYSTERESIS
+
#ifndef _VMA_DEVICE_MEMORY_BLOCK
/*
Represents a single block of device memory (`VkDeviceMemory`) with all the
data about its regions (aka suballocations, #VmaAllocation), assigned and free.
-Thread-safety: This class must be externally synchronized.
+Thread-safety:
+- Access to m_pMetadata must be externally synchronized.
+- Map, Unmap, Bind* are synchronized internally.
*/
class VmaDeviceMemoryBlock
{
@@ -5586,6 +5843,12 @@ public:
uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
uint32_t GetId() const { return m_Id; }
void* GetMappedData() const { return m_pMappedData; }
+ uint32_t GetMapRefCount() const { return m_MapCount; }
+
+ // Call when allocation/free was made from m_pMetadata.
+ // Used for m_MappingHysteresis.
+ void PostAlloc() { m_MappingHysteresis.PostAlloc(); }
+ void PostFree(VmaAllocator hAllocator);
// Validates all data structures inside this object. If not valid, returns false.
bool Validate() const;
@@ -5622,7 +5885,8 @@ private:
Also protects m_MapCount, m_pMappedData.
Allocations, deallocations, any change in m_pMetadata is protected by parent's VmaBlockVector::m_Mutex.
*/
- VMA_MUTEX m_Mutex;
+ VMA_MUTEX m_MapAndBindMutex;
+ VmaMappingHysteresis m_MappingHysteresis;
uint32_t m_MapCount;
void* m_pMappedData;
};
@@ -5633,9 +5897,12 @@ struct VmaAllocation_T
{
friend struct VmaDedicatedAllocationListItemTraits;
- static const uint8_t MAP_COUNT_FLAG_PERSISTENT_MAP = 0x80;
-
- enum FLAGS { FLAG_USER_DATA_STRING = 0x01 };
+ enum FLAGS
+ {
+ FLAG_USER_DATA_STRING = 0x01,
+ FLAG_PERSISTENT_MAP = 0x02,
+ FLAG_MAPPING_ALLOWED = 0x04,
+ };
public:
enum ALLOCATION_TYPE
@@ -5646,7 +5913,7 @@ public:
};
// This struct is allocated using VmaPoolAllocator.
- VmaAllocation_T(bool userDataString);
+ VmaAllocation_T(bool userDataString, bool mappingAllowed);
~VmaAllocation_T();
void InitBlockAllocation(
@@ -5675,19 +5942,17 @@ public:
VmaDeviceMemoryBlock* GetBlock() const { VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK); return m_BlockAllocation.m_Block; }
uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
- bool IsPersistentMap() const { return (m_MapCount & MAP_COUNT_FLAG_PERSISTENT_MAP) != 0; }
+ bool IsPersistentMap() const { return (m_Flags & FLAG_PERSISTENT_MAP) != 0; }
+ bool IsMappingAllowed() const { return (m_Flags & FLAG_MAPPING_ALLOWED) != 0; }
void SetUserData(VmaAllocator hAllocator, void* pUserData);
- void ChangeBlockAllocation(VmaAllocator hAllocator, VmaDeviceMemoryBlock* block, VmaAllocHandle allocHandle);
- void ChangeAllocHandle(VmaAllocHandle newAllocHandle);
+ void SwapBlockAllocation(VmaAllocation allocation);
VmaAllocHandle GetAllocHandle() const;
VkDeviceSize GetOffset() const;
VmaPool GetParentPool() const;
VkDeviceMemory GetMemory() const;
void* GetMappedData() const;
- void DedicatedAllocCalcStatsInfo(VmaStatInfo& outInfo);
-
void BlockAllocMap();
void BlockAllocUnmap();
VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData);
@@ -5730,8 +5995,7 @@ private:
uint32_t m_MemoryTypeIndex;
uint8_t m_Type; // ALLOCATION_TYPE
uint8_t m_SuballocationType; // VmaSuballocationType
- // Bit 0x80 is set when allocation was created with VMA_ALLOCATION_CREATE_MAPPED_BIT.
- // Bits with mask 0x7F are reference counter for vmaMapMemory()/vmaUnmapMemory().
+ // Reference counter for vmaMapMemory()/vmaUnmapMemory().
uint8_t m_MapCount;
uint8_t m_Flags; // enum FLAGS
#if VMA_STATS_STRING_ENABLED
@@ -5784,8 +6048,8 @@ public:
void Init(bool useMutex) { m_UseMutex = useMutex; }
bool Validate();
- void AddStats(VmaStats* stats, uint32_t memTypeIndex, uint32_t memHeapIndex);
- void AddPoolStats(VmaPoolStats* stats);
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats);
+ void AddStatistics(VmaStatistics& inoutStats);
#if VMA_STATS_STRING_ENABLED
// Writes JSON array with the list of allocations.
void BuildStatsString(VmaJsonWriter& json);
@@ -5830,31 +6094,30 @@ bool VmaDedicatedAllocationList::Validate()
return true;
}
-void VmaDedicatedAllocationList::AddStats(VmaStats* stats, uint32_t memTypeIndex, uint32_t memHeapIndex)
+void VmaDedicatedAllocationList::AddDetailedStatistics(VmaDetailedStatistics& inoutStats)
{
- VmaMutexLockRead lock(m_Mutex, m_UseMutex);
- for (VmaAllocation alloc = m_AllocationList.Front();
- alloc != VMA_NULL; alloc = m_AllocationList.GetNext(alloc))
+ for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item))
{
- VmaStatInfo allocationStatInfo;
- alloc->DedicatedAllocCalcStatsInfo(allocationStatInfo);
- VmaAddStatInfo(stats->total, allocationStatInfo);
- VmaAddStatInfo(stats->memoryType[memTypeIndex], allocationStatInfo);
- VmaAddStatInfo(stats->memoryHeap[memHeapIndex], allocationStatInfo);
+ const VkDeviceSize size = item->GetSize();
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += size;
+ VmaAddDetailedStatisticsAllocation(inoutStats, item->GetSize());
}
}
-void VmaDedicatedAllocationList::AddPoolStats(VmaPoolStats* stats)
+void VmaDedicatedAllocationList::AddStatistics(VmaStatistics& inoutStats)
{
VmaMutexLockRead lock(m_Mutex, m_UseMutex);
- const size_t allocCount = m_AllocationList.GetCount();
- stats->allocationCount += allocCount;
- stats->blockCount += allocCount;
+ const uint32_t allocCount = (uint32_t)m_AllocationList.GetCount();
+ inoutStats.blockCount += allocCount;
+ inoutStats.allocationCount += allocCount;
for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item))
{
- stats->size += item->GetSize();
+ const VkDeviceSize size = item->GetSize();
+ inoutStats.blockBytes += size;
+ inoutStats.allocationBytes += size;
}
}
@@ -5981,14 +6244,18 @@ public:
virtual bool IsEmpty() const = 0;
virtual void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) = 0;
virtual VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const = 0;
+ virtual void* GetAllocationUserData(VmaAllocHandle allocHandle) const = 0;
+
+ virtual VmaAllocHandle GetAllocationListBegin() const = 0;
+ virtual VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const = 0;
- // Must set blockCount to 1.
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const = 0;
// Shouldn't modify blockCount.
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const = 0;
+ virtual void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const = 0;
+ virtual void AddStatistics(VmaStatistics& inoutStats) const = 0;
#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const = 0;
+ // mapRefCount == UINT32_MAX means unspecified.
+ virtual void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const = 0;
#endif
// Tries to find a place for suballocation with given parameters inside this block.
@@ -6028,10 +6295,12 @@ protected:
void DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size, void* userData) const;
#if VMA_STATS_STRING_ENABLED
+ // mapRefCount == UINT32_MAX means unspecified.
void PrintDetailedMap_Begin(class VmaJsonWriter& json,
VkDeviceSize unusedBytes,
size_t allocationCount,
- size_t unusedRangeCount) const;
+ size_t unusedRangeCount,
+ uint32_t mapRefCount) const;
void PrintDetailedMap_Allocation(class VmaJsonWriter& json,
VkDeviceSize offset, VkDeviceSize size, void* userData) const;
void PrintDetailedMap_UnusedRange(class VmaJsonWriter& json,
@@ -6098,12 +6367,12 @@ void VmaBlockMetadata::DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size
}
#endif // VMA_STATS_STRING_ENABLED
}
-
+
}
#if VMA_STATS_STRING_ENABLED
void VmaBlockMetadata::PrintDetailedMap_Begin(class VmaJsonWriter& json,
- VkDeviceSize unusedBytes, size_t allocationCount, size_t unusedRangeCount) const
+ VkDeviceSize unusedBytes, size_t allocationCount, size_t unusedRangeCount, uint32_t mapRefCount) const
{
json.BeginObject();
@@ -6119,6 +6388,12 @@ void VmaBlockMetadata::PrintDetailedMap_Begin(class VmaJsonWriter& json,
json.WriteString("UnusedRanges");
json.WriteNumber((uint64_t)unusedRangeCount);
+ if(mapRefCount != UINT32_MAX)
+ {
+ json.WriteString("MapRefCount");
+ json.WriteNumber(mapRefCount);
+ }
+
json.WriteString("Suballocations");
json.BeginArray();
}
@@ -6408,7 +6683,7 @@ uint32_t VmaBlockBufferImageGranularity::OffsetToPageIndex(VkDeviceSize offset)
void VmaBlockBufferImageGranularity::AllocPage(RegionInfo& page, uint8_t allocType)
{
// When current alloc type is free then it can be overriden by new type
- if (page.allocCount == 0 || page.allocCount > 0 && page.allocType == VMA_SUBALLOCATION_TYPE_FREE)
+ if (page.allocCount == 0 || (page.allocCount > 0 && page.allocType == VMA_SUBALLOCATION_TYPE_FREE))
page.allocType = allocType;
++page.allocCount;
@@ -6416,6 +6691,7 @@ void VmaBlockBufferImageGranularity::AllocPage(RegionInfo& page, uint8_t allocTy
#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS
#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY
+#if 0
#ifndef _VMA_BLOCK_METADATA_GENERIC
class VmaBlockMetadata_Generic : public VmaBlockMetadata
{
@@ -6436,11 +6712,11 @@ public:
void Init(VkDeviceSize size) override;
bool Validate() const override;
- void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
- void AddPoolStats(VmaPoolStats& inoutStats) const override;
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json) const override;
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
#endif
bool CreateAllocationRequest(
@@ -6459,15 +6735,13 @@ public:
void* userData) override;
void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
void Clear() override;
void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
void DebugLogAllAllocations() const override;
- // For defragmentation
- bool IsBufferImageGranularityConflictPossible(
- VkDeviceSize bufferImageGranularity,
- VmaSuballocationType& inOutPrevSuballocType) const;
-
private:
uint32_t m_FreeCount;
VkDeviceSize m_SumFreeSize;
@@ -6477,7 +6751,7 @@ private:
VkDeviceSize AlignAllocationSize(VkDeviceSize size) const { return IsVirtual() ? size : VmaAlignUp(size, (VkDeviceSize)16); }
- VmaSuballocationList::iterator FindAtOffset(VkDeviceSize offset);
+ VmaSuballocationList::iterator FindAtOffset(VkDeviceSize offset) const;
bool ValidateFreeSuballocationList() const;
// Checks if requested suballocation with given parameters can be placed in given pFreeSuballocItem.
@@ -6612,42 +6886,37 @@ bool VmaBlockMetadata_Generic::Validate() const
return true;
}
-void VmaBlockMetadata_Generic::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+void VmaBlockMetadata_Generic::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
const uint32_t rangeCount = (uint32_t)m_Suballocations.size();
- VmaInitStatInfo(outInfo);
- outInfo.blockCount = 1;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
for (const auto& suballoc : m_Suballocations)
{
if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
- {
- VmaAddStatInfoAllocation(outInfo, suballoc.size);
- }
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
else
- {
- VmaAddStatInfoUnusedRange(outInfo, suballoc.size);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, suballoc.size);
}
}
-void VmaBlockMetadata_Generic::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Generic::AddStatistics(VmaStatistics& inoutStats) const
{
- const uint32_t rangeCount = (uint32_t)m_Suballocations.size();
-
- inoutStats.size += GetSize();
- inoutStats.unusedSize += m_SumFreeSize;
- inoutStats.allocationCount += rangeCount - m_FreeCount;
- inoutStats.unusedRangeCount += m_FreeCount;
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_Suballocations.size() - m_FreeCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - m_SumFreeSize;
}
#if VMA_STATS_STRING_ENABLED
-void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
PrintDetailedMap_Begin(json,
m_SumFreeSize, // unusedBytes
m_Suballocations.size() - (size_t)m_FreeCount, // allocationCount
- m_FreeCount); // unusedRangeCount
+ m_FreeCount, // unusedRangeCount
+ mapRefCount);
for (const auto& suballoc : m_Suballocations)
{
@@ -6740,7 +7009,7 @@ bool VmaBlockMetadata_Generic::CreateAllocationRequest(
}
else
{
- VMA_ASSERT(strategy == VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT);
+ VMA_ASSERT(strategy & (VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT | VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT ));
// Search staring from biggest suballocations.
for (size_t index = freeSuballocCount; index--; )
{
@@ -6770,7 +7039,7 @@ VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData)
if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_UNKNOWN;
+ return VK_ERROR_UNKNOWN_COPY;
}
}
}
@@ -6851,6 +7120,37 @@ void VmaBlockMetadata_Generic::GetAllocationInfo(VmaAllocHandle allocHandle, Vma
outInfo.pUserData = suballoc.userData;
}
+void* VmaBlockMetadata_Generic::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ return FindAtOffset((VkDeviceSize)allocHandle - 1)->userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Generic::GetAllocationListBegin() const
+{
+ if (IsEmpty())
+ return VK_NULL_HANDLE;
+
+ for (const auto& suballoc : m_Suballocations)
+ {
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ return (VmaAllocHandle)(suballoc.offset + 1);
+ }
+ VMA_ASSERT(false && "Should contain at least 1 allocation!");
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_Generic::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ VmaSuballocationList::const_iterator prev = FindAtOffset((VkDeviceSize)prevAlloc - 1);
+
+ for (VmaSuballocationList::const_iterator it = ++prev; it != m_Suballocations.end(); ++it)
+ {
+ if (it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ return (VmaAllocHandle)(it->offset + 1);
+ }
+ return VK_NULL_HANDLE;
+}
+
void VmaBlockMetadata_Generic::Clear()
{
const VkDeviceSize size = GetSize();
@@ -6885,15 +7185,15 @@ void VmaBlockMetadata_Generic::DebugLogAllAllocations() const
}
}
-VmaSuballocationList::iterator VmaBlockMetadata_Generic::FindAtOffset(VkDeviceSize offset)
+VmaSuballocationList::iterator VmaBlockMetadata_Generic::FindAtOffset(VkDeviceSize offset) const
{
VMA_HEAVY_ASSERT(!m_Suballocations.empty());
const VkDeviceSize last = m_Suballocations.rbegin()->offset;
if (last == offset)
- return m_Suballocations.rbegin();
+ return m_Suballocations.rbegin().drop_const();
const VkDeviceSize first = m_Suballocations.begin()->offset;
if (first == offset)
- return m_Suballocations.begin();
+ return m_Suballocations.begin().drop_const();
const size_t suballocCount = m_Suballocations.size();
const VkDeviceSize step = (last - first + m_Suballocations.begin()->size) / suballocCount;
@@ -6903,12 +7203,11 @@ VmaSuballocationList::iterator VmaBlockMetadata_Generic::FindAtOffset(VkDeviceSi
suballocItem != end;
++suballocItem)
{
- VmaSuballocation& suballoc = *suballocItem;
- if (suballoc.offset == offset)
- return suballocItem;
+ if (suballocItem->offset == offset)
+ return suballocItem.drop_const();
}
VMA_ASSERT(false && "Not found!");
- return m_Suballocations.end();
+ return m_Suballocations.end().drop_const();
};
// If requested offset is closer to the end of range, search from the end
if (offset - first > suballocCount * step / 2)
@@ -7152,37 +7451,9 @@ void VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList:
//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());
}
-
-bool VmaBlockMetadata_Generic::IsBufferImageGranularityConflictPossible(
- VkDeviceSize bufferImageGranularity,
- VmaSuballocationType& inOutPrevSuballocType) const
-{
- if (bufferImageGranularity == 1 || IsEmpty() || IsVirtual())
- {
- return false;
- }
-
- VkDeviceSize minAlignment = VK_WHOLE_SIZE;
- bool typeConflictFound = false;
- for (const auto& suballoc : m_Suballocations)
- {
- const VmaSuballocationType suballocType = suballoc.type;
- if (suballocType != VMA_SUBALLOCATION_TYPE_FREE)
- {
- VmaAllocation const alloc = (VmaAllocation)suballoc.userData;
- minAlignment = VMA_MIN(minAlignment, alloc->GetAlignment());
- if (VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))
- {
- typeConflictFound = true;
- }
- inOutPrevSuballocType = suballocType;
- }
- }
-
- return typeConflictFound || minAlignment >= bufferImageGranularity;
-}
#endif // _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS
#endif // _VMA_BLOCK_METADATA_GENERIC
+#endif // #if 0
#ifndef _VMA_BLOCK_METADATA_LINEAR
/*
@@ -7279,11 +7550,11 @@ public:
bool Validate() const override;
size_t GetAllocationCount() const override;
- void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
- void AddPoolStats(VmaPoolStats& inoutStats) const override;
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json) const override;
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
#endif
bool CreateAllocationRequest(
@@ -7303,6 +7574,9 @@ public:
void Free(VmaAllocHandle allocHandle) override;
void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
void Clear() override;
void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
void DebugLogAllAllocations() const override;
@@ -7349,7 +7623,7 @@ private:
const SuballocationVectorType& AccessSuballocations1st() const { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; }
const SuballocationVectorType& AccessSuballocations2nd() const { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; }
- VmaSuballocation& FindSuballocation(VkDeviceSize offset);
+ VmaSuballocation& FindSuballocation(VkDeviceSize offset) const;
bool ShouldCompact1st() const;
void CleanupAfterFree();
@@ -7541,7 +7815,7 @@ size_t VmaBlockMetadata_Linear::GetAllocationCount() const
AccessSuballocations2nd().size() - m_2ndNullItemsCount;
}
-void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+void VmaBlockMetadata_Linear::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
const VkDeviceSize size = GetSize();
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
@@ -7549,8 +7823,8 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
const size_t suballoc1stCount = suballocations1st.size();
const size_t suballoc2ndCount = suballocations2nd.size();
- VmaInitStatInfo(outInfo);
- outInfo.blockCount = 1;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += size;
VkDeviceSize lastOffset = 0;
@@ -7577,12 +7851,12 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- VmaAddStatInfoAllocation(outInfo, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -7595,7 +7869,7 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
if (lastOffset < freeSpace2ndTo1stEnd)
{
const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// End of loop.
@@ -7626,12 +7900,12 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- VmaAddStatInfoAllocation(outInfo, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -7644,7 +7918,7 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
if (lastOffset < freeSpace1stTo2ndEnd)
{
const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// End of loop.
@@ -7674,12 +7948,12 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- VmaAddStatInfoAllocation(outInfo, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -7692,7 +7966,7 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
if (lastOffset < size)
{
const VkDeviceSize unusedRangeSize = size - lastOffset;
- VmaAddStatInfoUnusedRange(outInfo, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// End of loop.
@@ -7700,11 +7974,9 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
}
}
}
-
- outInfo.unusedBytes = size - outInfo.usedBytes;
}
-void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Linear::AddStatistics(VmaStatistics& inoutStats) const
{
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
@@ -7712,7 +7984,9 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
const size_t suballoc1stCount = suballocations1st.size();
const size_t suballoc2ndCount = suballocations2nd.size();
- inoutStats.size += size;
+ inoutStats.blockCount++;
+ inoutStats.blockBytes += size;
+ inoutStats.allocationBytes += size - m_SumFreeSize;
VkDeviceSize lastOffset = 0;
@@ -7739,8 +8013,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// 2. Process this allocation.
@@ -7758,8 +8030,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to freeSpace2ndTo1stEnd.
const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// End of loop.
@@ -7790,8 +8060,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// 2. Process this allocation.
@@ -7809,8 +8077,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to freeSpace1stTo2ndEnd.
const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// End of loop.
@@ -7840,8 +8106,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// 2. Process this allocation.
@@ -7859,8 +8123,6 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
{
// There is free space from lastOffset to size.
const VkDeviceSize unusedRangeSize = size - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
}
// End of loop.
@@ -7871,7 +8133,7 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
}
#if VMA_STATS_STRING_ENABLED
-void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
const VkDeviceSize size = GetSize();
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
@@ -8033,7 +8295,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
}
const VkDeviceSize unusedBytes = size - usedBytes;
- PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount);
+ PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount, mapRefCount);
// SECOND PASS
lastOffset = 0;
@@ -8219,7 +8481,7 @@ VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_UNKNOWN;
+ return VK_ERROR_UNKNOWN_COPY;
}
}
}
@@ -8233,7 +8495,7 @@ VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_UNKNOWN;
+ return VK_ERROR_UNKNOWN_COPY;
}
}
}
@@ -8405,6 +8667,25 @@ void VmaBlockMetadata_Linear::GetAllocationInfo(VmaAllocHandle allocHandle, VmaV
outInfo.pUserData = suballoc.userData;
}
+void* VmaBlockMetadata_Linear::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ return FindSuballocation((VkDeviceSize)allocHandle - 1).userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Linear::GetAllocationListBegin() const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_Linear::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+}
+
void VmaBlockMetadata_Linear::Clear()
{
m_SumFreeSize = GetSize();
@@ -8436,10 +8717,10 @@ void VmaBlockMetadata_Linear::DebugLogAllAllocations() const
DebugLogAllocation(it->offset, it->size, it->userData);
}
-VmaSuballocation& VmaBlockMetadata_Linear::FindSuballocation(VkDeviceSize offset)
+VmaSuballocation& VmaBlockMetadata_Linear::FindSuballocation(VkDeviceSize offset) const
{
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
VmaSuballocation refSuballoc;
refSuballoc.offset = offset;
@@ -8447,31 +8728,31 @@ VmaSuballocation& VmaBlockMetadata_Linear::FindSuballocation(VkDeviceSize offset
// Item from the 1st vector.
{
- const SuballocationVectorType::iterator it = VmaBinaryFindSorted(
+ SuballocationVectorType::const_iterator it = VmaBinaryFindSorted(
suballocations1st.begin() + m_1stNullItemsBeginCount,
suballocations1st.end(),
refSuballoc,
VmaSuballocationOffsetLess());
if (it != suballocations1st.end())
{
- return *it;
+ return const_cast<VmaSuballocation&>(*it);
}
}
if (m_2ndVectorMode != SECOND_VECTOR_EMPTY)
{
// Rest of members stays uninitialized intentionally for better performance.
- const SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?
+ SuballocationVectorType::const_iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?
VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :
VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());
if (it != suballocations2nd.end())
{
- return *it;
+ return const_cast<VmaSuballocation&>(*it);
}
}
VMA_ASSERT(0 && "Allocation not found in linear allocator!");
- return suballocations1st.back(); // Should never occur.
+ return const_cast<VmaSuballocation&>(suballocations1st.back()); // Should never occur.
}
bool VmaBlockMetadata_Linear::ShouldCompact1st() const
@@ -8882,6 +9163,7 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(
#endif // _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS
#endif // _VMA_BLOCK_METADATA_LINEAR
+#if 0
#ifndef _VMA_BLOCK_METADATA_BUDDY
/*
- GetSize() is the original size of allocated memory block.
@@ -8912,11 +9194,11 @@ public:
void Init(VkDeviceSize size) override;
bool Validate() const override;
- void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
- void AddPoolStats(VmaPoolStats& inoutStats) const override;
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json) const override;
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
#endif
bool CreateAllocationRequest(
@@ -8934,6 +9216,9 @@ public:
void Free(VmaAllocHandle allocHandle) override;
void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
void Clear() override;
void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
@@ -9007,11 +9292,11 @@ private:
}
return VmaNextPow2(size);
}
- Node* FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel);
+ Node* FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const;
void DeleteNodeChildren(Node* node);
bool ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const;
uint32_t AllocSizeToLevel(VkDeviceSize allocSize) const;
- void CalcAllocationStatInfoNode(VmaStatInfo& inoutInfo, const Node* node, VkDeviceSize levelNodeSize) const;
+ void AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const;
// Adds node to the front of FreeList at given level.
// node->type must be FREE.
// node->free.prev, next can be undefined.
@@ -9115,46 +9400,39 @@ bool VmaBlockMetadata_Buddy::Validate() const
return true;
}
-void VmaBlockMetadata_Buddy::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+void VmaBlockMetadata_Buddy::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
- VmaInitStatInfo(outInfo);
- outInfo.blockCount = 1;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
- CalcAllocationStatInfoNode(outInfo, m_Root, LevelToNodeSize(0));
+ AddNodeToDetailedStatistics(inoutStats, m_Root, LevelToNodeSize(0));
const VkDeviceSize unusableSize = GetUnusableSize();
if (unusableSize > 0)
- {
- VmaAddStatInfoUnusedRange(outInfo, unusableSize);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusableSize);
}
-void VmaBlockMetadata_Buddy::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Buddy::AddStatistics(VmaStatistics& inoutStats) const
{
- const VkDeviceSize unusableSize = GetUnusableSize();
-
- inoutStats.size += GetSize();
- inoutStats.unusedSize += m_SumFreeSize + unusableSize;
- inoutStats.allocationCount += m_AllocationCount;
- inoutStats.unusedRangeCount += m_FreeCount;
-
- if (unusableSize > 0)
- {
- ++inoutStats.unusedRangeCount;
- }
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_AllocationCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - m_SumFreeSize;
}
#if VMA_STATS_STRING_ENABLED
-void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
- VmaStatInfo stat;
- CalcAllocationStatInfo(stat);
+ VmaDetailedStatistics stats;
+ VmaClearDetailedStatistics(stats);
+ AddDetailedStatistics(stats);
PrintDetailedMap_Begin(
json,
- stat.unusedBytes,
- stat.allocationCount,
- stat.unusedRangeCount);
+ stats.statistics.blockBytes - stats.statistics.allocationBytes,
+ stats.statistics.allocationCount,
+ stats.unusedRangeCount,
+ mapRefCount);
PrintDetailedMapNode(json, m_Root, LevelToNodeSize(0));
@@ -9302,6 +9580,25 @@ void VmaBlockMetadata_Buddy::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVi
outInfo.pUserData = node->allocation.userData;
}
+void* VmaBlockMetadata_Buddy::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ uint32_t level = 0;
+ const Node* const node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level);
+ return node->allocation.userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Buddy::GetAllocationListBegin() const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_Buddy::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ return VK_NULL_HANDLE;
+}
+
void VmaBlockMetadata_Buddy::DeleteNodeChildren(Node* node)
{
if (node->type == Node::TYPE_SPLIT)
@@ -9330,7 +9627,7 @@ void VmaBlockMetadata_Buddy::SetAllocationUserData(VmaAllocHandle allocHandle, v
node->allocation.userData = userData;
}
-VmaBlockMetadata_Buddy::Node* VmaBlockMetadata_Buddy::FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel)
+VmaBlockMetadata_Buddy::Node* VmaBlockMetadata_Buddy::FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const
{
Node* node = m_Root;
VkDeviceSize nodeOffset = 0;
@@ -9446,23 +9743,23 @@ void VmaBlockMetadata_Buddy::Free(VmaAllocHandle allocHandle)
AddToFreeListFront(level, node);
}
-void VmaBlockMetadata_Buddy::CalcAllocationStatInfoNode(VmaStatInfo& inoutInfo, const Node* node, VkDeviceSize levelNodeSize) const
+void VmaBlockMetadata_Buddy::AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const
{
switch (node->type)
{
case Node::TYPE_FREE:
- VmaAddStatInfoUnusedRange(inoutInfo, levelNodeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, levelNodeSize);
break;
case Node::TYPE_ALLOCATION:
- VmaAddStatInfoAllocation(inoutInfo, levelNodeSize);
+ VmaAddDetailedStatisticsAllocation(inoutStats, levelNodeSize);
break;
case Node::TYPE_SPLIT:
{
const VkDeviceSize childrenNodeSize = levelNodeSize / 2;
const Node* const leftChild = node->split.leftChild;
- CalcAllocationStatInfoNode(inoutInfo, leftChild, childrenNodeSize);
+ AddNodeToDetailedStatistics(inoutStats, leftChild, childrenNodeSize);
const Node* const rightChild = leftChild->buddy;
- CalcAllocationStatInfoNode(inoutInfo, rightChild, childrenNodeSize);
+ AddNodeToDetailedStatistics(inoutStats, rightChild, childrenNodeSize);
}
break;
default:
@@ -9527,6 +9824,8 @@ void VmaBlockMetadata_Buddy::DebugLogAllAllocationNode(Node* node, uint32_t leve
{
switch (node->type)
{
+ case Node::TYPE_FREE:
+ break;
case Node::TYPE_ALLOCATION:
DebugLogAllocation(node->offset, LevelToNodeSize(level), node->allocation.userData);
break;
@@ -9569,6 +9868,7 @@ void VmaBlockMetadata_Buddy::PrintDetailedMapNode(class VmaJsonWriter& json, con
#endif // VMA_STATS_STRING_ENABLED
#endif // _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS
#endif // _VMA_BLOCK_METADATA_BUDDY
+#endif // #if 0
#ifndef _VMA_BLOCK_METADATA_TLSF
// To not search current larger region if first allocation won't succeed and skip to smaller range
@@ -9591,11 +9891,11 @@ public:
void Init(VkDeviceSize size) override;
bool Validate() const override;
- void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
- void AddPoolStats(VmaPoolStats& inoutStats) const override;
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json) const override;
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
#endif
bool CreateAllocationRequest(
@@ -9614,6 +9914,9 @@ public:
void Free(VmaAllocHandle allocHandle) override;
void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
void Clear() override;
void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
void DebugLogAllAllocations() const override;
@@ -9839,34 +10142,32 @@ bool VmaBlockMetadata_TLSF::Validate() const
return true;
}
-void VmaBlockMetadata_TLSF::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+void VmaBlockMetadata_TLSF::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
- VmaInitStatInfo(outInfo);
- outInfo.blockCount = 1;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
if (m_NullBlock->size > 0)
- VmaAddStatInfoUnusedRange(outInfo, m_NullBlock->size);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, m_NullBlock->size);
for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
{
if (block->IsFree())
- VmaAddStatInfoUnusedRange(outInfo, block->size);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, block->size);
else
- VmaAddStatInfoAllocation(outInfo, block->size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, block->size);
}
}
-void VmaBlockMetadata_TLSF::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_TLSF::AddStatistics(VmaStatistics& inoutStats) const
{
- inoutStats.size += GetSize();
- inoutStats.unusedSize += GetSumFreeSize();
- inoutStats.allocationCount += m_AllocCount;
- inoutStats.unusedRangeCount += m_BlocksFreeCount;
- if(m_NullBlock->size > 0)
- ++inoutStats.unusedRangeCount;
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_AllocCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - GetSumFreeSize();
}
#if VMA_STATS_STRING_ENABLED
-void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
size_t blockCount = m_AllocCount + m_BlocksFreeCount;
VmaStlAllocator<Block*> allocator(GetAllocationCallbacks());
@@ -9879,13 +10180,16 @@ void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json) const
}
VMA_ASSERT(i == 0);
- VmaStatInfo stat;
- CalcAllocationStatInfo(stat);
+ VmaDetailedStatistics stats;
+ VmaClearDetailedStatistics(stats);
+ AddDetailedStatistics(stats);
- PrintDetailedMap_Begin(json,
- stat.unusedBytes,
- stat.allocationCount,
- stat.unusedRangeCount);
+ PrintDetailedMap_Begin(
+ json,
+ stats.statistics.blockBytes - stats.statistics.allocationBytes,
+ stats.statistics.allocationCount,
+ stats.unusedRangeCount,
+ mapRefCount);
for (; i < blockCount; ++i)
{
@@ -9996,6 +10300,33 @@ bool VmaBlockMetadata_TLSF::CreateAllocationRequest(
nextListBlock = nextListBlock->NextFree();
}
}
+ else if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT )
+ {
+ // Perform search from the start
+ VmaStlAllocator<Block*> allocator(GetAllocationCallbacks());
+ VmaVector<Block*, VmaStlAllocator<Block*>> blockList(m_BlocksFreeCount, allocator);
+
+ size_t i = m_BlocksFreeCount;
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ if (block->IsFree() && block->size >= allocSize)
+ blockList[--i] = block;
+ }
+
+ for (; i < m_BlocksFreeCount; ++i)
+ {
+ Block& block = *blockList[i];
+ if (CheckBlock(block, GetListIndex(block.size), allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ }
+
+ // If failed check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // Whole range searched, no more memory
+ return false;
+ }
else
{
// Check larger bucket
@@ -10046,7 +10377,7 @@ VkResult VmaBlockMetadata_TLSF::CheckCorruption(const void* pBlockData)
if (!VmaValidateMagicValue(pBlockData, block->offset + block->size))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_UNKNOWN;
+ return VK_ERROR_UNKNOWN_COPY;
}
}
}
@@ -10228,6 +10559,40 @@ void VmaBlockMetadata_TLSF::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVir
outInfo.pUserData = block->UserData();
}
+void* VmaBlockMetadata_TLSF::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Cannot get user data for free block!");
+ return block->UserData();
+}
+
+VmaAllocHandle VmaBlockMetadata_TLSF::GetAllocationListBegin() const
+{
+ if (m_AllocCount == 0)
+ return VK_NULL_HANDLE;
+
+ for (Block* block = m_NullBlock->prevPhysical; block; block = block->prevPhysical)
+ {
+ if (!block->IsFree())
+ return (VmaAllocHandle)block;
+ }
+ VMA_ASSERT(false && "If m_AllocCount > 0 then should find any allocation!");
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_TLSF::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ Block* startBlock = (Block*)prevAlloc;
+ VMA_ASSERT(!startBlock->IsFree() && "Incorrect block!");
+
+ for (Block* block = startBlock->prevPhysical; block; block = block->prevPhysical)
+ {
+ if (!block->IsFree())
+ return (VmaAllocHandle)block;
+ }
+ return VK_NULL_HANDLE;
+}
+
void VmaBlockMetadata_TLSF::Clear()
{
m_AllocCount = 0;
@@ -10440,7 +10805,7 @@ Synchronized internally with a mutex.
*/
class VmaBlockVector
{
- friend class VmaDefragmentationAlgorithm_Generic;
+ friend struct VmaDefragmentationContext_T;
VMA_CLASS_NO_COPY(VmaBlockVector)
public:
VmaBlockVector(
@@ -10468,9 +10833,14 @@ public:
bool HasExplicitBlockSize() const { return m_ExplicitBlockSize; }
float GetPriority() const { return m_Priority; }
void* const GetAllocationNextPtr() const { return m_pMemoryAllocateNext; }
+ // To be used only while the m_Mutex is locked. Used during defragmentation.
+ size_t GetBlockCount() const { return m_Blocks.size(); }
+ // To be used only while the m_Mutex is locked. Used during defragmentation.
+ VmaDeviceMemoryBlock* GetBlock(size_t index) const { return m_Blocks[index]; }
VkResult CreateMinBlocks();
- void AddPoolStats(VmaPoolStats* pStats);
+ void AddStatistics(VmaStatistics& inoutStats);
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats);
bool IsEmpty();
bool IsCorruptionDetectionEnabled() const;
@@ -10482,9 +10852,7 @@ public:
size_t allocationCount,
VmaAllocation* pAllocations);
- void Free(const VmaAllocation hAllocation);
- // Adds statistics of this BlockVector to pStats.
- void AddStats(VmaStats* pStats);
+ void Free(const VmaAllocation hAllocation, bool incrementalSort = true);
#if VMA_STATS_STRING_ENABLED
void PrintDetailedMap(class VmaJsonWriter& json);
@@ -10492,34 +10860,6 @@ public:
VkResult CheckCorruption();
- // Saves results in pCtx->res.
- void Defragment(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags,
- VkDeviceSize& maxCpuBytesToMove, uint32_t& maxCpuAllocationsToMove,
- VkDeviceSize& maxGpuBytesToMove, uint32_t& maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer);
- void DefragmentationEnd(
- class VmaBlockVectorDefragmentationContext* pCtx,
- uint32_t flags,
- VmaDefragmentationStats* pStats);
-
- uint32_t ProcessDefragmentations(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationPassMoveInfo* pMove, uint32_t maxMoves);
-
- void CommitDefragmentations(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats);
-
- ////////////////////////////////////////////////////////////////////////////////
- // To be used only while the m_Mutex is locked. Used during defragmentation.
-
- size_t GetBlockCount() const { return m_Blocks.size(); }
- VmaDeviceMemoryBlock* GetBlock(size_t index) const { return m_Blocks[index]; }
- size_t CalcAllocationCount() const;
- bool IsBufferImageGranularityConflictPossible() const;
-
private:
const VmaAllocator m_hAllocator;
const VmaPool m_hParentPool;
@@ -10535,9 +10875,6 @@ private:
void* const m_pMemoryAllocateNext;
VMA_RW_MUTEX m_Mutex;
- /* There can be at most one allocation that is completely empty (except when minBlockCount > 0) -
- a hysteresis to avoid pessimistic case of alternating creation and destruction of a VkDeviceMemory. */
- bool m_HasEmptyBlock;
// Incrementally sorted by sumFreeSize, ascending.
VmaVector<VmaDeviceMemoryBlock*, VmaStlAllocator<VmaDeviceMemoryBlock*>> m_Blocks;
uint32_t m_NextBlockId;
@@ -10548,6 +10885,7 @@ private:
// Performs single step in sorting m_Blocks. They may not be fully sorted
// after this call.
void IncrementallySortBlocks();
+ void SortByFreeSize();
VkResult AllocatePage(
VkDeviceSize size,
@@ -10566,327 +10904,90 @@ private:
uint32_t strategy,
VmaAllocation* pAllocation);
- VkResult CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex);
- // Saves result to pCtx->res.
- void ApplyDefragmentationMovesCpu(
- VmaBlockVectorDefragmentationContext* pDefragCtx,
- const VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves);
- // Saves result to pCtx->res.
- void ApplyDefragmentationMovesGpu(
- VmaBlockVectorDefragmentationContext* pDefragCtx,
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkCommandBuffer commandBuffer);
+ VkResult CommitAllocationRequest(
+ VmaAllocationRequest& allocRequest,
+ VmaDeviceMemoryBlock* pBlock,
+ VkDeviceSize alignment,
+ VmaAllocationCreateFlags allocFlags,
+ void* pUserData,
+ VmaSuballocationType suballocType,
+ VmaAllocation* pAllocation);
- /*
- Used during defragmentation. pDefragmentationStats is optional. It is in/out
- - updated with new data.
- */
- void FreeEmptyBlocks(VmaDefragmentationStats* pDefragmentationStats);
- void UpdateHasEmptyBlock();
+ VkResult CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex);
+ bool HasEmptyBlock();
};
#endif // _VMA_BLOCK_VECTOR
-#ifndef _VMA_DEFRAGMENTATION_ALGORITHM
-struct VmaDefragmentationMove
-{
- size_t srcBlockIndex;
- size_t dstBlockIndex;
- VkDeviceSize srcOffset;
- VkDeviceSize dstOffset;
- VmaAllocHandle dstHandle;
- VkDeviceSize size;
- VmaAllocation hAllocation;
- VmaDeviceMemoryBlock* pSrcBlock;
- VmaDeviceMemoryBlock* pDstBlock;
-};
-
-/*
-Performs defragmentation:
-
-- Updates `pBlockVector->m_pMetadata`.
-- Updates allocations by calling ChangeBlockAllocation() or ChangeOffset().
-- Does not move actual data, only returns requested moves as `moves`.
-*/
-class VmaDefragmentationAlgorithm
-{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm)
-public:
- VmaDefragmentationAlgorithm(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector)
- : m_hAllocator(hAllocator),
- m_pBlockVector(pBlockVector) {}
- virtual ~VmaDefragmentationAlgorithm() = default;
-
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged) = 0;
- virtual void AddAll() = 0;
-
- virtual VkResult Defragment(
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags) = 0;
-
- virtual VkDeviceSize GetBytesMoved() const = 0;
- virtual uint32_t GetAllocationsMoved() const = 0;
-
-protected:
- struct AllocationInfo
- {
- VmaAllocation m_hAllocation;
- VkBool32* m_pChanged;
-
- AllocationInfo() : m_hAllocation(VK_NULL_HANDLE), m_pChanged(VMA_NULL) {}
- AllocationInfo(VmaAllocation hAlloc, VkBool32* pChanged) : m_hAllocation(hAlloc), m_pChanged(pChanged) {}
- };
-
- VmaAllocator const m_hAllocator;
- VmaBlockVector* const m_pBlockVector;
-};
-
-#endif // _VMA_DEFRAGMENTATION_ALGORITHM
-
-#ifndef _VMA_DEFRAGMENTATION_ALGORITHM_GENERIC
-class VmaDefragmentationAlgorithm_Generic : public VmaDefragmentationAlgorithm
-{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm_Generic)
-public:
- VmaDefragmentationAlgorithm_Generic(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- bool overlappingMoveSupported);
- virtual ~VmaDefragmentationAlgorithm_Generic();
-
- virtual void AddAll() { m_AllAllocations = true; }
- virtual VkDeviceSize GetBytesMoved() const { return m_BytesMoved; }
- virtual uint32_t GetAllocationsMoved() const { return m_AllocationsMoved; }
-
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged);
- virtual VkResult Defragment(
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags);
-
-private:
- struct AllocationInfoSizeGreater
- {
- bool operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const;
- };
- struct AllocationInfoOffsetGreater
- {
- bool operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const;
- };
- struct BlockInfo
- {
- size_t m_OriginalBlockIndex;
- VmaDeviceMemoryBlock* m_pBlock;
- bool m_HasNonMovableAllocations;
- VmaVector<AllocationInfo, VmaStlAllocator<AllocationInfo>> m_Allocations;
-
- BlockInfo(const VkAllocationCallbacks* pAllocationCallbacks);
-
- void CalcHasNonMovableAllocations();
- void SortAllocationsBySizeDescending();
- void SortAllocationsByOffsetDescending();
- };
- struct BlockPointerLess
- {
- bool operator()(const BlockInfo* pLhsBlockInfo, const VmaDeviceMemoryBlock* pRhsBlock) const;
- bool operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const;
- };
- // 1. Blocks with some non-movable allocations go first.
- // 2. Blocks with smaller sumFreeSize go first.
- struct BlockInfoCompareMoveDestination
- {
- bool operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const;
- };
- typedef VmaVector<BlockInfo*, VmaStlAllocator<BlockInfo*>> BlockInfoVector;
-
- BlockInfoVector m_Blocks;
- uint32_t m_AllocationCount;
- bool m_AllAllocations;
- VkDeviceSize m_BytesMoved;
- uint32_t m_AllocationsMoved;
-
- static bool MoveMakesSense(
- size_t dstBlockIndex, VkDeviceSize dstOffset,
- size_t srcBlockIndex, VkDeviceSize srcOffset);
-
- size_t CalcBlocksWithNonMovableCount() const;
- VkResult DefragmentRound(
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- bool freeOldAllocations);
-};
-#endif // _VMA_DEFRAGMENTATION_ALGORITHM_GENERIC
-
-#ifndef _VMA_DEFRAGMENTATION_ALGORITHM_FAST
-class VmaDefragmentationAlgorithm_Fast : public VmaDefragmentationAlgorithm
+#ifndef _VMA_DEFRAGMENTATION_CONTEXT
+struct VmaDefragmentationContext_T
{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm_Fast)
+ VMA_CLASS_NO_COPY(VmaDefragmentationContext_T)
public:
- VmaDefragmentationAlgorithm_Fast(
+ VmaDefragmentationContext_T(
VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- bool overlappingMoveSupported);
- virtual ~VmaDefragmentationAlgorithm_Fast() = default;
+ const VmaDefragmentationInfo& info);
+ ~VmaDefragmentationContext_T();
- virtual void AddAll() { m_AllAllocations = true; }
- virtual VkDeviceSize GetBytesMoved() const { return m_BytesMoved; }
- virtual uint32_t GetAllocationsMoved() const { return m_AllocationsMoved; }
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged) { ++m_AllocationCount; }
+ void GetStats(VmaDefragmentationStats& outStats) { outStats = m_Stats; }
- virtual VkResult Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags);
+ VkResult DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo);
+ VkResult DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo);
private:
- struct BlockInfo
+ struct ImmovableBlock
{
- size_t origBlockIndex;
+ uint32_t vectorIndex;
+ VmaDeviceMemoryBlock* block;
};
- class FreeSpaceDatabase
+ struct StateExtensive
{
- public:
- FreeSpaceDatabase();
-
- void Register(size_t blockInfoIndex, VkDeviceSize offset, VkDeviceSize size);
- bool Fetch(VkDeviceSize alignment, VkDeviceSize size,
- size_t& outBlockInfoIndex, VkDeviceSize& outDstOffset);
-
- private:
- static const size_t MAX_COUNT = 4;
-
- struct FreeSpace
+ enum class Operation : uint8_t
{
- size_t blockInfoIndex; // SIZE_MAX means this structure is invalid.
- VkDeviceSize offset;
- VkDeviceSize size;
- } m_FreeSpaces[MAX_COUNT];
- };
-
- const bool m_OverlappingMoveSupported;
-
- uint32_t m_AllocationCount;
- bool m_AllAllocations;
- VkDeviceSize m_BytesMoved;
- uint32_t m_AllocationsMoved;
-
- VmaVector<BlockInfo, VmaStlAllocator<BlockInfo>> m_BlockInfos;
-
- void PreprocessMetadata();
- void PostprocessMetadata();
- void InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, const VmaSuballocation& suballoc);
-};
-#endif // _VMA_DEFRAGMENTATION_ALGORITHM_FAST
+ FindFreeBlockBuffer, FindFreeBlockTexture, FindFreeBlockAll,
+ MoveBuffers, MoveTextures, MoveAll,
+ Cleanup, Done
+ };
-#ifndef _VMA_BLOCK_VECTOR_DEFRAGMENTATION_CONTEXT
-struct VmaBlockDefragmentationContext
-{
- enum BLOCK_FLAG
- {
- BLOCK_FLAG_USED = 0x00000001,
+ Operation operation = Operation::FindFreeBlockTexture;
+ size_t firstFreeBlock = SIZE_MAX;
};
- uint32_t flags;
- VkBuffer hBuffer;
-};
-
-class VmaBlockVectorDefragmentationContext
-{
- VMA_CLASS_NO_COPY(VmaBlockVectorDefragmentationContext)
-public:
- VkResult res;
- bool mutexLocked;
- VmaVector<VmaBlockDefragmentationContext, VmaStlAllocator<VmaBlockDefragmentationContext>> blockContexts;
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>> defragmentationMoves;
- uint32_t defragmentationMovesProcessed;
- uint32_t defragmentationMovesCommitted;
- bool hasDefragmentationPlan;
-
- VmaBlockVectorDefragmentationContext(
- VmaAllocator hAllocator,
- VmaPool hCustomPool, // Optional.
- VmaBlockVector* pBlockVector);
- ~VmaBlockVectorDefragmentationContext();
-
- VmaPool GetCustomPool() const { return m_hCustomPool; }
- VmaBlockVector* GetBlockVector() const { return m_pBlockVector; }
- VmaDefragmentationAlgorithm* GetAlgorithm() const { return m_pAlgorithm; }
- void AddAll() { m_AllAllocations = true; }
-
- void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged);
- void Begin(bool overlappingMoveSupported, VmaDefragmentationFlags flags);
-
-private:
- struct AllocInfo
+ struct MoveAllocationData
{
- VmaAllocation hAlloc;
- VkBool32* pChanged;
+ VkDeviceSize size;
+ VkDeviceSize alignment;
+ VmaSuballocationType type;
+ VmaAllocationCreateFlags flags;
+ VmaDefragmentationMove move = {};
};
- const VmaAllocator m_hAllocator;
- // Null if not from custom pool.
- const VmaPool m_hCustomPool;
- // Redundant, for convenience not to fetch from m_hCustomPool->m_BlockVector or m_hAllocator->m_pBlockVectors.
- VmaBlockVector* const m_pBlockVector;
- // Owner of this object.
- VmaDefragmentationAlgorithm* m_pAlgorithm;
- // Used between constructor and Begin.
- VmaVector<AllocInfo, VmaStlAllocator<AllocInfo>> m_Allocations;
- bool m_AllAllocations;
-};
-#endif // _VMA_BLOCK_VECTOR_DEFRAGMENTATION_CONTEXT
-
-#ifndef _VMA_DEFRAGMENTATION_CONTEXT
-struct VmaDefragmentationContext_T
-{
-private:
- VMA_CLASS_NO_COPY(VmaDefragmentationContext_T)
-public:
- VmaDefragmentationContext_T(
- VmaAllocator hAllocator,
- uint32_t flags,
- VmaDefragmentationStats* pStats);
- ~VmaDefragmentationContext_T();
-
- void AddPools(uint32_t poolCount, const VmaPool* pPools);
- void AddAllocations(
- uint32_t allocationCount,
- const VmaAllocation* pAllocations,
- VkBool32* pAllocationsChanged);
-
- /*
- Returns:
- - `VK_SUCCESS` if succeeded and object can be destroyed immediately.
- - `VK_NOT_READY` if succeeded but the object must remain alive until vmaDefragmentationEnd().
- - Negative value if error occurred and object can be destroyed immediately.
- */
- VkResult Defragment(
- VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,
- VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer, VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags);
-
- VkResult DefragmentPassBegin(VmaDefragmentationPassInfo* pInfo);
- VkResult DefragmentPassEnd();
-
-private:
- const VmaAllocator m_hAllocator;
- const uint32_t m_Flags;
- VmaDefragmentationStats* const m_pStats;
-
- VkDeviceSize m_MaxCpuBytesToMove;
- uint32_t m_MaxCpuAllocationsToMove;
- VkDeviceSize m_MaxGpuBytesToMove;
- uint32_t m_MaxGpuAllocationsToMove;
-
- // Owner of these objects.
- VmaBlockVectorDefragmentationContext* m_DefaultPoolContexts[VK_MAX_MEMORY_TYPES];
- // Owner of these objects.
- VmaVector<VmaBlockVectorDefragmentationContext*, VmaStlAllocator<VmaBlockVectorDefragmentationContext*>> m_CustomPoolContexts;
+ const VkDeviceSize m_MaxPassBytes;
+ const uint32_t m_MaxPassAllocations;
+
+ VmaStlAllocator<VmaDefragmentationMove> m_MoveAllocator;
+ VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>> m_Moves;
+
+ uint32_t m_Algorithm;
+ uint32_t m_BlockVectorCount;
+ VmaBlockVector* m_PoolBlockVector;
+ VmaBlockVector** m_pBlockVectors;
+ size_t m_ImmovableBlockCount = 0;
+ VmaDefragmentationStats m_Stats = { 0 };
+ void* m_AlgorithmState = VMA_NULL;
+
+ static MoveAllocationData GetMoveData(VmaAllocHandle handle, VmaBlockMetadata* metadata);
+ bool IncrementCounters(uint32_t& allocations, VkDeviceSize bytes);
+ bool ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block);
+ bool AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector);
+
+ bool ComputeDefragmentation(VmaBlockVector& vector, size_t index);
+ bool ComputeDefragmentation_Fast(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Balanced(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Full(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index);
+
+ bool MoveDataToFreeBlocks(VmaSuballocationType currentType,
+ VmaBlockVector& vector, size_t firstFreeBlock,
+ bool& texturePresent, bool& bufferPresent, bool& otherPresent);
};
#endif // _VMA_DEFRAGMENTATION_CONTEXT
@@ -10896,12 +10997,13 @@ struct VmaPool_T
friend struct VmaPoolListItemTraits;
VMA_CLASS_NO_COPY(VmaPool_T)
public:
- VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES];
- VmaDedicatedAllocationList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES];
+ VmaBlockVector m_BlockVector;
+ VmaDedicatedAllocationList m_DedicatedAllocations;
VmaPool_T(
VmaAllocator hAllocator,
- const VmaPoolCreateInfo& createInfo);
+ const VmaPoolCreateInfo& createInfo,
+ VkDeviceSize preferredBlockSize);
~VmaPool_T();
uint32_t GetId() const { return m_Id; }
@@ -10915,7 +11017,6 @@ public:
#endif
private:
- const VmaAllocator m_hAllocator;
uint32_t m_Id;
char* m_Name;
VmaPool_T* m_PrevPool = VMA_NULL;
@@ -10936,6 +11037,8 @@ struct VmaPoolListItemTraits
#ifndef _VMA_CURRENT_BUDGET_DATA
struct VmaCurrentBudgetData
{
+ VMA_ATOMIC_UINT32 m_BlockCount[VK_MAX_MEMORY_HEAPS];
+ VMA_ATOMIC_UINT32 m_AllocationCount[VK_MAX_MEMORY_HEAPS];
VMA_ATOMIC_UINT64 m_BlockBytes[VK_MAX_MEMORY_HEAPS];
VMA_ATOMIC_UINT64 m_AllocationBytes[VK_MAX_MEMORY_HEAPS];
@@ -10958,6 +11061,8 @@ VmaCurrentBudgetData::VmaCurrentBudgetData()
{
for (uint32_t heapIndex = 0; heapIndex < VK_MAX_MEMORY_HEAPS; ++heapIndex)
{
+ m_BlockCount[heapIndex] = 0;
+ m_AllocationCount[heapIndex] = 0;
m_BlockBytes[heapIndex] = 0;
m_AllocationBytes[heapIndex] = 0;
#if VMA_MEMORY_BUDGET
@@ -10975,6 +11080,7 @@ VmaCurrentBudgetData::VmaCurrentBudgetData()
void VmaCurrentBudgetData::AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize)
{
m_AllocationBytes[heapIndex] += allocationSize;
+ ++m_AllocationCount[heapIndex];
#if VMA_MEMORY_BUDGET
++m_OperationsSinceBudgetFetch;
#endif
@@ -10984,6 +11090,8 @@ void VmaCurrentBudgetData::RemoveAllocation(uint32_t heapIndex, VkDeviceSize all
{
VMA_ASSERT(m_AllocationBytes[heapIndex] >= allocationSize);
m_AllocationBytes[heapIndex] -= allocationSize;
+ VMA_ASSERT(m_AllocationCount[heapIndex] > 0);
+ --m_AllocationCount[heapIndex];
#if VMA_MEMORY_BUDGET
++m_OperationsSinceBudgetFetch;
#endif
@@ -11045,7 +11153,8 @@ public:
void GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo);
VkResult Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation,
VkDeviceSize* outOffset);
- void CalculateStats(VmaStatInfo& outStatInfo) const;
+ void GetStatistics(VmaStatistics& outStats) const;
+ void CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const;
#if VMA_STATS_STRING_ENABLED
void BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const;
#endif
@@ -11062,20 +11171,14 @@ VmaVirtualBlock_T::VmaVirtualBlock_T(const VmaVirtualBlockCreateInfo& createInfo
const uint32_t algorithm = createInfo.flags & VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK;
switch (algorithm)
{
+ default:
+ VMA_ASSERT(0);
case 0:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Generic)(VK_NULL_HANDLE, 1, true);
- break;
- case VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Buddy)(VK_NULL_HANDLE, 1, true);
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_TLSF)(VK_NULL_HANDLE, 1, true);
break;
case VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT:
m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Linear)(VK_NULL_HANDLE, 1, true);
break;
- case VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_TLSF)(VK_NULL_HANDLE, 1, true);
- break;
- default:
- VMA_ASSERT(0);
}
m_Metadata->Init(createInfo.size);
@@ -11129,10 +11232,16 @@ VkResult VmaVirtualBlock_T::Allocate(const VmaVirtualAllocationCreateInfo& creat
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
-void VmaVirtualBlock_T::CalculateStats(VmaStatInfo& outStatInfo) const
+void VmaVirtualBlock_T::GetStatistics(VmaStatistics& outStats) const
+{
+ VmaClearStatistics(outStats);
+ m_Metadata->AddStatistics(outStats);
+}
+
+void VmaVirtualBlock_T::CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const
{
- m_Metadata->CalcAllocationStatInfo(outStatInfo);
- VmaPostprocessCalcStatInfo(outStatInfo);
+ VmaClearDetailedStatistics(outStats);
+ m_Metadata->AddDetailedStatistics(outStats);
}
#if VMA_STATS_STRING_ENABLED
@@ -11141,16 +11250,17 @@ void VmaVirtualBlock_T::BuildStatsString(bool detailedMap, VmaStringBuilder& sb)
VmaJsonWriter json(GetAllocationCallbacks(), sb);
json.BeginObject();
- VmaStatInfo stat = {};
- CalculateStats(stat);
+ VmaDetailedStatistics stats;
+ CalculateDetailedStatistics(stats);
json.WriteString("Stats");
- VmaPrintStatInfo(json, stat);
+ VmaPrintDetailedStatistics(json, stats);
if (detailedMap)
{
json.WriteString("Details");
- m_Metadata->PrintDetailedMap(json);
+ m_Metadata->PrintDetailedMap(json,
+ UINT32_MAX); // mapRefCount
}
json.EndObject();
@@ -11159,6 +11269,7 @@ void VmaVirtualBlock_T::BuildStatsString(bool detailedMap, VmaStringBuilder& sb)
#endif // _VMA_VIRTUAL_BLOCK_T_FUNCTIONS
#endif // _VMA_VIRTUAL_BLOCK_T
+
// Main allocator object.
struct VmaAllocator_T
{
@@ -11253,6 +11364,11 @@ public:
VkMemoryRequirements& memReq,
bool& requiresDedicatedAllocation,
bool& prefersDedicatedAllocation) const;
+ VkResult FindMemoryTypeIndex(
+ uint32_t memoryTypeBits,
+ const VmaAllocationCreateInfo* pAllocationCreateInfo,
+ VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown.
+ uint32_t* pMemoryTypeIndex) const;
// Main allocation function.
VkResult AllocateMemory(
@@ -11260,8 +11376,8 @@ public:
bool requiresDedicatedAllocation,
bool prefersDedicatedAllocation,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage, // UINT32_MAX when unknown.
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage, // UINT32_MAX if unknown.
const VmaAllocationCreateInfo& createInfo,
VmaSuballocationType suballocType,
size_t allocationCount,
@@ -11272,7 +11388,7 @@ public:
size_t allocationCount,
const VmaAllocation* pAllocations);
- void CalculateStats(VmaStats* pStats);
+ void CalculateStatistics(VmaTotalStatistics* pStats);
void GetHeapBudgets(
VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount);
@@ -11281,24 +11397,12 @@ public:
void PrintDetailedMap(class VmaJsonWriter& json);
#endif
- VkResult DefragmentationBegin(
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext* pContext);
- VkResult DefragmentationEnd(
- VmaDefragmentationContext context);
-
- VkResult DefragmentationPassBegin(
- VmaDefragmentationPassInfo* pInfo,
- VmaDefragmentationContext context);
- VkResult DefragmentationPassEnd(
- VmaDefragmentationContext context);
-
void GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo);
VkResult CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool);
void DestroyPool(VmaPool pool);
- void GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats);
+ void GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats);
+ void CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats);
void SetCurrentFrameIndex(uint32_t frameIndex);
uint32_t GetCurrentFrameIndex() const { return m_CurrentFrameIndex.load(); }
@@ -11397,18 +11501,16 @@ private:
void ValidateVulkanFunctions();
-public: // I'm sorry
VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex);
-private:
VkResult AllocateMemoryOfType(
VmaPool pool,
VkDeviceSize size,
VkDeviceSize alignment,
bool dedicatedPreferred,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
const VmaAllocationCreateInfo& createInfo,
uint32_t memTypeIndex,
VmaSuballocationType suballocType,
@@ -11426,6 +11528,7 @@ private:
const VkMemoryAllocateInfo& allocInfo,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
void* pUserData,
VmaAllocation* pAllocation);
@@ -11438,12 +11541,13 @@ private:
uint32_t memTypeIndex,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
bool canAliasMemory,
void* pUserData,
float priority,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
size_t allocationCount,
VmaAllocation* pAllocations,
const void* pNextChain = nullptr);
@@ -11561,19 +11665,11 @@ void VmaDeviceMemoryBlock::Init(
m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator->GetAllocationCallbacks(),
bufferImageGranularity, false); // isVirtual
break;
- case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Buddy)(hAllocator->GetAllocationCallbacks(),
- bufferImageGranularity, false); // isVirtual
- break;
- case VMA_POOL_CREATE_TLSF_ALGORITHM_BIT:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_TLSF)(hAllocator->GetAllocationCallbacks(),
- bufferImageGranularity, false); // isVirtual
- break;
default:
VMA_ASSERT(0);
// Fall-through.
case 0:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Generic)(hAllocator->GetAllocationCallbacks(),
+ m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_TLSF)(hAllocator->GetAllocationCallbacks(),
bufferImageGranularity, false); // isVirtual
}
m_pMetadata->Init(newSize);
@@ -11596,6 +11692,19 @@ void VmaDeviceMemoryBlock::Destroy(VmaAllocator allocator)
m_pMetadata = VMA_NULL;
}
+void VmaDeviceMemoryBlock::PostFree(VmaAllocator hAllocator)
+{
+ if(m_MappingHysteresis.PostFree())
+ {
+ VMA_ASSERT(m_MappingHysteresis.GetExtraMapping() == 0);
+ if (m_MapCount == 0)
+ {
+ m_pMappedData = VMA_NULL;
+ (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory);
+ }
+ }
+}
+
bool VmaDeviceMemoryBlock::Validate() const
{
VMA_VALIDATE((m_hMemory != VK_NULL_HANDLE) &&
@@ -11627,8 +11736,10 @@ VkResult VmaDeviceMemoryBlock::Map(VmaAllocator hAllocator, uint32_t count, void
return VK_SUCCESS;
}
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
- if (m_MapCount != 0)
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
+ const uint32_t oldTotalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping();
+ m_MappingHysteresis.PostMap();
+ if (oldTotalMapCount != 0)
{
m_MapCount += count;
VMA_ASSERT(m_pMappedData != VMA_NULL);
@@ -11666,15 +11777,17 @@ void VmaDeviceMemoryBlock::Unmap(VmaAllocator hAllocator, uint32_t count)
return;
}
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
if (m_MapCount >= count)
{
m_MapCount -= count;
- if (m_MapCount == 0)
+ const uint32_t totalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping();
+ if (totalMapCount == 0)
{
m_pMappedData = VMA_NULL;
(*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory);
}
+ m_MappingHysteresis.PostUnmap();
}
else
{
@@ -11732,7 +11845,7 @@ VkResult VmaDeviceMemoryBlock::BindBufferMemory(
"Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?");
const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset;
// This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
return hAllocator->BindVulkanBuffer(m_hMemory, memoryOffset, hBuffer, pNext);
}
@@ -11749,13 +11862,13 @@ VkResult VmaDeviceMemoryBlock::BindImageMemory(
"Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?");
const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset;
// This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
return hAllocator->BindVulkanImage(m_hMemory, memoryOffset, hImage, pNext);
}
#endif // _VMA_DEVICE_MEMORY_BLOCK_FUNCTIONS
#ifndef _VMA_ALLOCATION_T_FUNCTIONS
-VmaAllocation_T::VmaAllocation_T(bool userDataString)
+VmaAllocation_T::VmaAllocation_T(bool userDataString, bool mappingAllowed)
: m_Alignment{ 1 },
m_Size{ 0 },
m_pUserData{ VMA_NULL },
@@ -11763,8 +11876,13 @@ VmaAllocation_T::VmaAllocation_T(bool userDataString)
m_Type{ (uint8_t)ALLOCATION_TYPE_NONE },
m_SuballocationType{ (uint8_t)VMA_SUBALLOCATION_TYPE_UNKNOWN },
m_MapCount{ 0 },
- m_Flags{ userDataString ? (uint8_t)FLAG_USER_DATA_STRING : (uint8_t)0 }
+ m_Flags{ 0 }
{
+ if(userDataString)
+ m_Flags |= (uint8_t)FLAG_USER_DATA_STRING;
+ if(mappingAllowed)
+ m_Flags |= (uint8_t)FLAG_MAPPING_ALLOWED;
+
#if VMA_STATS_STRING_ENABLED
m_BufferImageUsage = 0;
#endif
@@ -11772,10 +11890,10 @@ VmaAllocation_T::VmaAllocation_T(bool userDataString)
VmaAllocation_T::~VmaAllocation_T()
{
- VMA_ASSERT((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) == 0 && "Allocation was not unmapped before destruction.");
+ VMA_ASSERT(m_MapCount == 0 && "Allocation was not unmapped before destruction.");
// Check if owned string was freed.
- VMA_ASSERT(m_pUserData == VMA_NULL);
+ VMA_ASSERT((IsUserDataString() && m_pUserData == VMA_NULL) || !IsUserDataString());
}
void VmaAllocation_T::InitBlockAllocation(
@@ -11793,7 +11911,11 @@ void VmaAllocation_T::InitBlockAllocation(
m_Alignment = alignment;
m_Size = size;
m_MemoryTypeIndex = memoryTypeIndex;
- m_MapCount = mapped ? MAP_COUNT_FLAG_PERSISTENT_MAP : 0;
+ if(mapped)
+ {
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+ m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP;
+ }
m_SuballocationType = (uint8_t)suballocationType;
m_BlockAllocation.m_Block = block;
m_BlockAllocation.m_AllocHandle = allocHandle;
@@ -11814,7 +11936,11 @@ void VmaAllocation_T::InitDedicatedAllocation(
m_Size = size;
m_MemoryTypeIndex = memoryTypeIndex;
m_SuballocationType = (uint8_t)suballocationType;
- m_MapCount = (pMappedData != VMA_NULL) ? MAP_COUNT_FLAG_PERSISTENT_MAP : 0;
+ if(pMappedData != VMA_NULL)
+ {
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+ m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP;
+ }
m_DedicatedAllocation.m_hParentPool = hParentPool;
m_DedicatedAllocation.m_hMemory = hMemory;
m_DedicatedAllocation.m_pMappedData = pMappedData;
@@ -11841,32 +11967,19 @@ void VmaAllocation_T::SetUserData(VmaAllocator hAllocator, void* pUserData)
}
}
-void VmaAllocation_T::ChangeBlockAllocation(
- VmaAllocator hAllocator,
- VmaDeviceMemoryBlock* block,
- VmaAllocHandle allocHandle)
+void VmaAllocation_T::SwapBlockAllocation(VmaAllocation allocation)
{
- VMA_ASSERT(block != VMA_NULL);
+ VMA_ASSERT(allocation != VMA_NULL);
VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
+ VMA_ASSERT(allocation->m_Type == ALLOCATION_TYPE_BLOCK);
- // Move mapping reference counter from old block to new block.
- if (block != m_BlockAllocation.m_Block)
- {
- uint32_t mapRefCount = m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP;
- if (IsPersistentMap())
- ++mapRefCount;
- m_BlockAllocation.m_Block->Unmap(hAllocator, mapRefCount);
- block->Map(hAllocator, mapRefCount, VMA_NULL);
- }
+ m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, allocation);
+ VMA_SWAP(m_BlockAllocation, allocation->m_BlockAllocation);
+ m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, this);
- m_BlockAllocation.m_Block = block;
- m_BlockAllocation.m_AllocHandle = allocHandle;
-}
-
-void VmaAllocation_T::ChangeAllocHandle(VmaAllocHandle newAllocHandle)
-{
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
- m_BlockAllocation.m_AllocHandle = newAllocHandle;
+#if VMA_STATS_STRING_ENABLED
+ VMA_SWAP(m_BufferImageUsage, allocation->m_BufferImageUsage);
+#endif
}
VmaAllocHandle VmaAllocation_T::GetAllocHandle() const
@@ -11930,7 +12043,7 @@ void* VmaAllocation_T::GetMappedData() const
switch (m_Type)
{
case ALLOCATION_TYPE_BLOCK:
- if (m_MapCount != 0)
+ if (m_MapCount != 0 || IsPersistentMap())
{
void* pBlockData = m_BlockAllocation.m_Block->GetMappedData();
VMA_ASSERT(pBlockData != VMA_NULL);
@@ -11942,7 +12055,7 @@ void* VmaAllocation_T::GetMappedData() const
}
break;
case ALLOCATION_TYPE_DEDICATED:
- VMA_ASSERT((m_DedicatedAllocation.m_pMappedData != VMA_NULL) == (m_MapCount != 0));
+ VMA_ASSERT((m_DedicatedAllocation.m_pMappedData != VMA_NULL) == (m_MapCount != 0 || IsPersistentMap()));
return m_DedicatedAllocation.m_pMappedData;
default:
VMA_ASSERT(0);
@@ -11950,24 +12063,12 @@ void* VmaAllocation_T::GetMappedData() const
}
}
-void VmaAllocation_T::DedicatedAllocCalcStatsInfo(VmaStatInfo& outInfo)
-{
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_DEDICATED);
- outInfo.blockCount = 1;
- outInfo.allocationCount = 1;
- outInfo.unusedRangeCount = 0;
- outInfo.usedBytes = m_Size;
- outInfo.unusedBytes = 0;
- outInfo.allocationSizeMin = outInfo.allocationSizeMax = m_Size;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMax = 0;
-}
-
void VmaAllocation_T::BlockAllocMap()
{
VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
- if ((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) < 0x7F)
+ if (m_MapCount < 0xFF)
{
++m_MapCount;
}
@@ -11981,7 +12082,7 @@ void VmaAllocation_T::BlockAllocUnmap()
{
VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
- if ((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) != 0)
+ if (m_MapCount > 0)
{
--m_MapCount;
}
@@ -11994,10 +12095,11 @@ void VmaAllocation_T::BlockAllocUnmap()
VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData)
{
VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
- if (m_MapCount != 0)
+ if (m_MapCount != 0 || IsPersistentMap())
{
- if ((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) < 0x7F)
+ if (m_MapCount < 0xFF)
{
VMA_ASSERT(m_DedicatedAllocation.m_pMappedData != VMA_NULL);
*ppData = m_DedicatedAllocation.m_pMappedData;
@@ -12032,10 +12134,10 @@ void VmaAllocation_T::DedicatedAllocUnmap(VmaAllocator hAllocator)
{
VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
- if ((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) != 0)
+ if (m_MapCount > 0)
{
--m_MapCount;
- if (m_MapCount == 0)
+ if (m_MapCount == 0 && !IsPersistentMap())
{
m_DedicatedAllocation.m_pMappedData = VMA_NULL;
(*hAllocator->GetVulkanFunctions().vkUnmapMemory)(
@@ -12121,7 +12223,6 @@ VmaBlockVector::VmaBlockVector(
m_Priority(priority),
m_MinAllocationAlignment(minAllocationAlignment),
m_pMemoryAllocateNext(pMemoryAllocateNext),
- m_HasEmptyBlock(false),
m_Blocks(VmaStlAllocator<VmaDeviceMemoryBlock*>(hAllocator->GetAllocationCallbacks())),
m_NextBlockId(0) {}
@@ -12147,19 +12248,31 @@ VkResult VmaBlockVector::CreateMinBlocks()
return VK_SUCCESS;
}
-void VmaBlockVector::AddPoolStats(VmaPoolStats* pStats)
+void VmaBlockVector::AddStatistics(VmaStatistics& inoutStats)
{
VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
const size_t blockCount = m_Blocks.size();
- pStats->blockCount += blockCount;
+ for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ {
+ const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pBlock);
+ VMA_HEAVY_ASSERT(pBlock->Validate());
+ pBlock->m_pMetadata->AddStatistics(inoutStats);
+ }
+}
+
+void VmaBlockVector::AddDetailedStatistics(VmaDetailedStatistics& inoutStats)
+{
+ VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
+ const size_t blockCount = m_Blocks.size();
for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
{
const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
VMA_ASSERT(pBlock);
VMA_HEAVY_ASSERT(pBlock->Validate());
- pBlock->m_pMetadata->AddPoolStats(*pStats);
+ pBlock->m_pMetadata->AddDetailedStatistics(inoutStats);
}
}
@@ -12217,14 +12330,8 @@ VkResult VmaBlockVector::Allocate(
if (res != VK_SUCCESS)
{
// Free all already created allocations.
- const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
while (allocIndex--)
- {
- VmaAllocation_T* const alloc = pAllocations[allocIndex];
- const VkDeviceSize allocSize = alloc->GetSize();
- Free(alloc);
- m_hAllocator->m_Budget.RemoveAllocation(heapIndex, allocSize);
- }
+ Free(pAllocations[allocIndex]);
memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
}
@@ -12239,8 +12346,6 @@ VkResult VmaBlockVector::AllocatePage(
VmaAllocation* pAllocation)
{
const bool isUpperAddress = (createInfo.flags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0;
- const bool mapped = (createInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
- const bool isUserDataString = (createInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
VkDeviceSize freeMemory;
{
@@ -12280,17 +12385,11 @@ VkResult VmaBlockVector::AllocatePage(
VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks.back();
VMA_ASSERT(pCurrBlock);
VkResult res = AllocateFromBlock(
- pCurrBlock,
- size,
- alignment,
- createInfo.flags,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
if (res == VK_SUCCESS)
{
VMA_DEBUG_LOG(" Returned from last block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
return VK_SUCCESS;
}
}
@@ -12299,24 +12398,55 @@ VkResult VmaBlockVector::AllocatePage(
{
if (strategy != VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT) // MIN_MEMORY or default
{
- // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
- for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ const bool isHostVisible =
+ (m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;
+ if(isHostVisible)
{
- VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pCurrBlock);
- VkResult res = AllocateFromBlock(
- pCurrBlock,
- size,
- alignment,
- createInfo.flags,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
- if (res == VK_SUCCESS)
+ const bool isMappingAllowed = (createInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0;
+ /*
+ For non-mappable allocations, check blocks that are not mapped first.
+ For mappable allocations, check blocks that are already mapped first.
+ This way, having many blocks, we will separate mappable and non-mappable allocations,
+ hopefully limiting the number of blocks that are mapped, which will help tools like RenderDoc.
+ */
+ for(size_t mappingI = 0; mappingI < 2; ++mappingI)
{
- VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
- return VK_SUCCESS;
+ // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
+ for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ {
+ VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pCurrBlock);
+ const bool isBlockMapped = pCurrBlock->GetMappedData() != VMA_NULL;
+ if((mappingI == 0) == (isMappingAllowed == isBlockMapped))
+ {
+ VkResult res = AllocateFromBlock(
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
+ {
+ VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
+ for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ {
+ VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pCurrBlock);
+ VkResult res = AllocateFromBlock(
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
+ {
+ VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
+ }
}
}
}
@@ -12327,18 +12457,11 @@ VkResult VmaBlockVector::AllocatePage(
{
VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
VMA_ASSERT(pCurrBlock);
- VkResult res = AllocateFromBlock(
- pCurrBlock,
- size,
- alignment,
- createInfo.flags,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
+ VkResult res = AllocateFromBlock(pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
if (res == VK_SUCCESS)
{
VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
return VK_SUCCESS;
}
}
@@ -12401,17 +12524,11 @@ VkResult VmaBlockVector::AllocatePage(
VMA_ASSERT(pBlock->m_pMetadata->GetSize() >= size);
res = AllocateFromBlock(
- pBlock,
- size,
- alignment,
- createInfo.flags,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
+ pBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
if (res == VK_SUCCESS)
{
VMA_DEBUG_LOG(" Created new block #%u Size=%llu", pBlock->GetId(), newBlockSize);
+ IncrementallySortBlocks();
return VK_SUCCESS;
}
else
@@ -12426,7 +12543,8 @@ VkResult VmaBlockVector::AllocatePage(
}
void VmaBlockVector::Free(
- const VmaAllocation hAllocation)
+ const VmaAllocation hAllocation,
+ bool incrementalSort)
{
VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;
@@ -12455,7 +12573,9 @@ void VmaBlockVector::Free(
pBlock->Unmap(m_hAllocator, 1);
}
+ const bool hadEmptyBlockBeforeFree = HasEmptyBlock();
pBlock->m_pMetadata->Free(hAllocation->GetAllocHandle());
+ pBlock->PostFree(m_hAllocator);
VMA_HEAVY_ASSERT(pBlock->Validate());
VMA_DEBUG_LOG(" Freed from MemoryTypeIndex=%u", m_MemoryTypeIndex);
@@ -12464,17 +12584,17 @@ void VmaBlockVector::Free(
// pBlock became empty after this deallocation.
if (pBlock->m_pMetadata->IsEmpty())
{
- // Already has empty block. We don't want to have two, so delete this one.
- if ((m_HasEmptyBlock || budgetExceeded) && canDeleteBlock)
+ // Already had empty block. We don't want to have two, so delete this one.
+ if ((hadEmptyBlockBeforeFree || budgetExceeded) && canDeleteBlock)
{
pBlockToDelete = pBlock;
Remove(pBlock);
}
- // else: We now have an empty block - leave it.
+ // else: We now have one empty block - leave it. A hysteresis to avoid allocating whole block back and forth.
}
// pBlock didn't become empty, but we have another empty block - find and free that one.
// (This is optional, heuristics.)
- else if (m_HasEmptyBlock && canDeleteBlock)
+ else if (hadEmptyBlockBeforeFree && canDeleteBlock)
{
VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();
if (pLastBlock->m_pMetadata->IsEmpty())
@@ -12484,8 +12604,8 @@ void VmaBlockVector::Free(
}
}
- UpdateHasEmptyBlock();
- IncrementallySortBlocks();
+ if (incrementalSort)
+ IncrementallySortBlocks();
}
// Destruction of a free block. Deferred until this point, outside of mutex
@@ -12496,6 +12616,9 @@ void VmaBlockVector::Free(
pBlockToDelete->Destroy(m_hAllocator);
vma_delete(m_hAllocator, pBlockToDelete);
}
+
+ m_hAllocator->m_Budget.RemoveAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), hAllocation->GetSize());
+ m_hAllocator->m_AllocationObjectAllocator.Free(hAllocation);
}
VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const
@@ -12541,6 +12664,15 @@ void VmaBlockVector::IncrementallySortBlocks()
}
}
+void VmaBlockVector::SortByFreeSize()
+{
+ VMA_SORT(m_Blocks.begin(), m_Blocks.end(),
+ [](auto* b1, auto* b2)
+ {
+ return b1->m_pMetadata->GetSumFreeSize() < b2->m_pMetadata->GetSumFreeSize();
+ });
+}
+
VkResult VmaBlockVector::AllocateFromBlock(
VmaDeviceMemoryBlock* pBlock,
VkDeviceSize size,
@@ -12552,8 +12684,6 @@ VkResult VmaBlockVector::AllocateFromBlock(
VmaAllocation* pAllocation)
{
const bool isUpperAddress = (allocFlags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0;
- const bool mapped = (allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
- const bool isUserDataString = (allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
VmaAllocationRequest currRequest = {};
if (pBlock->m_pMetadata->CreateAllocationRequest(
@@ -12564,42 +12694,59 @@ VkResult VmaBlockVector::AllocateFromBlock(
strategy,
&currRequest))
{
- // Allocate from pCurrBlock.
- if (mapped)
- {
- VkResult res = pBlock->Map(m_hAllocator, 1, VMA_NULL);
- if (res != VK_SUCCESS)
- {
- return res;
- }
- }
+ return CommitAllocationRequest(currRequest, pBlock, alignment, allocFlags, pUserData, suballocType, pAllocation);
+ }
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+}
- *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(isUserDataString);
- pBlock->m_pMetadata->Alloc(currRequest, suballocType, *pAllocation);
- UpdateHasEmptyBlock();
- (*pAllocation)->InitBlockAllocation(
- pBlock,
- currRequest.allocHandle,
- alignment,
- currRequest.size, // Not size, as actual allocation size may be larger than requested!
- m_MemoryTypeIndex,
- suballocType,
- mapped);
- VMA_HEAVY_ASSERT(pBlock->Validate());
- (*pAllocation)->SetUserData(m_hAllocator, pUserData);
- m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), currRequest.size);
- if (VMA_DEBUG_INITIALIZE_ALLOCATIONS)
- {
- m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);
- }
- if (IsCorruptionDetectionEnabled())
+VkResult VmaBlockVector::CommitAllocationRequest(
+ VmaAllocationRequest& allocRequest,
+ VmaDeviceMemoryBlock* pBlock,
+ VkDeviceSize alignment,
+ VmaAllocationCreateFlags allocFlags,
+ void* pUserData,
+ VmaSuballocationType suballocType,
+ VmaAllocation* pAllocation)
+{
+ const bool mapped = (allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
+ const bool isUserDataString = (allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
+ const bool isMappingAllowed = (allocFlags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0;
+
+ pBlock->PostAlloc();
+ // Allocate from pCurrBlock.
+ if (mapped)
+ {
+ VkResult res = pBlock->Map(m_hAllocator, 1, VMA_NULL);
+ if (res != VK_SUCCESS)
{
- VkResult res = pBlock->WriteMagicValueAfterAllocation(m_hAllocator, (*pAllocation)->GetOffset(), currRequest.size);
- VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
+ return res;
}
- return VK_SUCCESS;
}
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+
+ *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(isUserDataString, isMappingAllowed);
+ pBlock->m_pMetadata->Alloc(allocRequest, suballocType, *pAllocation);
+ (*pAllocation)->InitBlockAllocation(
+ pBlock,
+ allocRequest.allocHandle,
+ alignment,
+ allocRequest.size, // Not size, as actual allocation size may be larger than requested!
+ m_MemoryTypeIndex,
+ suballocType,
+ mapped);
+ VMA_HEAVY_ASSERT(pBlock->Validate());
+ (*pAllocation)->SetUserData(m_hAllocator, pUserData);
+ m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), allocRequest.size);
+ if (VMA_DEBUG_INITIALIZE_ALLOCATIONS)
+ {
+ m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);
+ }
+ if (IsCorruptionDetectionEnabled())
+ {
+ VkResult res = pBlock->WriteMagicValueAfterAllocation(m_hAllocator, (*pAllocation)->GetOffset(), allocRequest.size);
+ VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
+ }
+ return VK_SUCCESS;
}
VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex)
@@ -12668,241 +12815,17 @@ VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIn
return VK_SUCCESS;
}
-void VmaBlockVector::ApplyDefragmentationMovesCpu(
- VmaBlockVectorDefragmentationContext* pDefragCtx,
- const VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves)
+bool VmaBlockVector::HasEmptyBlock()
{
- const size_t blockCount = m_Blocks.size();
- const bool isNonCoherent = m_hAllocator->IsMemoryTypeNonCoherent(m_MemoryTypeIndex);
-
- enum BLOCK_FLAG
- {
- BLOCK_FLAG_USED = 0x00000001,
- BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,
- };
-
- struct BlockInfo
- {
- uint32_t flags;
- void* pMappedData;
- };
- VmaVector< BlockInfo, VmaStlAllocator<BlockInfo> >
- blockInfo(blockCount, BlockInfo(), VmaStlAllocator<BlockInfo>(m_hAllocator->GetAllocationCallbacks()));
- memset(blockInfo.data(), 0, blockCount * sizeof(BlockInfo));
-
- // Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.
- const size_t moveCount = moves.size();
- for (size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
- blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;
- blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;
- }
-
- VMA_ASSERT(pDefragCtx->res == VK_SUCCESS);
-
- // Go over all blocks. Get mapped pointer or map if necessary.
- for (size_t blockIndex = 0; pDefragCtx->res == VK_SUCCESS && blockIndex < blockCount; ++blockIndex)
- {
- BlockInfo& currBlockInfo = blockInfo[blockIndex];
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if ((currBlockInfo.flags & BLOCK_FLAG_USED) != 0)
- {
- currBlockInfo.pMappedData = pBlock->GetMappedData();
- // It is not originally mapped - map it.
- if (currBlockInfo.pMappedData == VMA_NULL)
- {
- pDefragCtx->res = pBlock->Map(m_hAllocator, 1, &currBlockInfo.pMappedData);
- if (pDefragCtx->res == VK_SUCCESS)
- {
- currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;
- }
- }
- }
- }
-
- // Go over all moves. Do actual data transfer.
- if (pDefragCtx->res == VK_SUCCESS)
- {
- const VkDeviceSize nonCoherentAtomSize = m_hAllocator->m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
- VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
-
- for (size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- const BlockInfo& srcBlockInfo = blockInfo[move.srcBlockIndex];
- const BlockInfo& dstBlockInfo = blockInfo[move.dstBlockIndex];
-
- VMA_ASSERT(srcBlockInfo.pMappedData && dstBlockInfo.pMappedData);
-
- // Invalidate source.
- if (isNonCoherent)
- {
- VmaDeviceMemoryBlock* const pSrcBlock = m_Blocks[move.srcBlockIndex];
- memRange.memory = pSrcBlock->GetDeviceMemory();
- memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);
- memRange.size = VMA_MIN(
- VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),
- pSrcBlock->m_pMetadata->GetSize() - memRange.offset);
- (*m_hAllocator->GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator->m_hDevice, 1, &memRange);
- }
-
- // THE PLACE WHERE ACTUAL DATA COPY HAPPENS.
- memmove(
- reinterpret_cast<char*>(dstBlockInfo.pMappedData) + move.dstOffset,
- reinterpret_cast<char*>(srcBlockInfo.pMappedData) + move.srcOffset,
- static_cast<size_t>(move.size));
-
- if (IsCorruptionDetectionEnabled())
- {
- VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);
- }
-
- // Flush destination.
- if (isNonCoherent)
- {
- VmaDeviceMemoryBlock* const pDstBlock = m_Blocks[move.dstBlockIndex];
- memRange.memory = pDstBlock->GetDeviceMemory();
- memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);
- memRange.size = VMA_MIN(
- VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),
- pDstBlock->m_pMetadata->GetSize() - memRange.offset);
- (*m_hAllocator->GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator->m_hDevice, 1, &memRange);
- }
- }
- }
-
- // Go over all blocks in reverse order. Unmap those that were mapped just for defragmentation.
- // Regardless of pCtx->res == VK_SUCCESS.
- for (size_t blockIndex = blockCount; blockIndex--; )
- {
- const BlockInfo& currBlockInfo = blockInfo[blockIndex];
- if ((currBlockInfo.flags & BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)
- {
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- pBlock->Unmap(m_hAllocator, 1);
- }
- }
-}
-
-void VmaBlockVector::ApplyDefragmentationMovesGpu(
- VmaBlockVectorDefragmentationContext* pDefragCtx,
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkCommandBuffer commandBuffer)
-{
- const size_t blockCount = m_Blocks.size();
-
- pDefragCtx->blockContexts.resize(blockCount);
- memset(pDefragCtx->blockContexts.data(), 0, blockCount * sizeof(VmaBlockDefragmentationContext));
-
- // Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.
- const size_t moveCount = moves.size();
- for (size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- //if(move.type == VMA_ALLOCATION_TYPE_UNKNOWN)
- {
- // Old school move still require us to map the whole block
- pDefragCtx->blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;
- pDefragCtx->blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;
- }
- }
-
- VMA_ASSERT(pDefragCtx->res == VK_SUCCESS);
-
- // Go over all blocks. Create and bind buffer for whole block if necessary.
- {
- VkBufferCreateInfo bufCreateInfo;
- VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);
-
- for (size_t blockIndex = 0; pDefragCtx->res == VK_SUCCESS && blockIndex < blockCount; ++blockIndex)
- {
- VmaBlockDefragmentationContext& currBlockCtx = pDefragCtx->blockContexts[blockIndex];
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if ((currBlockCtx.flags & VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)
- {
- bufCreateInfo.size = pBlock->m_pMetadata->GetSize();
- pDefragCtx->res = (*m_hAllocator->GetVulkanFunctions().vkCreateBuffer)(
- m_hAllocator->m_hDevice, &bufCreateInfo, m_hAllocator->GetAllocationCallbacks(), &currBlockCtx.hBuffer);
- if (pDefragCtx->res == VK_SUCCESS)
- {
- pDefragCtx->res = (*m_hAllocator->GetVulkanFunctions().vkBindBufferMemory)(
- m_hAllocator->m_hDevice, currBlockCtx.hBuffer, pBlock->GetDeviceMemory(), 0);
- }
- }
- }
- }
-
- // Go over all moves. Post data transfer commands to command buffer.
- if (pDefragCtx->res == VK_SUCCESS)
- {
- for (size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- const VmaBlockDefragmentationContext& srcBlockCtx = pDefragCtx->blockContexts[move.srcBlockIndex];
- const VmaBlockDefragmentationContext& dstBlockCtx = pDefragCtx->blockContexts[move.dstBlockIndex];
-
- VMA_ASSERT(srcBlockCtx.hBuffer && dstBlockCtx.hBuffer);
-
- VkBufferCopy region = {
- move.srcOffset,
- move.dstOffset,
- move.size };
- (*m_hAllocator->GetVulkanFunctions().vkCmdCopyBuffer)(
- commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &region);
- }
- }
-
- // Save buffers to defrag context for later destruction.
- if (pDefragCtx->res == VK_SUCCESS && moveCount > 0)
- {
- pDefragCtx->res = VK_NOT_READY;
- }
-}
-
-void VmaBlockVector::FreeEmptyBlocks(VmaDefragmentationStats* pDefragmentationStats)
-{
- for (size_t blockIndex = m_Blocks.size(); blockIndex--; )
- {
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if (pBlock->m_pMetadata->IsEmpty())
- {
- if (m_Blocks.size() > m_MinBlockCount)
- {
- if (pDefragmentationStats != VMA_NULL)
- {
- ++pDefragmentationStats->deviceMemoryBlocksFreed;
- pDefragmentationStats->bytesFreed += pBlock->m_pMetadata->GetSize();
- }
-
- VmaVectorRemove(m_Blocks, blockIndex);
- pBlock->Destroy(m_hAllocator);
- vma_delete(m_hAllocator, pBlock);
- }
- else
- {
- break;
- }
- }
- }
- UpdateHasEmptyBlock();
-}
-
-void VmaBlockVector::UpdateHasEmptyBlock()
-{
- m_HasEmptyBlock = false;
for (size_t index = 0, count = m_Blocks.size(); index < count; ++index)
{
VmaDeviceMemoryBlock* const pBlock = m_Blocks[index];
if (pBlock->m_pMetadata->IsEmpty())
{
- m_HasEmptyBlock = true;
- break;
+ return true;
}
}
+ return false;
}
#if VMA_STATS_STRING_ENABLED
@@ -12961,234 +12884,12 @@ void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json)
json.ContinueString(m_Blocks[i]->GetId());
json.EndString();
- m_Blocks[i]->m_pMetadata->PrintDetailedMap(json);
+ m_Blocks[i]->m_pMetadata->PrintDetailedMap(json, m_Blocks[i]->GetMapRefCount());
}
json.EndObject();
}
#endif // VMA_STATS_STRING_ENABLED
-void VmaBlockVector::Defragment(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags,
- VkDeviceSize& maxCpuBytesToMove, uint32_t& maxCpuAllocationsToMove,
- VkDeviceSize& maxGpuBytesToMove, uint32_t& maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer)
-{
- pCtx->res = VK_SUCCESS;
-
- const VkMemoryPropertyFlags memPropFlags =
- m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;
- const bool isHostVisible = (memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;
-
- const bool canDefragmentOnCpu = maxCpuBytesToMove > 0 && maxCpuAllocationsToMove > 0 &&
- isHostVisible;
- const bool canDefragmentOnGpu = maxGpuBytesToMove > 0 && maxGpuAllocationsToMove > 0 &&
- !IsCorruptionDetectionEnabled() &&
- ((1u << m_MemoryTypeIndex) & m_hAllocator->GetGpuDefragmentationMemoryTypeBits()) != 0;
-
- // There are options to defragment this memory type.
- if (canDefragmentOnCpu || canDefragmentOnGpu)
- {
- bool defragmentOnGpu;
- // There is only one option to defragment this memory type.
- if (canDefragmentOnGpu != canDefragmentOnCpu)
- {
- defragmentOnGpu = canDefragmentOnGpu;
- }
- // Both options are available: Heuristics to choose the best one.
- else
- {
- defragmentOnGpu = (memPropFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||
- m_hAllocator->IsIntegratedGpu();
- }
-
- bool overlappingMoveSupported = !defragmentOnGpu;
-
- if (m_hAllocator->m_UseMutex)
- {
- if (flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- if (!m_Mutex.TryLockWrite())
- {
- pCtx->res = VK_ERROR_INITIALIZATION_FAILED;
- return;
- }
- }
- else
- {
- m_Mutex.LockWrite();
- pCtx->mutexLocked = true;
- }
- }
-
- pCtx->Begin(overlappingMoveSupported, flags);
-
- // Defragment.
-
- const VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;
- const uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;
- VmaDefragmentationAlgorithm* algo = pCtx->GetAlgorithm();
- pCtx->res = algo->Defragment(pCtx->defragmentationMoves, maxBytesToMove, maxAllocationsToMove, flags);
-
- // Accumulate statistics.
- if (pStats != VMA_NULL)
- {
- const VkDeviceSize bytesMoved = algo->GetBytesMoved();
- const uint32_t allocationsMoved = algo->GetAllocationsMoved();
- pStats->bytesMoved += bytesMoved;
- pStats->allocationsMoved += allocationsMoved;
- VMA_ASSERT(bytesMoved <= maxBytesToMove);
- VMA_ASSERT(allocationsMoved <= maxAllocationsToMove);
- if (defragmentOnGpu)
- {
- maxGpuBytesToMove -= bytesMoved;
- maxGpuAllocationsToMove -= allocationsMoved;
- }
- else
- {
- maxCpuBytesToMove -= bytesMoved;
- maxCpuAllocationsToMove -= allocationsMoved;
- }
- }
-
- if (flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- if (m_hAllocator->m_UseMutex)
- m_Mutex.UnlockWrite();
-
- if (pCtx->res >= VK_SUCCESS && !pCtx->defragmentationMoves.empty())
- pCtx->res = VK_NOT_READY;
-
- return;
- }
-
- if (pCtx->res >= VK_SUCCESS)
- {
- if (defragmentOnGpu)
- {
- ApplyDefragmentationMovesGpu(pCtx, pCtx->defragmentationMoves, commandBuffer);
- }
- else
- {
- ApplyDefragmentationMovesCpu(pCtx, pCtx->defragmentationMoves);
- }
- }
- }
-}
-
-void VmaBlockVector::DefragmentationEnd(
- class VmaBlockVectorDefragmentationContext* pCtx,
- uint32_t flags,
- VmaDefragmentationStats* pStats)
-{
- if (flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL && m_hAllocator->m_UseMutex)
- {
- VMA_ASSERT(pCtx->mutexLocked == false);
-
- // Incremental defragmentation doesn't hold the lock, so when we enter here we don't actually have any
- // lock protecting us. Since we mutate state here, we have to take the lock out now
- m_Mutex.LockWrite();
- pCtx->mutexLocked = true;
- }
-
- // If the mutex isn't locked we didn't do any work and there is nothing to delete.
- if (pCtx->mutexLocked || !m_hAllocator->m_UseMutex)
- {
- // Destroy buffers.
- for (size_t blockIndex = pCtx->blockContexts.size(); blockIndex--;)
- {
- VmaBlockDefragmentationContext& blockCtx = pCtx->blockContexts[blockIndex];
- if (blockCtx.hBuffer)
- {
- (*m_hAllocator->GetVulkanFunctions().vkDestroyBuffer)(m_hAllocator->m_hDevice, blockCtx.hBuffer, m_hAllocator->GetAllocationCallbacks());
- }
- }
-
- if (pCtx->res >= VK_SUCCESS)
- {
- FreeEmptyBlocks(pStats);
- }
- }
-
- if (pCtx->mutexLocked)
- {
- VMA_ASSERT(m_hAllocator->m_UseMutex);
- m_Mutex.UnlockWrite();
- }
-}
-
-uint32_t VmaBlockVector::ProcessDefragmentations(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationPassMoveInfo* pMove, uint32_t maxMoves)
-{
- VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
-
- const uint32_t moveCount = VMA_MIN(uint32_t(pCtx->defragmentationMoves.size()) - pCtx->defragmentationMovesProcessed, maxMoves);
-
- for (uint32_t i = 0; i < moveCount; ++i)
- {
- VmaDefragmentationMove& move = pCtx->defragmentationMoves[pCtx->defragmentationMovesProcessed + i];
-
- pMove->allocation = move.hAllocation;
- pMove->memory = move.pDstBlock->GetDeviceMemory();
- pMove->offset = move.dstOffset;
-
- ++pMove;
- }
-
- pCtx->defragmentationMovesProcessed += moveCount;
-
- return moveCount;
-}
-
-void VmaBlockVector::CommitDefragmentations(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats)
-{
- VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
-
- for (uint32_t i = pCtx->defragmentationMovesCommitted; i < pCtx->defragmentationMovesProcessed; ++i)
- {
- const VmaDefragmentationMove& move = pCtx->defragmentationMoves[i];
-
- move.pSrcBlock->m_pMetadata->Free(move.hAllocation->GetAllocHandle());
- move.hAllocation->ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstHandle);
- }
-
- pCtx->defragmentationMovesCommitted = pCtx->defragmentationMovesProcessed;
- FreeEmptyBlocks(pStats);
-}
-
-size_t VmaBlockVector::CalcAllocationCount() const
-{
- size_t result = 0;
- for (size_t i = 0; i < m_Blocks.size(); ++i)
- {
- result += m_Blocks[i]->m_pMetadata->GetAllocationCount();
- }
- return result;
-}
-
-bool VmaBlockVector::IsBufferImageGranularityConflictPossible() const
-{
- if (m_BufferImageGranularity == 1)
- {
- return false;
- }
- VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;
- for (size_t i = 0, count = m_Blocks.size(); i < count; ++i)
- {
- VmaDeviceMemoryBlock* const pBlock = m_Blocks[i];
- VMA_ASSERT(m_Algorithm == 0);
- VmaBlockMetadata_Generic* const pMetadata = (VmaBlockMetadata_Generic*)pBlock->m_pMetadata;
- if (pMetadata->IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))
- {
- return true;
- }
- }
- return false;
-}
-
VkResult VmaBlockVector::CheckCorruption()
{
if (!IsCorruptionDetectionEnabled())
@@ -13210,1332 +12911,827 @@ VkResult VmaBlockVector::CheckCorruption()
return VK_SUCCESS;
}
-void VmaBlockVector::AddStats(VmaStats* pStats)
-{
- const uint32_t memTypeIndex = m_MemoryTypeIndex;
- const uint32_t memHeapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(memTypeIndex);
-
- VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
-
- for (uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
- {
- const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pBlock);
- VMA_HEAVY_ASSERT(pBlock->Validate());
- VmaStatInfo allocationStatInfo;
- pBlock->m_pMetadata->CalcAllocationStatInfo(allocationStatInfo);
- VmaAddStatInfo(pStats->total, allocationStatInfo);
- VmaAddStatInfo(pStats->memoryType[memTypeIndex], allocationStatInfo);
- VmaAddStatInfo(pStats->memoryHeap[memHeapIndex], allocationStatInfo);
- }
-}
#endif // _VMA_BLOCK_VECTOR_FUNCTIONS
-#ifndef _VMA_DEFRAGMENTATION_ALGORITHM_GENERIC_FUNCTIONS
-VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(
+#ifndef _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS
+VmaDefragmentationContext_T::VmaDefragmentationContext_T(
VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- bool overlappingMoveSupported)
- : VmaDefragmentationAlgorithm(hAllocator, pBlockVector),
- m_AllocationCount(0),
- m_AllAllocations(false),
- m_BytesMoved(0),
- m_AllocationsMoved(0),
- m_Blocks(VmaStlAllocator<BlockInfo*>(hAllocator->GetAllocationCallbacks()))
-{
- // Create block info for each block.
- const size_t blockCount = m_pBlockVector->m_Blocks.size();
- for (size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
- {
- BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator->GetAllocationCallbacks());
- pBlockInfo->m_OriginalBlockIndex = blockIndex;
- pBlockInfo->m_pBlock = m_pBlockVector->m_Blocks[blockIndex];
- m_Blocks.push_back(pBlockInfo);
- }
-
- // Sort them by m_pBlock pointer value.
- VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());
-}
-
-VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()
+ const VmaDefragmentationInfo& info)
+ : m_MaxPassBytes(info.maxBytesPerPass == 0 ? VK_WHOLE_SIZE : info.maxBytesPerPass),
+ m_MaxPassAllocations(info.maxAllocationsPerPass == 0 ? UINT32_MAX : info.maxAllocationsPerPass),
+ m_MoveAllocator(hAllocator->GetAllocationCallbacks()),
+ m_Moves(m_MoveAllocator)
{
- for (size_t i = m_Blocks.size(); i--; )
- {
- vma_delete(m_hAllocator, m_Blocks[i]);
- }
-}
+ m_Algorithm = info.flags & VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK;
-void VmaDefragmentationAlgorithm_Generic::AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged)
-{
- VmaDeviceMemoryBlock* pBlock = hAlloc->GetBlock();
- BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());
- if (it != m_Blocks.end() && (*it)->m_pBlock == pBlock)
+ if (info.pool != VMA_NULL)
{
- AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);
- (*it)->m_Allocations.push_back(allocInfo);
+ m_BlockVectorCount = 1;
+ m_PoolBlockVector = &info.pool->m_BlockVector;
+ m_pBlockVectors = &m_PoolBlockVector;
+ m_PoolBlockVector->SortByFreeSize();
}
else
{
- VMA_ASSERT(0);
- }
-
- ++m_AllocationCount;
-}
-
-VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- bool freeOldAllocations)
-{
- if (m_Blocks.empty())
- {
- return VK_SUCCESS;
- }
-
- // This is a choice based on research.
- // Option 1:
- uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT;
- // Option 2:
- //uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;
-
- size_t srcBlockMinIndex = 0;
- // When FAST_ALGORITHM, move allocations from only last out of blocks that contain non-movable allocations.
- /*
- if(m_AlgorithmFlags & VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)
- {
- const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();
- if(blocksWithNonMovableCount > 0)
+ m_BlockVectorCount = hAllocator->GetMemoryTypeCount();
+ m_PoolBlockVector = VMA_NULL;
+ m_pBlockVectors = hAllocator->m_pBlockVectors;
+ for (uint32_t i = 0; i < m_BlockVectorCount; ++i)
{
- srcBlockMinIndex = blocksWithNonMovableCount - 1;
+ VmaBlockVector* vector = m_pBlockVectors[i];
+ if (vector != VMA_NULL)
+ vector->SortByFreeSize();
}
}
- */
-
- size_t srcBlockIndex = m_Blocks.size() - 1;
- size_t srcAllocIndex = SIZE_MAX;
- for (;;)
+
+ switch (m_Algorithm)
{
- // 1. Find next allocation to move.
- // 1.1. Start from last to first m_Blocks - they are sorted from most "destination" to most "source".
- // 1.2. Then start from last to first m_Allocations.
- while (srcAllocIndex >= m_Blocks[srcBlockIndex]->m_Allocations.size())
- {
- if (m_Blocks[srcBlockIndex]->m_Allocations.empty())
- {
- // Finished: no more allocations to process.
- if (srcBlockIndex == srcBlockMinIndex)
- {
- return VK_SUCCESS;
- }
- else
- {
- --srcBlockIndex;
- srcAllocIndex = SIZE_MAX;
- }
- }
- else
- {
- srcAllocIndex = m_Blocks[srcBlockIndex]->m_Allocations.size() - 1;
- }
- }
-
- BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];
- AllocationInfo& allocInfo = pSrcBlockInfo->m_Allocations[srcAllocIndex];
-
- const VkDeviceSize size = allocInfo.m_hAllocation->GetSize();
- const VkDeviceSize srcOffset = allocInfo.m_hAllocation->GetOffset();
- const VkDeviceSize alignment = allocInfo.m_hAllocation->GetAlignment();
- const VmaSuballocationType suballocType = allocInfo.m_hAllocation->GetSuballocationType();
-
- // 2. Try to find new place for this allocation in preceding or current block.
- for (size_t dstBlockIndex = 0; dstBlockIndex <= srcBlockIndex; ++dstBlockIndex)
- {
- BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];
- VmaBlockMetadata* pMetadata = pDstBlockInfo->m_pBlock->m_pMetadata;
- VmaAllocationRequest dstAllocRequest;
- if (pMetadata->CreateAllocationRequest(
- size,
- alignment,
- false, // upperAddress
- suballocType,
- strategy,
- &dstAllocRequest) &&
- MoveMakesSense(
- dstBlockIndex, pMetadata->GetAllocationOffset(dstAllocRequest.allocHandle), srcBlockIndex, srcOffset))
- {
- // Reached limit on number of allocations or bytes to move.
- if ((m_AllocationsMoved + 1 > maxAllocationsToMove) ||
- (m_BytesMoved + size > maxBytesToMove))
- {
- return VK_SUCCESS;
- }
-
- VmaDefragmentationMove move = {};
- move.srcBlockIndex = pSrcBlockInfo->m_OriginalBlockIndex;
- move.dstBlockIndex = pDstBlockInfo->m_OriginalBlockIndex;
- move.srcOffset = srcOffset;
- move.dstOffset = pMetadata->GetAllocationOffset(dstAllocRequest.allocHandle);
- move.size = size;
- move.hAllocation = allocInfo.m_hAllocation;
- move.pSrcBlock = pSrcBlockInfo->m_pBlock;
- move.pDstBlock = pDstBlockInfo->m_pBlock;
- move.dstHandle = dstAllocRequest.allocHandle;
-
- moves.push_back(move);
-
- pDstBlockInfo->m_pBlock->m_pMetadata->Alloc(dstAllocRequest, suballocType, allocInfo.m_hAllocation);
-
- if (freeOldAllocations)
- {
- pSrcBlockInfo->m_pBlock->m_pMetadata->Free(allocInfo.m_hAllocation->GetAllocHandle());
- allocInfo.m_hAllocation->ChangeBlockAllocation(m_hAllocator, pDstBlockInfo->m_pBlock, dstAllocRequest.allocHandle);
- }
-
- if (allocInfo.m_pChanged != VMA_NULL)
- {
- *allocInfo.m_pChanged = VK_TRUE;
- }
-
- ++m_AllocationsMoved;
- m_BytesMoved += size;
-
- VmaVectorRemove(pSrcBlockInfo->m_Allocations, srcAllocIndex);
-
- break;
- }
- }
-
- // If not processed, this allocInfo remains in pBlockInfo->m_Allocations for next round.
-
- if (srcAllocIndex > 0)
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ {
+ if (hAllocator->GetBufferImageGranularity() > 1)
{
- --srcAllocIndex;
+ m_AlgorithmState = vma_new_array(hAllocator, StateExtensive, m_BlockVectorCount);
}
- else
- {
- if (srcBlockIndex > 0)
- {
- --srcBlockIndex;
- srcAllocIndex = SIZE_MAX;
- }
- else
- {
- return VK_SUCCESS;
- }
- }
- }
-}
-
-bool VmaDefragmentationAlgorithm_Generic::AllocationInfoSizeGreater::operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const
-{
- return lhs.m_hAllocation->GetSize() > rhs.m_hAllocation->GetSize();
-}
-
-bool VmaDefragmentationAlgorithm_Generic::AllocationInfoOffsetGreater::operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const
-{
- return lhs.m_hAllocation->GetOffset() > rhs.m_hAllocation->GetOffset();
-}
-
-VmaDefragmentationAlgorithm_Generic::BlockInfo::BlockInfo(const VkAllocationCallbacks* pAllocationCallbacks)
- : m_OriginalBlockIndex(SIZE_MAX),
- m_pBlock(VMA_NULL),
- m_HasNonMovableAllocations(true),
- m_Allocations(pAllocationCallbacks) {}
-
-void VmaDefragmentationAlgorithm_Generic::BlockInfo::CalcHasNonMovableAllocations()
-{
- const size_t blockAllocCount = m_pBlock->m_pMetadata->GetAllocationCount();
- const size_t defragmentAllocCount = m_Allocations.size();
- m_HasNonMovableAllocations = blockAllocCount != defragmentAllocCount;
-}
-
-void VmaDefragmentationAlgorithm_Generic::BlockInfo::SortAllocationsBySizeDescending()
-{
- VMA_SORT(m_Allocations.begin(), m_Allocations.end(), AllocationInfoSizeGreater());
-}
-
-void VmaDefragmentationAlgorithm_Generic::BlockInfo::SortAllocationsByOffsetDescending()
-{
- VMA_SORT(m_Allocations.begin(), m_Allocations.end(), AllocationInfoOffsetGreater());
-}
-
-bool VmaDefragmentationAlgorithm_Generic::BlockPointerLess::operator()(const BlockInfo* pLhsBlockInfo, const VmaDeviceMemoryBlock* pRhsBlock) const
-{
- return pLhsBlockInfo->m_pBlock < pRhsBlock;
-}
-bool VmaDefragmentationAlgorithm_Generic::BlockPointerLess::operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const
-{
- return pLhsBlockInfo->m_pBlock < pRhsBlockInfo->m_pBlock;
-}
-
-bool VmaDefragmentationAlgorithm_Generic::BlockInfoCompareMoveDestination::operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const
-{
- if (pLhsBlockInfo->m_HasNonMovableAllocations && !pRhsBlockInfo->m_HasNonMovableAllocations)
- {
- return true;
- }
- if (!pLhsBlockInfo->m_HasNonMovableAllocations && pRhsBlockInfo->m_HasNonMovableAllocations)
- {
- return false;
- }
- if (pLhsBlockInfo->m_pBlock->m_pMetadata->GetSumFreeSize() < pRhsBlockInfo->m_pBlock->m_pMetadata->GetSumFreeSize())
- {
- return true;
- }
- return false;
-}
-
-bool VmaDefragmentationAlgorithm_Generic::MoveMakesSense(
- size_t dstBlockIndex, VkDeviceSize dstOffset,
- size_t srcBlockIndex, VkDeviceSize srcOffset)
-{
- if (dstBlockIndex < srcBlockIndex)
- {
- return true;
- }
- if (dstBlockIndex > srcBlockIndex)
- {
- return false;
+ break;
}
- if (dstOffset < srcOffset)
- {
- return true;
}
- return false;
}
-size_t VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount() const
+VmaDefragmentationContext_T::~VmaDefragmentationContext_T()
{
- size_t result = 0;
- for (size_t i = 0; i < m_Blocks.size(); ++i)
+ if (m_AlgorithmState)
{
- if (m_Blocks[i]->m_HasNonMovableAllocations)
+ switch (m_Algorithm)
{
- ++result;
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ vma_delete_array(m_MoveAllocator.m_pCallbacks, reinterpret_cast<StateExtensive*>(m_AlgorithmState), m_BlockVectorCount);
+ break;
+ default:
+ VMA_ASSERT(0);
}
}
- return result;
}
-VkResult VmaDefragmentationAlgorithm_Generic::Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags)
+VkResult VmaDefragmentationContext_T::DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo)
{
- if (!m_AllAllocations && m_AllocationCount == 0)
+ if (m_PoolBlockVector != VMA_NULL)
{
- return VK_SUCCESS;
+ if (m_PoolBlockVector->GetBlockCount() > 1)
+ ComputeDefragmentation(*m_PoolBlockVector, 0);
+ else if (m_PoolBlockVector->GetBlockCount() == 1)
+ ReallocWithinBlock(*m_PoolBlockVector, m_PoolBlockVector->GetBlock(0));
}
-
- const size_t blockCount = m_Blocks.size();
- for (size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ else
{
- BlockInfo* pBlockInfo = m_Blocks[blockIndex];
-
- if (m_AllAllocations)
+ for (uint32_t i = 0; i < m_BlockVectorCount; ++i)
{
- VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo->m_pBlock->m_pMetadata;
- VMA_ASSERT(!pMetadata->IsVirtual());
- for (VmaSuballocationList::const_iterator it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end();
- ++it)
+ if (m_pBlockVectors[i] != VMA_NULL)
{
- if (it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ if (m_pBlockVectors[i]->GetBlockCount() > 1)
{
- AllocationInfo allocInfo = AllocationInfo((VmaAllocation)it->userData, VMA_NULL);
- pBlockInfo->m_Allocations.push_back(allocInfo);
+ if (ComputeDefragmentation(*m_pBlockVectors[i], i))
+ break;
+ }
+ else if (m_pBlockVectors[i]->GetBlockCount() == 1)
+ {
+ if (ReallocWithinBlock(*m_pBlockVectors[i], m_pBlockVectors[i]->GetBlock(0)))
+ break;
}
}
}
-
- pBlockInfo->CalcHasNonMovableAllocations();
-
- // This is a choice based on research.
- // Option 1:
- pBlockInfo->SortAllocationsByOffsetDescending();
- // Option 2:
- //pBlockInfo->SortAllocationsBySizeDescending();
}
- // Sort m_Blocks this time by the main criterium, from most "destination" to most "source" blocks.
- VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());
-
- // This is a choice based on research.
- const uint32_t roundCount = 2;
-
- // Execute defragmentation rounds (the main part).
- VkResult result = VK_SUCCESS;
- for (uint32_t round = 0; (round < roundCount) && (result == VK_SUCCESS); ++round)
+ moveInfo.moveCount = static_cast<uint32_t>(m_Moves.size());
+ if (moveInfo.moveCount > 0)
{
- result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove, !(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL));
+ moveInfo.pMoves = m_Moves.data();
+ return VK_INCOMPLETE;
}
- return result;
-}
-#endif // _VMA_DEFRAGMENTATION_ALGORITHM_GENERIC_FUNCTIONS
-
-#ifndef _VMA_DEFRAGMENTATION_ALGORITHM_FAST_FUNCTIONS
-VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- bool overlappingMoveSupported)
- : VmaDefragmentationAlgorithm(hAllocator, pBlockVector),
- m_OverlappingMoveSupported(overlappingMoveSupported),
- m_AllocationCount(0),
- m_AllAllocations(false),
- m_BytesMoved(0),
- m_AllocationsMoved(0),
- m_BlockInfos(VmaStlAllocator<BlockInfo>(hAllocator->GetAllocationCallbacks()))
-{
- VMA_ASSERT(VMA_DEBUG_MARGIN == 0);
+ moveInfo.pMoves = VMA_NULL;
+ return VK_SUCCESS;
}
-VkResult VmaDefragmentationAlgorithm_Fast::Defragment(
- VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags)
+VkResult VmaDefragmentationContext_T::DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo)
{
- VMA_ASSERT(m_AllAllocations || m_pBlockVector->CalcAllocationCount() == m_AllocationCount);
-
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- if (blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)
- {
- return VK_SUCCESS;
- }
-
- PreprocessMetadata();
-
- // Sort blocks in order from most destination.
+ VMA_ASSERT(moveInfo.moveCount > 0 ? moveInfo.pMoves != VMA_NULL : true);
- m_BlockInfos.resize(blockCount);
- for (size_t i = 0; i < blockCount; ++i)
+ VkResult result = VK_SUCCESS;
+ VmaVector<ImmovableBlock, VmaStlAllocator<ImmovableBlock>> immovableBlocks(VmaStlAllocator<ImmovableBlock>(m_MoveAllocator.m_pCallbacks));
+ for (uint32_t i = 0; i < moveInfo.moveCount; ++i)
{
- m_BlockInfos[i].origBlockIndex = i;
- }
-
- VMA_SORT(m_BlockInfos.begin(), m_BlockInfos.end(), [this](const BlockInfo& lhs, const BlockInfo& rhs) -> bool {
- return m_pBlockVector->GetBlock(lhs.origBlockIndex)->m_pMetadata->GetSumFreeSize() <
- m_pBlockVector->GetBlock(rhs.origBlockIndex)->m_pMetadata->GetSumFreeSize();
- });
+ VmaDefragmentationMove& move = moveInfo.pMoves[i];
+ size_t prevCount = 0, currentCount = 0;
+ VkDeviceSize freedBlockSize = 0;
- // THE MAIN ALGORITHM
-
- FreeSpaceDatabase freeSpaceDb;
+ uint32_t vectorIndex;
+ VmaBlockVector* vector;
+ if (m_PoolBlockVector != VMA_NULL)
+ {
+ vectorIndex = 0;
+ vector = m_PoolBlockVector;
+ }
+ else
+ {
+ vectorIndex = move.srcAllocation->GetMemoryTypeIndex();
+ vector = m_pBlockVectors[vectorIndex];
+ VMA_ASSERT(vector != VMA_NULL);
+ }
- size_t dstBlockInfoIndex = 0;
- size_t dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector->GetBlock(dstOrigBlockIndex);
- VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock->m_pMetadata;
- VkDeviceSize dstBlockSize = pDstMetadata->GetSize();
- VkDeviceSize dstOffset = 0;
+ VmaAllocation dst = reinterpret_cast<VmaAllocation>(move.internalData);
+ switch (move.operation)
+ {
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY:
+ {
+ move.srcAllocation->SwapBlockAllocation(dst);
+ prevCount = vector->GetBlockCount();
+ freedBlockSize = dst->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(dst, false);
+ currentCount = vector->GetBlockCount();
- bool end = false;
- for (size_t srcBlockInfoIndex = 0; !end && srcBlockInfoIndex < blockCount; ++srcBlockInfoIndex)
- {
- const size_t srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* const pSrcBlock = m_pBlockVector->GetBlock(srcOrigBlockIndex);
- VmaBlockMetadata_Generic* const pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock->m_pMetadata;
- for (VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata->m_Suballocations.begin();
- !end && srcSuballocIt != pSrcMetadata->m_Suballocations.end(); )
+ result = VK_INCOMPLETE;
+ break;
+ }
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE:
{
- VmaAllocation const pAlloc = (VmaAllocation)srcSuballocIt->userData;
- const VkDeviceSize srcAllocAlignment = pAlloc->GetAlignment();
- const VkDeviceSize srcAllocSize = srcSuballocIt->size;
- if (m_AllocationsMoved == maxAllocationsToMove ||
- m_BytesMoved + srcAllocSize > maxBytesToMove)
- {
- end = true;
- break;
- }
- const VkDeviceSize srcAllocOffset = srcSuballocIt->offset;
-
- VmaDefragmentationMove move = {};
- // Try to place it in one of free spaces from the database.
- size_t freeSpaceInfoIndex;
- VkDeviceSize dstAllocOffset;
- if (freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,
- freeSpaceInfoIndex, dstAllocOffset))
- {
- size_t freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector->GetBlock(freeSpaceOrigBlockIndex);
- VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock->m_pMetadata;
+ m_Stats.bytesMoved -= move.srcAllocation->GetSize();
+ vector->Free(dst, false);
- // Same block
- if (freeSpaceInfoIndex == srcBlockInfoIndex)
+ VmaDeviceMemoryBlock* newBlock = move.srcAllocation->GetBlock();
+ bool notPresent = true;
+ for (const ImmovableBlock& block : immovableBlocks)
+ {
+ if (block.block == newBlock)
{
- VMA_ASSERT(dstAllocOffset <= srcAllocOffset);
-
- // MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeAllocHandle((VmaAllocHandle)(dstAllocOffset + 1));
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
-
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
-
- InsertSuballoc(pFreeSpaceMetadata, suballoc);
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = freeSpaceOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.dstHandle = (VmaAllocHandle)(dstAllocOffset + 1);
- move.size = srcAllocSize;
-
- moves.push_back(move);
+ notPresent = false;
+ break;
}
- // Different block
- else
- {
- // MOVE OPTION 2: Move the allocation to a different block.
-
- VMA_ASSERT(freeSpaceInfoIndex < srcBlockInfoIndex);
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, (VmaAllocHandle)(dstAllocOffset + 1));
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
+ }
+ if (notPresent)
+ immovableBlocks.push_back({ vectorIndex, newBlock });
+ break;
+ }
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY:
+ {
+ prevCount = vector->GetBlockCount();
+ freedBlockSize = move.srcAllocation->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(move.srcAllocation, false);
+ currentCount = vector->GetBlockCount();
+ freedBlockSize *= prevCount - currentCount;
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
+ VkDeviceSize dstBlockSize = dst->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(dst, false);
+ freedBlockSize += dstBlockSize * (currentCount - vector->GetBlockCount());
+ currentCount = vector->GetBlockCount();
- InsertSuballoc(pFreeSpaceMetadata, suballoc);
+ result = VK_INCOMPLETE;
+ break;
+ }
+ default:
+ VMA_ASSERT(0);
+ }
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = freeSpaceOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.dstHandle = (VmaAllocHandle)(dstAllocOffset + 1);
- move.size = srcAllocSize;
+ if (prevCount > currentCount)
+ {
+ size_t freedBlocks = prevCount - currentCount;
+ m_Stats.deviceMemoryBlocksFreed += static_cast<uint32_t>(freedBlocks);
+ m_Stats.bytesFreed += freedBlockSize;
+ }
- moves.push_back(move);
- }
- }
- else
+ switch (m_Algorithm)
+ {
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ {
+ if (m_AlgorithmState != VMA_NULL)
{
- dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);
-
- // If the allocation doesn't fit before the end of dstBlock, forward to next block.
- while (dstBlockInfoIndex < srcBlockInfoIndex &&
- dstAllocOffset + srcAllocSize > dstBlockSize)
+ // Avoid unnecessary tries to allocate when new free block is avaiable
+ StateExtensive& state = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[vectorIndex];
+ if (state.firstFreeBlock != SIZE_MAX)
{
- // But before that, register remaining free space at the end of dst block.
- freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);
-
- ++dstBlockInfoIndex;
- dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;
- pDstBlock = m_pBlockVector->GetBlock(dstOrigBlockIndex);
- pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock->m_pMetadata;
- dstBlockSize = pDstMetadata->GetSize();
- dstOffset = 0;
- dstAllocOffset = 0;
+ state.firstFreeBlock -= prevCount - currentCount;
+ if (state.firstFreeBlock != 0)
+ state.firstFreeBlock -= vector->GetBlock(state.firstFreeBlock - 1)->m_pMetadata->IsEmpty();
}
+ }
+ }
+ }
+ }
+ moveInfo.moveCount = 0;
+ moveInfo.pMoves = VMA_NULL;
+ m_Moves.clear();
- // Same block
- if (dstBlockInfoIndex == srcBlockInfoIndex)
+ // Move blocks with immovable allocations according to algorithm
+ if (immovableBlocks.size() > 0)
+ {
+ switch (m_Algorithm)
+ {
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ {
+ if (m_AlgorithmState != VMA_NULL)
+ {
+ bool swapped = false;
+ // Move to the start of free blocks range
+ for (const ImmovableBlock& block : immovableBlocks)
{
- VMA_ASSERT(dstAllocOffset <= srcAllocOffset);
-
- const bool overlap = dstAllocOffset + srcAllocSize > srcAllocOffset;
-
- bool skipOver = overlap;
- if (overlap && m_OverlappingMoveSupported && dstAllocOffset < srcAllocOffset)
- {
- // If destination and source place overlap, skip if it would move it
- // by only < 1/64 of its size.
- skipOver = (srcAllocOffset - dstAllocOffset) * 64 < srcAllocSize;
- }
-
- if (skipOver)
- {
- freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);
-
- dstOffset = srcAllocOffset + srcAllocSize;
- ++srcSuballocIt;
- }
- // MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.
- else
+ StateExtensive& state = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[block.vectorIndex];
+ if (state.operation != StateExtensive::Operation::Cleanup)
{
- srcSuballocIt->offset = dstAllocOffset;
- ((VmaAllocation)(srcSuballocIt->userData))->ChangeAllocHandle((VmaAllocHandle)(dstAllocOffset + 1));
- dstOffset = dstAllocOffset + srcAllocSize;
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
- ++srcSuballocIt;
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = dstOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.dstHandle = (VmaAllocHandle)(dstAllocOffset + 1);
- move.size = srcAllocSize;
-
- moves.push_back(move);
+ VmaBlockVector* vector = m_pBlockVectors[block.vectorIndex];
+ for (size_t i = 0, count = vector->GetBlockCount() - m_ImmovableBlockCount; i < count; ++i)
+ {
+ if (vector->GetBlock(i) == block.block)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[vector->GetBlockCount() - ++m_ImmovableBlockCount]);
+ if (state.firstFreeBlock != SIZE_MAX)
+ {
+ if (i < state.firstFreeBlock - 1)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[--state.firstFreeBlock]);
+ }
+ }
+ swapped = true;
+ break;
+ }
+ }
}
}
- // Different block
- else
+ if (swapped)
+ result = VK_INCOMPLETE;
+ break;
+ }
+ }
+ default:
+ {
+ // Move to the begining
+ for (const ImmovableBlock& block : immovableBlocks)
+ {
+ VmaBlockVector* vector = m_pBlockVectors[block.vectorIndex];
+ for (size_t i = m_ImmovableBlockCount; vector->GetBlockCount(); ++i)
{
- // MOVE OPTION 2: Move the allocation to a different block.
-
- VMA_ASSERT(dstBlockInfoIndex < srcBlockInfoIndex);
- VMA_ASSERT(dstAllocOffset + srcAllocSize <= dstBlockSize);
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pDstBlock, (VmaAllocHandle)(dstAllocOffset + 1));
- dstOffset = dstAllocOffset + srcAllocSize;
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
-
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
-
- pDstMetadata->m_Suballocations.push_back(suballoc);
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = dstOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.dstHandle = (VmaAllocHandle)(dstAllocOffset + 1);
- move.size = srcAllocSize;
-
- moves.push_back(move);
+ if (vector->GetBlock(i) == block.block)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[m_ImmovableBlockCount++]);
+ break;
+ }
}
}
+ break;
+ }
}
}
-
- m_BlockInfos.clear();
-
- PostprocessMetadata();
-
- return VK_SUCCESS;
+ return result;
}
-VmaDefragmentationAlgorithm_Fast::FreeSpaceDatabase::FreeSpaceDatabase()
+bool VmaDefragmentationContext_T::ComputeDefragmentation(VmaBlockVector& vector, size_t index)
{
- FreeSpace s = {};
- s.blockInfoIndex = SIZE_MAX;
- for (size_t i = 0; i < MAX_COUNT; ++i)
+ switch (m_Algorithm)
{
- m_FreeSpaces[i] = s;
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT:
+ return ComputeDefragmentation_Fast(vector);
+ default: // Default algoritm
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT:
+ return ComputeDefragmentation_Balanced(vector);
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT:
+ return ComputeDefragmentation_Full(vector);
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ return ComputeDefragmentation_Extensive(vector, index);
}
}
-void VmaDefragmentationAlgorithm_Fast::FreeSpaceDatabase::Register(size_t blockInfoIndex, VkDeviceSize offset, VkDeviceSize size)
+VmaDefragmentationContext_T::MoveAllocationData VmaDefragmentationContext_T::GetMoveData(
+ VmaAllocHandle handle, VmaBlockMetadata* metadata)
{
- // Find first invalid or the smallest structure.
- size_t bestIndex = SIZE_MAX;
- for (size_t i = 0; i < MAX_COUNT; ++i)
- {
- // Empty structure.
- if (m_FreeSpaces[i].blockInfoIndex == SIZE_MAX)
- {
- bestIndex = i;
- break;
- }
- if (m_FreeSpaces[i].size < size &&
- (bestIndex == SIZE_MAX || m_FreeSpaces[bestIndex].size > m_FreeSpaces[i].size))
- {
- bestIndex = i;
- }
- }
+ MoveAllocationData moveData;
+ moveData.move.srcAllocation = (VmaAllocation)metadata->GetAllocationUserData(handle);
+ moveData.size = moveData.move.srcAllocation->GetSize();
+ moveData.alignment = moveData.move.srcAllocation->GetAlignment();
+ moveData.type = moveData.move.srcAllocation->GetSuballocationType();
+ moveData.flags = 0;
- if (bestIndex != SIZE_MAX)
- {
- m_FreeSpaces[bestIndex].blockInfoIndex = blockInfoIndex;
- m_FreeSpaces[bestIndex].offset = offset;
- m_FreeSpaces[bestIndex].size = size;
- }
+ if (moveData.move.srcAllocation->IsPersistentMap())
+ moveData.flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT;
+ if (moveData.move.srcAllocation->IsMappingAllowed())
+ moveData.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;
+
+ return moveData;
}
-bool VmaDefragmentationAlgorithm_Fast::FreeSpaceDatabase::Fetch(VkDeviceSize alignment, VkDeviceSize size,
- size_t& outBlockInfoIndex, VkDeviceSize& outDstOffset)
+bool VmaDefragmentationContext_T::IncrementCounters(uint32_t& allocations, VkDeviceSize bytes)
{
- size_t bestIndex = SIZE_MAX;
- VkDeviceSize bestFreeSpaceAfter = 0;
- for (size_t i = 0; i < MAX_COUNT; ++i)
+ if (++allocations >= m_MaxPassAllocations || bytes >= m_MaxPassBytes)
{
- // Structure is valid.
- if (m_FreeSpaces[i].blockInfoIndex != SIZE_MAX)
- {
- const VkDeviceSize dstOffset = VmaAlignUp(m_FreeSpaces[i].offset, alignment);
- // Allocation fits into this structure.
- if (dstOffset + size <= m_FreeSpaces[i].offset + m_FreeSpaces[i].size)
- {
- const VkDeviceSize freeSpaceAfter = (m_FreeSpaces[i].offset + m_FreeSpaces[i].size) -
- (dstOffset + size);
- if (bestIndex == SIZE_MAX || freeSpaceAfter > bestFreeSpaceAfter)
- {
- bestIndex = i;
- bestFreeSpaceAfter = freeSpaceAfter;
- }
- }
- }
- }
-
- if (bestIndex != SIZE_MAX)
- {
- outBlockInfoIndex = m_FreeSpaces[bestIndex].blockInfoIndex;
- outDstOffset = VmaAlignUp(m_FreeSpaces[bestIndex].offset, alignment);
-
- // Leave this structure for remaining empty space.
- const VkDeviceSize alignmentPlusSize = (outDstOffset - m_FreeSpaces[bestIndex].offset) + size;
- m_FreeSpaces[bestIndex].offset += alignmentPlusSize;
- m_FreeSpaces[bestIndex].size -= alignmentPlusSize;
-
+ m_Stats.bytesMoved += bytes;
+ m_Stats.allocationsMoved += allocations;
return true;
}
-
return false;
}
-void VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()
+bool VmaDefragmentationContext_T::ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block)
{
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- for (size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
- {
- VmaBlockMetadata_Generic* const pMetadata =
- (VmaBlockMetadata_Generic*)m_pBlockVector->GetBlock(blockIndex)->m_pMetadata;
- pMetadata->m_FreeCount = 0;
- pMetadata->m_SumFreeSize = pMetadata->GetSize();
- pMetadata->m_FreeSuballocationsBySize.clear();
- for (VmaSuballocationList::iterator it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end(); )
- {
- if (it->type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- VmaSuballocationList::iterator nextIt = it;
- ++nextIt;
- pMetadata->m_Suballocations.erase(it);
- it = nextIt;
- }
- else
- {
- ++it;
- }
- }
- }
-}
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+ VmaBlockMetadata* metadata = block->m_pMetadata;
-void VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()
-{
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- for (size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- VmaBlockMetadata_Generic* const pMetadata =
- (VmaBlockMetadata_Generic*)m_pBlockVector->GetBlock(blockIndex)->m_pMetadata;
- const VkDeviceSize blockSize = pMetadata->GetSize();
-
- // No allocations in this block - entire area is free.
- if (pMetadata->m_Suballocations.empty())
- {
- pMetadata->m_FreeCount = 1;
- //pMetadata->m_SumFreeSize is already set to blockSize.
- VmaSuballocation suballoc = {
- 0, // offset
- blockSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- pMetadata->m_Suballocations.push_back(suballoc);
- pMetadata->RegisterFreeSuballocation(pMetadata->m_Suballocations.begin());
- }
- // There are some allocations in this block.
- else
- {
- VkDeviceSize offset = 0;
- VmaSuballocationList::iterator it;
- for (it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end();
- ++it)
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
+ {
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- VMA_ASSERT(it->type != VMA_SUBALLOCATION_TYPE_FREE);
- VMA_ASSERT(it->offset >= offset);
-
- // Need to insert preceding free space.
- if (it->offset > offset)
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
{
- ++pMetadata->m_FreeCount;
- const VkDeviceSize freeSize = it->offset - offset;
- VmaSuballocation suballoc = {
- offset, // offset
- freeSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- VmaSuballocationList::iterator precedingFreeIt = pMetadata->m_Suballocations.insert(it, suballoc);
- pMetadata->m_FreeSuballocationsBySize.push_back(precedingFreeIt);
- }
-
- pMetadata->m_SumFreeSize -= it->size;
- offset = it->offset + it->size;
- }
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
+ {
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
- // Need to insert trailing free space.
- if (offset < blockSize)
- {
- ++pMetadata->m_FreeCount;
- const VkDeviceSize freeSize = blockSize - offset;
- VmaSuballocation suballoc = {
- offset, // offset
- freeSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- VMA_ASSERT(it == pMetadata->m_Suballocations.end());
- VmaSuballocationList::iterator trailingFreeIt = pMetadata->m_Suballocations.insert(it, suballoc);
- pMetadata->m_FreeSuballocationsBySize.push_back(trailingFreeIt);
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
+ }
+ }
}
-
- VMA_SORT(
- pMetadata->m_FreeSuballocationsBySize.begin(),
- pMetadata->m_FreeSuballocationsBySize.end(),
- VmaSuballocationItemSizeLess());
}
-
- VMA_HEAVY_ASSERT(pMetadata->Validate());
}
+
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaDefragmentationAlgorithm_Fast::InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, const VmaSuballocation& suballoc)
+bool VmaDefragmentationContext_T::AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector)
{
- VmaSuballocationList& suballocs = pMetadata->m_Suballocations;
- VmaSuballocationList::iterator elementAfter;
- const VkDeviceSize last = suballocs.rbegin()->offset;
- const VkDeviceSize first = suballocs.begin()->offset;
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(data.move.internalData);
- if (last <= suballoc.offset)
- elementAfter = suballocs.end();
- else if (first >= suballoc.offset)
- elementAfter = suballocs.begin();
- else
+ for (; start < end; ++start)
{
- const size_t suballocCount = suballocs.size();
- const VkDeviceSize step = (last - first + suballocs.begin()->size) / suballocCount;
- // If offset to be inserted is closer to the end of range, search from the end
- if ((suballoc.offset - first) / step > suballocCount / 2)
+ VmaDeviceMemoryBlock* dstBlock = vector.GetBlock(start);
+ if (dstBlock->m_pMetadata->GetSumFreeSize() >= data.size)
{
- elementAfter = suballocs.begin();
- for (VmaSuballocationList::reverse_iterator suballocItem = ++suballocs.rbegin();
- suballocItem != suballocs.rend();
- ++suballocItem)
- {
- if (suballocItem->offset <= suballoc.offset)
- {
- elementAfter = --suballocItem;
- break;
- }
- }
- }
- else
- {
- elementAfter = suballocs.end();
- for (VmaSuballocationList::iterator suballocItem = ++suballocs.begin();
- suballocItem != suballocs.end();
- ++suballocItem)
+ if (vector.AllocateFromBlock(dstBlock,
+ data.size,
+ data.alignment,
+ data.flags,
+ this,
+ data.type,
+ 0,
+ &dst) == VK_SUCCESS)
{
- if (suballocItem->offset >= suballoc.offset)
- {
- elementAfter = suballocItem;
- break;
- }
+ data.move.dstMemory = dst->GetMemory();
+ data.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(data.move);
+ currentBytesMoved += data.size;
+
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
+ break;
}
}
}
- pMetadata->m_Suballocations.insert(elementAfter, suballoc);
-}
-#endif // _VMA_DEFRAGMENTATION_ALGORITHM_FAST_FUNCTIONS
-#ifndef _VMA_BLOCK_VECTOR_DEFRAGMENTATION_CONTEXT_FUNCTIONS
-VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(
- VmaAllocator hAllocator,
- VmaPool hCustomPool,
- VmaBlockVector* pBlockVector)
- : res(VK_SUCCESS),
- mutexLocked(false),
- blockContexts(VmaStlAllocator<VmaBlockDefragmentationContext>(hAllocator->GetAllocationCallbacks())),
- defragmentationMoves(VmaStlAllocator<VmaDefragmentationMove>(hAllocator->GetAllocationCallbacks())),
- defragmentationMovesProcessed(0),
- defragmentationMovesCommitted(0),
- hasDefragmentationPlan(0),
- m_hAllocator(hAllocator),
- m_hCustomPool(hCustomPool),
- m_pBlockVector(pBlockVector),
- m_pAlgorithm(VMA_NULL),
- m_Allocations(VmaStlAllocator<AllocInfo>(hAllocator->GetAllocationCallbacks())),
- m_AllAllocations(false) {}
-
-VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()
-{
- vma_delete(m_hAllocator, m_pAlgorithm);
-}
-
-void VmaBlockVectorDefragmentationContext::AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged)
-{
- AllocInfo info = { hAlloc, pChanged };
- m_Allocations.push_back(info);
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaBlockVectorDefragmentationContext::Begin(bool overlappingMoveSupported, VmaDefragmentationFlags flags)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Fast(VmaBlockVector& vector)
{
- const bool allAllocations = m_AllAllocations ||
- m_Allocations.size() == m_pBlockVector->CalcAllocationCount();
+ // Move only between blocks
- /********************************
- HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.
- ********************************/
-
- /*
- Fast algorithm is supported only when certain criteria are met:
- - VMA_DEBUG_MARGIN is 0.
- - All allocations in this block vector are movable.
- - There is no possibility of image/buffer granularity conflict.
- - The defragmentation is not incremental
- */
- if (VMA_DEBUG_MARGIN == 0 &&
- allAllocations &&
- !m_pBlockVector->IsBufferImageGranularityConflictPossible() &&
- !(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL))
+ // Go through allocations in last blocks and try to fit them inside first ones
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(
- m_hAllocator, m_pBlockVector, overlappingMoveSupported);
- }
- else
- {
- m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(
- m_hAllocator, m_pBlockVector, overlappingMoveSupported);
- }
+ VmaBlockMetadata* metadata = vector.GetBlock(i)->m_pMetadata;
- if (allAllocations)
- {
- m_pAlgorithm->AddAll();
- }
- else
- {
- for (size_t i = 0, count = m_Allocations.size(); i < count; ++i)
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- m_pAlgorithm->AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
+
+ // Check all previous blocks for free space
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
}
}
+ return false;
}
-#endif // _VMA_BLOCK_VECTOR_DEFRAGMENTATION_CONTEXT_FUNCTIONS
-#ifndef _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS
-VmaDefragmentationContext_T::VmaDefragmentationContext_T(
- VmaAllocator hAllocator,
- uint32_t flags,
- VmaDefragmentationStats* pStats)
- : m_hAllocator(hAllocator),
- m_Flags(flags),
- m_pStats(pStats),
- m_CustomPoolContexts(VmaStlAllocator<VmaBlockVectorDefragmentationContext*>(hAllocator->GetAllocationCallbacks()))
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Balanced(VmaBlockVector& vector)
{
- memset(m_DefaultPoolContexts, 0, sizeof(m_DefaultPoolContexts));
-}
+ // Go over every allocation and try to fit it in previous blocks at lowest offsets,
+ // if not possible: realloc within single block to minimize offset (exclude offset == 0),
+ // but only if there are noticable gaps between them (some heuristic, ex. average size of allocation in block)
-VmaDefragmentationContext_T::~VmaDefragmentationContext_T()
-{
- for (size_t i = m_CustomPoolContexts.size(); i--; )
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];
- pBlockVectorCtx->GetBlockVector()->DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);
- vma_delete(m_hAllocator, pBlockVectorCtx);
- }
- for (size_t i = m_hAllocator->m_MemProps.memoryTypeCount; i--; )
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];
- if (pBlockVectorCtx)
- {
- pBlockVectorCtx->GetBlockVector()->DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);
- vma_delete(m_hAllocator, pBlockVectorCtx);
- }
- }
-}
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
-void VmaDefragmentationContext_T::AddPools(uint32_t poolCount, const VmaPool* pPools)
-{
- for (uint32_t poolIndex = 0; poolIndex < poolCount; ++poolIndex)
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- VmaPool pool = pPools[poolIndex];
- VMA_ASSERT(pool);
- for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
+ VmaDeviceMemoryBlock* block = vector.GetBlock(i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
+
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- if(pool->m_pBlockVectors[memTypeIndex])
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
+
+ // Check all previous blocks for free space
+ const size_t prevMoveCount = m_Moves.size();
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
+
+ // If no room found then realloc within block for lower offset
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
{
- // Pools with algorithm other than default are not defragmented.
- if (pool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
-
- for (size_t i = m_CustomPoolContexts.size(); i--; )
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
{
- if (m_CustomPoolContexts[i]->GetCustomPool() == pool)
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
{
- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
- break;
- }
- }
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
- if (!pBlockVectorDefragCtx)
- {
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- pool,
- pool->m_pBlockVectors[memTypeIndex]);
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
+ }
}
-
- pBlockVectorDefragCtx->AddAll();
}
}
}
}
+
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaDefragmentationContext_T::AddAllocations(
- uint32_t allocationCount,
- const VmaAllocation* pAllocations,
- VkBool32* pAllocationsChanged)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Full(VmaBlockVector& vector)
{
- // Dispatch pAllocations among defragmentators. Create them when necessary.
- for (uint32_t allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
+ // Go over every allocation and try to fit it in previous blocks at lowest offsets,
+ // if not possible: realloc within single block to minimize offset (exclude offset == 0)
+
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- const VmaAllocation hAlloc = pAllocations[allocIndex];
- VMA_ASSERT(hAlloc);
- const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
- // DedicatedAlloc cannot be defragmented.
- if (hAlloc->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK)
+ VmaDeviceMemoryBlock* block = vector.GetBlock(i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
+
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
- const VmaPool hAllocPool = hAlloc->GetBlock()->GetParentPool();
- // This allocation belongs to custom pool.
- if (hAllocPool != VK_NULL_HANDLE)
+ // Check all previous blocks for free space
+ const size_t prevMoveCount = m_Moves.size();
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
+
+ // If no room found then realloc within block for lower offset
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
{
- // Pools with algorithm other than default are not defragmented.
- if (hAllocPool->m_pBlockVectors[memTypeIndex]->GetAlgorithm() == 0)
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- for (size_t i = m_CustomPoolContexts.size(); i--; )
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
{
- if (m_CustomPoolContexts[i]->GetCustomPool() == hAllocPool)
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
{
- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
- break;
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
+
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
}
}
- if (!pBlockVectorDefragCtx)
- {
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- hAllocPool,
- hAllocPool->m_pBlockVectors[memTypeIndex]);
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
- }
}
}
- // This allocation belongs to default pool.
- else
- {
- pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];
- if (!pBlockVectorDefragCtx)
- {
- VMA_ASSERT(m_hAllocator->m_pBlockVectors[memTypeIndex] && "Trying to use unsupported memory type!");
-
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- VMA_NULL, // hCustomPool
- m_hAllocator->m_pBlockVectors[memTypeIndex]);
- m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;
- }
- }
-
- if (pBlockVectorDefragCtx)
- {
- VkBool32* const pChanged = (pAllocationsChanged != VMA_NULL) ?
- &pAllocationsChanged[allocIndex] : VMA_NULL;
- pBlockVectorDefragCtx->AddAllocation(hAlloc, pChanged);
- }
}
}
+
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-VkResult VmaDefragmentationContext_T::Defragment(
- VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,
- VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer, VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index)
{
- if (pStats)
- {
- memset(pStats, 0, sizeof(VmaDefragmentationStats));
- }
+ // First free single block, then populate it to the brim, then free another block, and so on
- if (flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- // For incremental defragmetnations, we just earmark how much we can move
- // The real meat is in the defragmentation steps
- m_MaxCpuBytesToMove = maxCpuBytesToMove;
- m_MaxCpuAllocationsToMove = maxCpuAllocationsToMove;
+ // Fallback to previous algorithm since without granularity conflicts it can achieve max packing
+ if (vector.m_BufferImageGranularity == 1)
+ return ComputeDefragmentation_Full(vector);
- m_MaxGpuBytesToMove = maxGpuBytesToMove;
- m_MaxGpuAllocationsToMove = maxGpuAllocationsToMove;
+ VMA_ASSERT(m_AlgorithmState != VMA_NULL);
- if (m_MaxCpuBytesToMove == 0 && m_MaxCpuAllocationsToMove == 0 &&
- m_MaxGpuBytesToMove == 0 && m_MaxGpuAllocationsToMove == 0)
- return VK_SUCCESS;
+ StateExtensive& vectorState = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[index];
- return VK_NOT_READY;
- }
-
- if (commandBuffer == VK_NULL_HANDLE)
+ bool texturePresent = false, bufferPresent = false, otherPresent = false;
+ switch (vectorState.operation)
{
- maxGpuBytesToMove = 0;
- maxGpuAllocationsToMove = 0;
- }
+ case StateExtensive::Operation::Done: // Vector defragmented
+ return false;
+ case StateExtensive::Operation::FindFreeBlockBuffer:
+ case StateExtensive::Operation::FindFreeBlockTexture:
+ case StateExtensive::Operation::FindFreeBlockAll:
+ {
+ // No free blocks, have to clear last one
+ size_t last = (vectorState.firstFreeBlock == SIZE_MAX ? vector.GetBlockCount() : vectorState.firstFreeBlock) - 1;
+ VmaBlockMetadata* freeMetadata = vector.GetBlock(last)->m_pMetadata;
- VkResult res = VK_SUCCESS;
+ const size_t prevMoveCount = m_Moves.size();
+ for (VmaAllocHandle handle = freeMetadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = freeMetadata->GetNextAllocation(handle))
+ {
+ MoveAllocationData moveData = GetMoveData(handle, freeMetadata);
- // Process default pools.
- for (uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount() && res >= VK_SUCCESS;
- ++memTypeIndex)
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if (pBlockVectorCtx)
- {
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- pStats, flags,
- maxCpuBytesToMove, maxCpuAllocationsToMove,
- maxGpuBytesToMove, maxGpuAllocationsToMove,
- commandBuffer);
- if (pBlockVectorCtx->res != VK_SUCCESS)
+ // Check all previous blocks for free space
+ if (AllocInOtherBlock(0, last, moveData, vector))
{
- res = pBlockVectorCtx->res;
+ // Full clear performed already
+ if (prevMoveCount != m_Moves.size() && freeMetadata->GetNextAllocation(handle) == VK_NULL_HANDLE)
+ reinterpret_cast<size_t*>(m_AlgorithmState)[index] = last;
+ return true;
}
}
- }
- // Process custom pools.
- for (size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount && res >= VK_SUCCESS;
- ++customCtxIndex)
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- pStats, flags,
- maxCpuBytesToMove, maxCpuAllocationsToMove,
- maxGpuBytesToMove, maxGpuAllocationsToMove,
- commandBuffer);
- if (pBlockVectorCtx->res != VK_SUCCESS)
+ if (prevMoveCount == m_Moves.size())
{
- res = pBlockVectorCtx->res;
+ // Cannot perform full clear, have to move data in other blocks around
+ if (last != 0)
+ {
+ for (size_t i = last - 1; i; --i)
+ {
+ if (ReallocWithinBlock(vector, vector.GetBlock(i)))
+ return true;
+ }
+ }
+
+ if (prevMoveCount == m_Moves.size())
+ {
+ // No possible reallocs within blocks, try to move them around fast
+ return ComputeDefragmentation_Fast(vector);
+ }
+ }
+ else
+ {
+ switch (vectorState.operation)
+ {
+ case StateExtensive::Operation::FindFreeBlockBuffer:
+ vectorState.operation = StateExtensive::Operation::MoveBuffers;
+ break;
+ default:
+ VMA_ASSERT(0);
+ case StateExtensive::Operation::FindFreeBlockTexture:
+ vectorState.operation = StateExtensive::Operation::MoveTextures;
+ break;
+ case StateExtensive::Operation::FindFreeBlockAll:
+ vectorState.operation = StateExtensive::Operation::MoveAll;
+ break;
+ }
+ vectorState.firstFreeBlock = last;
+ // Nothing done, block found without reallocations, can perform another reallocs in same pass
+ if (prevMoveCount == m_Moves.size())
+ return ComputeDefragmentation_Extensive(vector, index);
}
+ break;
}
-
- return res;
-}
-
-VkResult VmaDefragmentationContext_T::DefragmentPassBegin(VmaDefragmentationPassInfo* pInfo)
-{
- VmaDefragmentationPassMoveInfo* pCurrentMove = pInfo->pMoves;
- uint32_t movesLeft = pInfo->moveCount;
-
- // Process default pools.
- for (uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount();
- ++memTypeIndex)
+ case StateExtensive::Operation::MoveTextures:
{
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if (pBlockVectorCtx)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
-
- if (!pBlockVectorCtx->hasDefragmentationPlan)
+ if (texturePresent)
{
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- m_pStats, m_Flags,
- m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,
- m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,
- VK_NULL_HANDLE);
-
- if (pBlockVectorCtx->res < VK_SUCCESS)
- continue;
-
- pBlockVectorCtx->hasDefragmentationPlan = true;
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockTexture;
+ return ComputeDefragmentation_Extensive(vector, index);
}
- const uint32_t processed = pBlockVectorCtx->GetBlockVector()->ProcessDefragmentations(
- pBlockVectorCtx,
- pCurrentMove, movesLeft);
+ if (!bufferPresent && !otherPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::Cleanup;
+ break;
+ }
- movesLeft -= processed;
- pCurrentMove += processed;
+ // No more textures to move, check buffers
+ vectorState.operation = StateExtensive::Operation::MoveBuffers;
+ bufferPresent = false;
+ otherPresent = false;
}
+ else
+ break;
}
-
- // Process custom pools.
- for (size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount;
- ++customCtxIndex)
+ case StateExtensive::Operation::MoveBuffers:
{
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
-
- if (!pBlockVectorCtx->hasDefragmentationPlan)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_BUFFER, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- m_pStats, m_Flags,
- m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,
- m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,
- VK_NULL_HANDLE);
+ if (bufferPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer;
+ return ComputeDefragmentation_Extensive(vector, index);
+ }
- if (pBlockVectorCtx->res < VK_SUCCESS)
- continue;
+ if (!otherPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::Cleanup;
+ break;
+ }
- pBlockVectorCtx->hasDefragmentationPlan = true;
+ // No more buffers to move, check all others
+ vectorState.operation = StateExtensive::Operation::MoveAll;
+ otherPresent = false;
}
-
- const uint32_t processed = pBlockVectorCtx->GetBlockVector()->ProcessDefragmentations(
- pBlockVectorCtx,
- pCurrentMove, movesLeft);
-
- movesLeft -= processed;
- pCurrentMove += processed;
+ else
+ break;
}
-
- pInfo->moveCount = pInfo->moveCount - movesLeft;
-
- return VK_SUCCESS;
-}
-
-VkResult VmaDefragmentationContext_T::DefragmentPassEnd()
-{
- VkResult res = VK_SUCCESS;
-
- // Process default pools.
- for (uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount();
- ++memTypeIndex)
+ case StateExtensive::Operation::MoveAll:
{
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if (pBlockVectorCtx)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_FREE, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
-
- if (!pBlockVectorCtx->hasDefragmentationPlan)
+ if (otherPresent)
{
- res = VK_NOT_READY;
- continue;
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer;
+ return ComputeDefragmentation_Extensive(vector, index);
}
+ // Everything moved
+ vectorState.operation = StateExtensive::Operation::Cleanup;
+ }
+ break;
+ }
+ }
- pBlockVectorCtx->GetBlockVector()->CommitDefragmentations(
- pBlockVectorCtx, m_pStats);
-
- if (pBlockVectorCtx->defragmentationMoves.size() != pBlockVectorCtx->defragmentationMovesCommitted)
- res = VK_NOT_READY;
+ if (vectorState.operation == StateExtensive::Operation::Cleanup)
+ {
+ // All other work done, pack data in blocks even tighter if possible
+ const size_t prevMoveCount = m_Moves.size();
+ for (size_t i = 0; i < vector.GetBlockCount(); ++i)
+ {
+ if (ReallocWithinBlock(vector, vector.GetBlock(i)))
+ return true;
}
+
+ if (prevMoveCount == m_Moves.size())
+ vectorState.operation = StateExtensive::Operation::Done;
}
+ return false;
+}
- // Process custom pools.
- for (size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount;
- ++customCtxIndex)
+bool VmaDefragmentationContext_T::MoveDataToFreeBlocks(VmaSuballocationType currentType,
+ VmaBlockVector& vector, size_t firstFreeBlock,
+ bool& texturePresent, bool& bufferPresent, bool& otherPresent)
+{
+ const size_t prevMoveCount = m_Moves.size();
+ for (size_t i = firstFreeBlock ; i;)
{
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
+ VmaDeviceMemoryBlock* block = vector.GetBlock(--i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
- if (!pBlockVectorCtx->hasDefragmentationPlan)
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- res = VK_NOT_READY;
- continue;
- }
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
- pBlockVectorCtx->GetBlockVector()->CommitDefragmentations(
- pBlockVectorCtx, m_pStats);
+ // Move only single type of resources at once
+ if (!VmaIsBufferImageGranularityConflict(moveData.type, currentType))
+ {
+ // Try to fit allocation into free blocks
+ if (AllocInOtherBlock(firstFreeBlock, vector.GetBlockCount(), moveData, vector))
+ return false;
+ }
- if (pBlockVectorCtx->defragmentationMoves.size() != pBlockVectorCtx->defragmentationMovesCommitted)
- res = VK_NOT_READY;
+ if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL))
+ texturePresent = true;
+ else if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_BUFFER))
+ bufferPresent = true;
+ else
+ otherPresent = true;
+ }
}
-
- return res;
+ return prevMoveCount == m_Moves.size();
}
#endif // _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS
#ifndef _VMA_POOL_T_FUNCTIONS
VmaPool_T::VmaPool_T(
VmaAllocator hAllocator,
- const VmaPoolCreateInfo& createInfo) :
- m_hAllocator(hAllocator),
- m_pBlockVectors{},
+ const VmaPoolCreateInfo& createInfo,
+ VkDeviceSize preferredBlockSize)
+ : m_BlockVector(
+ hAllocator,
+ this, // hParentPool
+ createInfo.memoryTypeIndex,
+ createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,
+ createInfo.minBlockCount,
+ createInfo.maxBlockCount,
+ (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
+ createInfo.blockSize != 0, // explicitBlockSize
+ createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
+ createInfo.priority,
+ VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),
+ createInfo.pMemoryAllocateNext),
m_Id(0),
- m_Name(VMA_NULL)
-{
- for(uint32_t memTypeIndex = 0; memTypeIndex < hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
- {
- // Create only supported types
- if((hAllocator->GetGlobalMemoryTypeBits() & (1u << memTypeIndex)) != 0)
- {
- m_pBlockVectors[memTypeIndex] = vma_new(hAllocator, VmaBlockVector)(
- hAllocator,
- this, // hParentPool
- memTypeIndex,
- createInfo.blockSize != 0 ? createInfo.blockSize : hAllocator->CalcPreferredBlockSize(memTypeIndex),
- createInfo.minBlockCount,
- createInfo.maxBlockCount,
- (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
- false, // explicitBlockSize
- createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
- createInfo.priority,
- VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(memTypeIndex), createInfo.minAllocationAlignment),
- createInfo.pMemoryAllocateNext);
- }
- }
-}
+ m_Name(VMA_NULL) {}
VmaPool_T::~VmaPool_T()
{
VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL);
- for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
- {
- vma_delete(m_hAllocator, m_pBlockVectors[memTypeIndex]);
- }
}
void VmaPool_T::SetName(const char* pName)
{
- for(uint32_t memTypeIndex = 0; memTypeIndex < m_hAllocator->GetMemoryTypeCount(); ++memTypeIndex)
- {
- if(m_pBlockVectors[memTypeIndex])
- {
- const VkAllocationCallbacks* allocs = m_pBlockVectors[memTypeIndex]->GetAllocator()->GetAllocationCallbacks();
- VmaFreeString(allocs, m_Name);
+ const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks();
+ VmaFreeString(allocs, m_Name);
- if (pName != VMA_NULL)
- {
- m_Name = VmaCreateStringCopy(allocs, pName);
- }
- else
- {
- m_Name = VMA_NULL;
- }
- }
+ if (pName != VMA_NULL)
+ {
+ m_Name = VmaCreateStringCopy(allocs, pName);
+ }
+ else
+ {
+ m_Name = VMA_NULL;
}
}
#endif // _VMA_POOL_T_FUNCTIONS
@@ -14784,6 +13980,14 @@ void VmaAllocator_T::ImportVulkanFunctions_Static()
m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2)vkGetPhysicalDeviceMemoryProperties2;
}
#endif
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)vkGetDeviceBufferMemoryRequirements;
+ m_VulkanFunctions.vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)vkGetDeviceImageMemoryRequirements;
+ }
+#endif
}
#endif // VMA_STATIC_VULKAN_FUNCTIONS == 1
@@ -14829,6 +14033,11 @@ void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVul
VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);
#endif
+#if VMA_VULKAN_VERSION >= 1003000
+ VMA_COPY_IF_NOT_NULL(vkGetDeviceBufferMemoryRequirements);
+ VMA_COPY_IF_NOT_NULL(vkGetDeviceImageMemoryRequirements);
+#endif
+
#undef VMA_COPY_IF_NOT_NULL
}
@@ -14902,6 +14111,14 @@ void VmaAllocator_T::ImportVulkanFunctions_Dynamic()
}
#endif // #if VMA_MEMORY_BUDGET
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ VMA_FETCH_DEVICE_FUNC(vkGetDeviceBufferMemoryRequirements, PFN_vkGetDeviceBufferMemoryRequirements, "vkGetDeviceBufferMemoryRequirements");
+ VMA_FETCH_DEVICE_FUNC(vkGetDeviceImageMemoryRequirements, PFN_vkGetDeviceImageMemoryRequirements, "vkGetDeviceImageMemoryRequirements");
+ }
+#endif
+
#undef VMA_FETCH_DEVICE_FUNC
#undef VMA_FETCH_INSTANCE_FUNC
}
@@ -14950,6 +14167,14 @@ void VmaAllocator_T::ValidateVulkanFunctions()
VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);
}
#endif
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ VMA_ASSERT(m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements != VMA_NULL);
+ VMA_ASSERT(m_VulkanFunctions.vkGetDeviceImageMemoryRequirements != VMA_NULL);
+ }
+#endif
}
VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)
@@ -14966,8 +14191,8 @@ VkResult VmaAllocator_T::AllocateMemoryOfType(
VkDeviceSize alignment,
bool dedicatedPreferred,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
const VmaAllocationCreateInfo& createInfo,
uint32_t memTypeIndex,
VmaSuballocationType suballocType,
@@ -14998,12 +14223,14 @@ VkResult VmaAllocator_T::AllocateMemoryOfType(
memTypeIndex,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
finalCreateInfo.pUserData,
finalCreateInfo.priority,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
+ dedicatedBufferImageUsage,
allocationCount,
pAllocations,
blockVector.GetAllocationNextPtr());
@@ -15039,12 +14266,14 @@ VkResult VmaAllocator_T::AllocateMemoryOfType(
memTypeIndex,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
finalCreateInfo.pUserData,
finalCreateInfo.priority,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
+ dedicatedBufferImageUsage,
allocationCount,
pAllocations,
blockVector.GetAllocationNextPtr());
@@ -15078,12 +14307,14 @@ VkResult VmaAllocator_T::AllocateMemoryOfType(
memTypeIndex,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
finalCreateInfo.pUserData,
finalCreateInfo.priority,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
+ dedicatedBufferImageUsage,
allocationCount,
pAllocations,
blockVector.GetAllocationNextPtr());
@@ -15108,12 +14339,13 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
uint32_t memTypeIndex,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
bool canAliasMemory,
void* pUserData,
float priority,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
size_t allocationCount,
VmaAllocation* pAllocations,
const void* pNextChain)
@@ -15153,8 +14385,8 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
bool canContainBufferWithDeviceAddress = true;
if(dedicatedBuffer != VK_NULL_HANDLE)
{
- canContainBufferWithDeviceAddress = dedicatedBufferUsage == UINT32_MAX || // Usage flags unknown
- (dedicatedBufferUsage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;
+ canContainBufferWithDeviceAddress = dedicatedBufferImageUsage == UINT32_MAX || // Usage flags unknown
+ (dedicatedBufferImageUsage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;
}
else if(dedicatedImage != VK_NULL_HANDLE)
{
@@ -15199,6 +14431,7 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
allocInfo,
map,
isUserDataString,
+ isMappingAllowed,
pUserData,
pAllocations + allocIndex);
if(res != VK_SUCCESS)
@@ -15235,7 +14468,6 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
FreeVulkanMemory(memTypeIndex, currAlloc->GetSize(), hMemory);
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc->GetSize());
- currAlloc->SetUserData(this, VMA_NULL);
m_AllocationObjectAllocator.Free(currAlloc);
}
@@ -15253,6 +14485,7 @@ VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(
const VkMemoryAllocateInfo& allocInfo,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
void* pUserData,
VmaAllocation* pAllocation)
{
@@ -15282,7 +14515,7 @@ VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(
}
}
- *pAllocation = m_AllocationObjectAllocator.Allocate(isUserDataString);
+ *pAllocation = m_AllocationObjectAllocator.Allocate(isUserDataString, isMappingAllowed);
(*pAllocation)->InitDedicatedAllocation(pool, memTypeIndex, hMemory, suballocType, pMappedData, size);
(*pAllocation)->SetUserData(this, pUserData);
m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);
@@ -15358,6 +14591,62 @@ void VmaAllocator_T::GetImageMemoryRequirements(
}
}
+VkResult VmaAllocator_T::FindMemoryTypeIndex(
+ uint32_t memoryTypeBits,
+ const VmaAllocationCreateInfo* pAllocationCreateInfo,
+ VkFlags bufImgUsage,
+ uint32_t* pMemoryTypeIndex) const
+{
+ memoryTypeBits &= GetGlobalMemoryTypeBits();
+
+ if(pAllocationCreateInfo->memoryTypeBits != 0)
+ {
+ memoryTypeBits &= pAllocationCreateInfo->memoryTypeBits;
+ }
+
+ VkMemoryPropertyFlags requiredFlags = 0, preferredFlags = 0, notPreferredFlags = 0;
+ if(!FindMemoryPreferences(
+ IsIntegratedGpu(),
+ *pAllocationCreateInfo,
+ bufImgUsage,
+ requiredFlags, preferredFlags, notPreferredFlags))
+ {
+ return VK_ERROR_FEATURE_NOT_PRESENT;
+ }
+
+ *pMemoryTypeIndex = UINT32_MAX;
+ uint32_t minCost = UINT32_MAX;
+ for(uint32_t memTypeIndex = 0, memTypeBit = 1;
+ memTypeIndex < GetMemoryTypeCount();
+ ++memTypeIndex, memTypeBit <<= 1)
+ {
+ // This memory type is acceptable according to memoryTypeBits bitmask.
+ if((memTypeBit & memoryTypeBits) != 0)
+ {
+ const VkMemoryPropertyFlags currFlags =
+ m_MemProps.memoryTypes[memTypeIndex].propertyFlags;
+ // This memory type contains requiredFlags.
+ if((requiredFlags & ~currFlags) == 0)
+ {
+ // Calculate cost as number of bits from preferredFlags not present in this memory type.
+ uint32_t currCost = VmaCountBitsSet(preferredFlags & ~currFlags) +
+ VmaCountBitsSet(currFlags & notPreferredFlags);
+ // Remember memory type with lowest cost.
+ if(currCost < minCost)
+ {
+ *pMemoryTypeIndex = memTypeIndex;
+ if(currCost == 0)
+ {
+ return VK_SUCCESS;
+ }
+ minCost = currCost;
+ }
+ }
+ }
+ }
+ return (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;
+}
+
VkResult VmaAllocator_T::CalcMemTypeParams(
VmaAllocationCreateInfo& inoutCreateInfo,
uint32_t memTypeIndex,
@@ -15390,29 +14679,38 @@ VkResult VmaAllocator_T::CalcAllocationParams(
bool dedicatedRequired,
bool dedicatedPreferred)
{
+ VMA_ASSERT((inoutCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) !=
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) &&
+ "Specifying both flags VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT and VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT is incorrect.");
+ VMA_ASSERT((((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) == 0 ||
+ (inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0)) &&
+ "Specifying VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT requires also VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.");
+ if(inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST)
+ {
+ if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0)
+ {
+ VMA_ASSERT((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0 &&
+ "When using VMA_ALLOCATION_CREATE_MAPPED_BIT and usage = VMA_MEMORY_USAGE_AUTO*, you must also specify VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.");
+ }
+ }
+
+ // If memory is lazily allocated, it should be always dedicated.
if(dedicatedRequired ||
- // If memory is lazily allocated, it should be always dedicated.
inoutCreateInfo.usage == VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED)
{
inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
}
- if(inoutCreateInfo.pool != VK_NULL_HANDLE && (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
+ if(inoutCreateInfo.pool != VK_NULL_HANDLE)
{
- // Assuming here every block has the same block size and priority.
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
+ if(inoutCreateInfo.pool->m_BlockVector.HasExplicitBlockSize() &&
+ (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
{
- if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex])
- {
- if(inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->HasExplicitBlockSize())
- {
- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
- return VK_ERROR_FEATURE_NOT_PRESENT;
- }
- inoutCreateInfo.priority = inoutCreateInfo.pool->m_pBlockVectors[memTypeIndex]->GetPriority();
- break;
- }
+ VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
+ return VK_ERROR_FEATURE_NOT_PRESENT;
}
+ inoutCreateInfo.priority = inoutCreateInfo.pool->m_BlockVector.GetPriority();
}
if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
@@ -15427,6 +14725,21 @@ VkResult VmaAllocator_T::CalcAllocationParams(
{
inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
}
+
+ // Non-auto USAGE values imply HOST_ACCESS flags.
+ // And so does VMA_MEMORY_USAGE_UNKNOWN because it is used with custom pools.
+ // Which specific flag is used doesn't matter. They change things only when used with VMA_MEMORY_USAGE_AUTO*.
+ // Otherwise they just protect from assert on mapping.
+ if(inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO &&
+ inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE &&
+ inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_HOST)
+ {
+ if((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) == 0)
+ {
+ inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;
+ }
+ }
+
return VK_SUCCESS;
}
@@ -15435,8 +14748,8 @@ VkResult VmaAllocator_T::AllocateMemory(
bool requiresDedicatedAllocation,
bool prefersDedicatedAllocation,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
const VmaAllocationCreateInfo& createInfo,
VmaSuballocationType suballocType,
size_t allocationCount,
@@ -15456,46 +14769,67 @@ VkResult VmaAllocator_T::AllocateMemory(
if(res != VK_SUCCESS)
return res;
- // Bit mask of memory Vulkan types acceptable for this allocation.
- uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
- uint32_t memTypeIndex = UINT32_MAX;
- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
- // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
- if(res != VK_SUCCESS)
- return res;
- do
+ if(createInfoFinal.pool != VK_NULL_HANDLE)
{
- VmaBlockVector* blockVector = createInfoFinal.pool == VK_NULL_HANDLE ? m_pBlockVectors[memTypeIndex] : createInfoFinal.pool->m_pBlockVectors[memTypeIndex];
- VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
- VmaDedicatedAllocationList& dedicatedAllocations = createInfoFinal.pool == VK_NULL_HANDLE ? m_DedicatedAllocations[memTypeIndex] : createInfoFinal.pool->m_DedicatedAllocations[memTypeIndex];
- res = AllocateMemoryOfType(
+ VmaBlockVector& blockVector = createInfoFinal.pool->m_BlockVector;
+ return AllocateMemoryOfType(
createInfoFinal.pool,
vkMemReq.size,
vkMemReq.alignment,
- requiresDedicatedAllocation || prefersDedicatedAllocation,
+ prefersDedicatedAllocation,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
+ dedicatedBufferImageUsage,
createInfoFinal,
- memTypeIndex,
+ blockVector.GetMemoryTypeIndex(),
suballocType,
- dedicatedAllocations,
- *blockVector,
+ createInfoFinal.pool->m_DedicatedAllocations,
+ blockVector,
allocationCount,
pAllocations);
- // Allocation succeeded
- if(res == VK_SUCCESS)
- return VK_SUCCESS;
+ }
+ else
+ {
+ // Bit mask of memory Vulkan types acceptable for this allocation.
+ uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
+ uint32_t memTypeIndex = UINT32_MAX;
+ res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex);
+ // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
+ if(res != VK_SUCCESS)
+ return res;
+ do
+ {
+ VmaBlockVector* blockVector = m_pBlockVectors[memTypeIndex];
+ VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
+ res = AllocateMemoryOfType(
+ VK_NULL_HANDLE,
+ vkMemReq.size,
+ vkMemReq.alignment,
+ requiresDedicatedAllocation || prefersDedicatedAllocation,
+ dedicatedBuffer,
+ dedicatedImage,
+ dedicatedBufferImageUsage,
+ createInfoFinal,
+ memTypeIndex,
+ suballocType,
+ m_DedicatedAllocations[memTypeIndex],
+ *blockVector,
+ allocationCount,
+ pAllocations);
+ // Allocation succeeded
+ if(res == VK_SUCCESS)
+ return VK_SUCCESS;
- // Remove old memTypeIndex from list of possibilities.
- memoryTypeBits &= ~(1u << memTypeIndex);
- // Find alternative memTypeIndex.
- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfoFinal, &memTypeIndex);
- } while(res == VK_SUCCESS);
+ // Remove old memTypeIndex from list of possibilities.
+ memoryTypeBits &= ~(1u << memTypeIndex);
+ // Find alternative memTypeIndex.
+ res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex);
+ } while(res == VK_SUCCESS);
- // No other matching memory type index could be found.
- // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ // No other matching memory type index could be found.
+ // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ }
}
void VmaAllocator_T::FreeMemory(
@@ -15521,16 +14855,16 @@ void VmaAllocator_T::FreeMemory(
{
VmaBlockVector* pBlockVector = VMA_NULL;
VmaPool hPool = allocation->GetParentPool();
- const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
if(hPool != VK_NULL_HANDLE)
{
- pBlockVector = hPool->m_pBlockVectors[memTypeIndex];
+ pBlockVector = &hPool->m_BlockVector;
}
else
{
+ const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
pBlockVector = m_pBlockVectors[memTypeIndex];
+ VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
}
- VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
pBlockVector->Free(allocation);
}
break;
@@ -15540,29 +14874,25 @@ void VmaAllocator_T::FreeMemory(
default:
VMA_ASSERT(0);
}
-
- m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
- allocation->SetUserData(this, VMA_NULL);
- m_AllocationObjectAllocator.Free(allocation);
}
}
}
-void VmaAllocator_T::CalculateStats(VmaStats* pStats)
+void VmaAllocator_T::CalculateStatistics(VmaTotalStatistics* pStats)
{
// Initialize.
- VmaInitStatInfo(pStats->total);
- for(size_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i)
- VmaInitStatInfo(pStats->memoryType[i]);
- for(size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i)
- VmaInitStatInfo(pStats->memoryHeap[i]);
+ VmaClearDetailedStatistics(pStats->total);
+ for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i)
+ VmaClearDetailedStatistics(pStats->memoryType[i]);
+ for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i)
+ VmaClearDetailedStatistics(pStats->memoryHeap[i]);
// Process default pools.
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex];
if (pBlockVector != VMA_NULL)
- pBlockVector->AddStats(pStats);
+ pBlockVector->AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
}
// Process custom pools.
@@ -15570,33 +14900,34 @@ void VmaAllocator_T::CalculateStats(VmaStats* pStats)
VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
{
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
- if (pool->m_pBlockVectors[memTypeIndex])
- {
- VmaBlockVector& blockVector = *pool->m_pBlockVectors[memTypeIndex];
- blockVector.AddStats(pStats);
- const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
- const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
- pool->m_DedicatedAllocations[memTypeIndex].AddStats(pStats, memTypeIndex, memHeapIndex);
- }
- }
+ VmaBlockVector& blockVector = pool->m_BlockVector;
+ const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
+ blockVector.AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
+ pool->m_DedicatedAllocations.AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
}
}
// Process dedicated allocations.
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
- m_DedicatedAllocations[memTypeIndex].AddStats(pStats, memTypeIndex, memHeapIndex);
+ m_DedicatedAllocations[memTypeIndex].AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
+ }
+
+ // Sum from memory types to memory heaps.
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
+ {
+ const uint32_t memHeapIndex = m_MemProps.memoryTypes[memTypeIndex].heapIndex;
+ VmaAddDetailedStatistics(pStats->memoryHeap[memHeapIndex], pStats->memoryType[memTypeIndex]);
}
- // Postprocess.
- VmaPostprocessCalcStatInfo(pStats->total);
- for(size_t i = 0; i < GetMemoryTypeCount(); ++i)
- VmaPostprocessCalcStatInfo(pStats->memoryType[i]);
- for(size_t i = 0; i < GetMemoryHeapCount(); ++i)
- VmaPostprocessCalcStatInfo(pStats->memoryHeap[i]);
+ // Sum from memory heaps to total.
+ for(uint32_t memHeapIndex = 0; memHeapIndex < GetMemoryHeapCount(); ++memHeapIndex)
+ VmaAddDetailedStatistics(pStats->total, pStats->memoryHeap[memHeapIndex]);
+
+ VMA_ASSERT(pStats->total.statistics.allocationCount == 0 ||
+ pStats->total.allocationSizeMax >= pStats->total.allocationSizeMin);
+ VMA_ASSERT(pStats->total.unusedRangeCount == 0 ||
+ pStats->total.unusedRangeSizeMax >= pStats->total.unusedRangeSizeMin);
}
void VmaAllocator_T::GetHeapBudgets(VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount)
@@ -15611,13 +14942,15 @@ void VmaAllocator_T::GetHeapBudgets(VmaBudget* outBudgets, uint32_t firstHeap, u
{
const uint32_t heapIndex = firstHeap + i;
- outBudgets->blockBytes = m_Budget.m_BlockBytes[heapIndex];
- outBudgets->allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
+ outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex];
+ outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex];
+ outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex];
+ outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
- if(m_Budget.m_VulkanUsage[heapIndex] + outBudgets->blockBytes > m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])
+ if(m_Budget.m_VulkanUsage[heapIndex] + outBudgets->statistics.blockBytes > m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])
{
outBudgets->usage = m_Budget.m_VulkanUsage[heapIndex] +
- outBudgets->blockBytes - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];
+ outBudgets->statistics.blockBytes - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];
}
else
{
@@ -15642,66 +14975,17 @@ void VmaAllocator_T::GetHeapBudgets(VmaBudget* outBudgets, uint32_t firstHeap, u
{
const uint32_t heapIndex = firstHeap + i;
- outBudgets->blockBytes = m_Budget.m_BlockBytes[heapIndex];
- outBudgets->allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
+ outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex];
+ outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex];
+ outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex];
+ outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
- outBudgets->usage = outBudgets->blockBytes;
+ outBudgets->usage = outBudgets->statistics.blockBytes;
outBudgets->budget = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; // 80% heuristics.
}
}
}
-VkResult VmaAllocator_T::DefragmentationBegin(
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext* pContext)
-{
- if(info.pAllocationsChanged != VMA_NULL)
- {
- memset(info.pAllocationsChanged, 0, info.allocationCount * sizeof(VkBool32));
- }
-
- *pContext = vma_new(this, VmaDefragmentationContext_T)(
- this, info.flags, pStats);
-
- (*pContext)->AddPools(info.poolCount, info.pPools);
- (*pContext)->AddAllocations(
- info.allocationCount, info.pAllocations, info.pAllocationsChanged);
-
- VkResult res = (*pContext)->Defragment(
- info.maxCpuBytesToMove, info.maxCpuAllocationsToMove,
- info.maxGpuBytesToMove, info.maxGpuAllocationsToMove,
- info.commandBuffer, pStats, info.flags);
-
- if(res != VK_NOT_READY)
- {
- vma_delete(this, *pContext);
- *pContext = VMA_NULL;
- }
-
- return res;
-}
-
-VkResult VmaAllocator_T::DefragmentationEnd(
- VmaDefragmentationContext context)
-{
- vma_delete(this, context);
- return VK_SUCCESS;
-}
-
-VkResult VmaAllocator_T::DefragmentationPassBegin(
- VmaDefragmentationPassInfo* pInfo,
- VmaDefragmentationContext context)
-{
- return context->DefragmentPassBegin(pInfo);
-}
-
-VkResult VmaAllocator_T::DefragmentationPassEnd(
- VmaDefragmentationContext context)
-{
- return context->DefragmentPassEnd();
-}
-
void VmaAllocator_T::GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo)
{
pAllocationInfo->memoryType = hAllocation->GetMemoryTypeIndex();
@@ -15732,26 +15016,27 @@ VkResult VmaAllocator_T::CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPoo
{
return VK_ERROR_INITIALIZATION_FAILED;
}
+ // Memory type index out of range or forbidden.
+ if(pCreateInfo->memoryTypeIndex >= GetMemoryTypeCount() ||
+ ((1u << pCreateInfo->memoryTypeIndex) & m_GlobalMemoryTypeBits) == 0)
+ {
+ return VK_ERROR_FEATURE_NOT_PRESENT;
+ }
if(newCreateInfo.minAllocationAlignment > 0)
{
VMA_ASSERT(VmaIsPow2(newCreateInfo.minAllocationAlignment));
}
- *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo);
+ const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(newCreateInfo.memoryTypeIndex);
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
+ *pPool = vma_new(this, VmaPool_T)(this, newCreateInfo, preferredBlockSize);
+
+ VkResult res = (*pPool)->m_BlockVector.CreateMinBlocks();
+ if(res != VK_SUCCESS)
{
- // Create only supported types
- if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
- {
- VkResult res = (*pPool)->m_pBlockVectors[memTypeIndex]->CreateMinBlocks();
- if(res != VK_SUCCESS)
- {
- vma_delete(this, *pPool);
- *pPool = VMA_NULL;
- return res;
- }
- }
+ vma_delete(this, *pPool);
+ *pPool = VMA_NULL;
+ return res;
}
// Add to m_Pools.
@@ -15775,22 +15060,18 @@ void VmaAllocator_T::DestroyPool(VmaPool pool)
vma_delete(this, pool);
}
-void VmaAllocator_T::GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats)
+void VmaAllocator_T::GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats)
{
- pPoolStats->size = 0;
- pPoolStats->unusedSize = 0;
- pPoolStats->allocationCount = 0;
- pPoolStats->unusedRangeCount = 0;
- pPoolStats->blockCount = 0;
+ VmaClearStatistics(*pPoolStats);
+ pool->m_BlockVector.AddStatistics(*pPoolStats);
+ pool->m_DedicatedAllocations.AddStatistics(*pPoolStats);
+}
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
- if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
- {
- pool->m_pBlockVectors[memTypeIndex]->AddPoolStats(pPoolStats);
- pool->m_DedicatedAllocations[memTypeIndex].AddPoolStats(pPoolStats);
- }
- }
+void VmaAllocator_T::CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats)
+{
+ VmaClearDetailedStatistics(*pPoolStats);
+ pool->m_BlockVector.AddDetailedStatistics(*pPoolStats);
+ pool->m_DedicatedAllocations.AddDetailedStatistics(*pPoolStats);
}
void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
@@ -15807,13 +15088,7 @@ void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
VkResult VmaAllocator_T::CheckPoolCorruption(VmaPool hPool)
{
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
- if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
- {
- return hPool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
- }
- }
+ return hPool->m_BlockVector.CheckCorruption();
}
VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
@@ -15845,21 +15120,18 @@ VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
{
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
+ if(((1u << pool->m_BlockVector.GetMemoryTypeIndex()) & memoryTypeBits) != 0)
{
- if(pool->m_pBlockVectors[memTypeIndex] && ((1u << memTypeIndex) & memoryTypeBits) != 0)
+ VkResult localRes = pool->m_BlockVector.CheckCorruption();
+ switch(localRes)
{
- VkResult localRes = pool->m_pBlockVectors[memTypeIndex]->CheckCorruption();
- switch(localRes)
- {
- case VK_ERROR_FEATURE_NOT_PRESENT:
- break;
- case VK_SUCCESS:
- finalRes = VK_SUCCESS;
- break;
- default:
- return localRes;
- }
+ case VK_ERROR_FEATURE_NOT_PRESENT:
+ break;
+ case VK_SUCCESS:
+ finalRes = VK_SUCCESS;
+ break;
+ default:
+ return localRes;
}
}
}
@@ -15903,6 +15175,7 @@ VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAlloc
{
m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo->allocationSize;
}
+ ++m_Budget.m_BlockCount[heapIndex];
// VULKAN CALL vkAllocateMemory.
VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);
@@ -15923,6 +15196,7 @@ VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAlloc
}
else
{
+ --m_Budget.m_BlockCount[heapIndex];
m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo->allocationSize;
}
@@ -15940,7 +15214,9 @@ void VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, Vk
// VULKAN CALL vkFreeMemory.
(*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());
- m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;
+ const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memoryType);
+ --m_Budget.m_BlockCount[heapIndex];
+ m_Budget.m_BlockBytes[heapIndex] -= size;
--m_DeviceMemoryCount;
}
@@ -16181,7 +15457,7 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
else
{
// Custom pool
- parentPool->m_DedicatedAllocations[memTypeIndex].Unregister(allocation);
+ parentPool->m_DedicatedAllocations.Unregister(allocation);
}
VkDeviceMemory hMemory = allocation->GetMemory();
@@ -16198,6 +15474,9 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
FreeVulkanMemory(memTypeIndex, allocation->GetSize(), hMemory);
+ m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
+ m_AllocationObjectAllocator.Free(allocation);
+
VMA_DEBUG_LOG(" Freed DedicatedMemory MemoryTypeIndex=%u", memTypeIndex);
}
@@ -16456,18 +15735,12 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
json.EndString();
json.BeginObject();
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
- if (pool->m_pBlockVectors[memTypeIndex])
- {
- pool->m_pBlockVectors[memTypeIndex]->PrintDetailedMap(json);
- }
+ pool->m_BlockVector.PrintDetailedMap(json);
- if (!pool->m_DedicatedAllocations[memTypeIndex].IsEmpty())
- {
- json.WriteString("DedicatedAllocations");
- pool->m_DedicatedAllocations->BuildStatsString(json);
- }
+ if (!pool->m_DedicatedAllocations.IsEmpty())
+ {
+ json.WriteString("DedicatedAllocations");
+ pool->m_DedicatedAllocations.BuildStatsString(json);
}
json.EndObject();
}
@@ -16554,13 +15827,13 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex(
allocator->SetCurrentFrameIndex(frameIndex);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics(
VmaAllocator allocator,
- VmaStats* pStats)
+ VmaTotalStatistics* pStats)
{
VMA_ASSERT(allocator && pStats);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- allocator->CalculateStats(pStats);
+ allocator->CalculateStatistics(pStats);
}
VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets(
@@ -16590,11 +15863,11 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
VmaBudget budgets[VK_MAX_MEMORY_HEAPS];
allocator->GetHeapBudgets(budgets, 0, allocator->GetMemoryHeapCount());
- VmaStats stats;
- allocator->CalculateStats(&stats);
+ VmaTotalStatistics stats;
+ allocator->CalculateStatistics(&stats);
json.WriteString("Total");
- VmaPrintStatInfo(json, stats.total);
+ VmaPrintDetailedStatistics(json, stats.total);
for(uint32_t heapIndex = 0; heapIndex < allocator->GetMemoryHeapCount(); ++heapIndex)
{
@@ -16618,9 +15891,13 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
json.BeginObject();
{
json.WriteString("BlockBytes");
- json.WriteNumber(budgets[heapIndex].blockBytes);
+ json.WriteNumber(budgets[heapIndex].statistics.blockBytes);
json.WriteString("AllocationBytes");
- json.WriteNumber(budgets[heapIndex].allocationBytes);
+ json.WriteNumber(budgets[heapIndex].statistics.allocationBytes);
+ json.WriteString("BlockCount");
+ json.WriteNumber(budgets[heapIndex].statistics.blockCount);
+ json.WriteString("AllocationCount");
+ json.WriteNumber(budgets[heapIndex].statistics.allocationCount);
json.WriteString("Usage");
json.WriteNumber(budgets[heapIndex].usage);
json.WriteString("Budget");
@@ -16628,10 +15905,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
}
json.EndObject();
- if(stats.memoryHeap[heapIndex].blockCount > 0)
+ if(stats.memoryHeap[heapIndex].statistics.blockCount > 0)
{
json.WriteString("Stats");
- VmaPrintStatInfo(json, stats.memoryHeap[heapIndex]);
+ VmaPrintDetailedStatistics(json, stats.memoryHeap[heapIndex]);
}
for(uint32_t typeIndex = 0; typeIndex < allocator->GetMemoryTypeCount(); ++typeIndex)
@@ -16685,10 +15962,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
#endif // #if VK_AMD_device_coherent_memory
json.EndArray();
- if(stats.memoryType[typeIndex].blockCount > 0)
+ if(stats.memoryType[typeIndex].statistics.blockCount > 0)
{
json.WriteString("Stats");
- VmaPrintStatInfo(json, stats.memoryType[typeIndex]);
+ VmaPrintDetailedStatistics(json, stats.memoryType[typeIndex]);
}
json.EndObject();
@@ -16734,91 +16011,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex(
VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
- memoryTypeBits &= allocator->GetGlobalMemoryTypeBits();
-
- if(pAllocationCreateInfo->memoryTypeBits != 0)
- {
- memoryTypeBits &= pAllocationCreateInfo->memoryTypeBits;
- }
-
- uint32_t requiredFlags = pAllocationCreateInfo->requiredFlags;
- uint32_t preferredFlags = pAllocationCreateInfo->preferredFlags;
- uint32_t notPreferredFlags = 0;
-
- // Convert usage to requiredFlags and preferredFlags.
- switch(pAllocationCreateInfo->usage)
- {
- case VMA_MEMORY_USAGE_UNKNOWN:
- break;
- case VMA_MEMORY_USAGE_GPU_ONLY:
- if(!allocator->IsIntegratedGpu() || (preferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
- {
- preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- }
- break;
- case VMA_MEMORY_USAGE_CPU_ONLY:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
- break;
- case VMA_MEMORY_USAGE_CPU_TO_GPU:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
- if(!allocator->IsIntegratedGpu() || (preferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
- {
- preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- }
- break;
- case VMA_MEMORY_USAGE_GPU_TO_CPU:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
- preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
- break;
- case VMA_MEMORY_USAGE_CPU_COPY:
- notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- break;
- case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
- requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
- break;
- default:
- VMA_ASSERT(0);
- break;
- }
-
- // Avoid DEVICE_COHERENT unless explicitly requested.
- if(((pAllocationCreateInfo->requiredFlags | pAllocationCreateInfo->preferredFlags) &
- (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)
- {
- notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY;
- }
-
- *pMemoryTypeIndex = UINT32_MAX;
- uint32_t minCost = UINT32_MAX;
- for(uint32_t memTypeIndex = 0, memTypeBit = 1;
- memTypeIndex < allocator->GetMemoryTypeCount();
- ++memTypeIndex, memTypeBit <<= 1)
- {
- // This memory type is acceptable according to memoryTypeBits bitmask.
- if((memTypeBit & memoryTypeBits) != 0)
- {
- const VkMemoryPropertyFlags currFlags =
- allocator->m_MemProps.memoryTypes[memTypeIndex].propertyFlags;
- // This memory type contains requiredFlags.
- if((requiredFlags & ~currFlags) == 0)
- {
- // Calculate cost as number of bits from preferredFlags not present in this memory type.
- uint32_t currCost = VmaCountBitsSet(preferredFlags & ~currFlags) +
- VmaCountBitsSet(currFlags & notPreferredFlags);
- // Remember memory type with lowest cost.
- if(currCost < minCost)
- {
- *pMemoryTypeIndex = memTypeIndex;
- if(currCost == 0)
- {
- return VK_SUCCESS;
- }
- minCost = currCost;
- }
- }
- }
- }
- return (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;
+ return allocator->FindMemoryTypeIndex(memoryTypeBits, pAllocationCreateInfo, UINT32_MAX, pMemoryTypeIndex);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
@@ -16833,24 +16026,40 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
const VkDevice hDev = allocator->m_hDevice;
- VkBuffer hBuffer = VK_NULL_HANDLE;
const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions();
- VkResult res = funcs->vkCreateBuffer(
- hDev, pBufferCreateInfo, allocator->GetAllocationCallbacks(), &hBuffer);
- if(res == VK_SUCCESS)
+ VkResult res;
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(funcs->vkGetDeviceBufferMemoryRequirements)
{
- VkMemoryRequirements memReq = {};
- funcs->vkGetBufferMemoryRequirements(
- hDev, hBuffer, &memReq);
+ // Can query straight from VkBufferCreateInfo :)
+ VkDeviceBufferMemoryRequirements devBufMemReq = {VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS};
+ devBufMemReq.pCreateInfo = pBufferCreateInfo;
- res = vmaFindMemoryTypeIndex(
- allocator,
- memReq.memoryTypeBits,
- pAllocationCreateInfo,
- pMemoryTypeIndex);
+ VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};
+ (*funcs->vkGetDeviceBufferMemoryRequirements)(hDev, &devBufMemReq, &memReq);
- funcs->vkDestroyBuffer(
- hDev, hBuffer, allocator->GetAllocationCallbacks());
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex);
+ }
+ else
+#endif // #if VMA_VULKAN_VERSION >= 1003000
+ {
+ // Must create a dummy buffer to query :(
+ VkBuffer hBuffer = VK_NULL_HANDLE;
+ res = funcs->vkCreateBuffer(
+ hDev, pBufferCreateInfo, allocator->GetAllocationCallbacks(), &hBuffer);
+ if(res == VK_SUCCESS)
+ {
+ VkMemoryRequirements memReq = {};
+ funcs->vkGetBufferMemoryRequirements(hDev, hBuffer, &memReq);
+
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex);
+
+ funcs->vkDestroyBuffer(
+ hDev, hBuffer, allocator->GetAllocationCallbacks());
+ }
}
return res;
}
@@ -16867,24 +16076,42 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo(
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
const VkDevice hDev = allocator->m_hDevice;
- VkImage hImage = VK_NULL_HANDLE;
const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions();
- VkResult res = funcs->vkCreateImage(
- hDev, pImageCreateInfo, allocator->GetAllocationCallbacks(), &hImage);
- if(res == VK_SUCCESS)
+ VkResult res;
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(funcs->vkGetDeviceImageMemoryRequirements)
+ {
+ // Can query straight from VkImageCreateInfo :)
+ VkDeviceImageMemoryRequirements devImgMemReq = {VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS};
+ devImgMemReq.pCreateInfo = pImageCreateInfo;
+ VMA_ASSERT(pImageCreateInfo->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY && (pImageCreateInfo->flags & VK_IMAGE_CREATE_DISJOINT_BIT_COPY) == 0 &&
+ "Cannot use this VkImageCreateInfo with vmaFindMemoryTypeIndexForImageInfo as I don't know what to pass as VkDeviceImageMemoryRequirements::planeAspect.");
+
+ VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};
+ (*funcs->vkGetDeviceImageMemoryRequirements)(hDev, &devImgMemReq, &memReq);
+
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex);
+ }
+ else
+#endif // #if VMA_VULKAN_VERSION >= 1003000
{
- VkMemoryRequirements memReq = {};
- funcs->vkGetImageMemoryRequirements(
- hDev, hImage, &memReq);
+ // Must create a dummy image to query :(
+ VkImage hImage = VK_NULL_HANDLE;
+ res = funcs->vkCreateImage(
+ hDev, pImageCreateInfo, allocator->GetAllocationCallbacks(), &hImage);
+ if(res == VK_SUCCESS)
+ {
+ VkMemoryRequirements memReq = {};
+ funcs->vkGetImageMemoryRequirements(hDev, hImage, &memReq);
- res = vmaFindMemoryTypeIndex(
- allocator,
- memReq.memoryTypeBits,
- pAllocationCreateInfo,
- pMemoryTypeIndex);
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex);
- funcs->vkDestroyImage(
- hDev, hImage, allocator->GetAllocationCallbacks());
+ funcs->vkDestroyImage(
+ hDev, hImage, allocator->GetAllocationCallbacks());
+ }
}
return res;
}
@@ -16921,16 +16148,28 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool(
allocator->DestroyPool(pool);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics(
+ VmaAllocator allocator,
+ VmaPool pool,
+ VmaStatistics* pPoolStats)
+{
+ VMA_ASSERT(allocator && pool && pPoolStats);
+
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
+
+ allocator->GetPoolStatistics(pool, pPoolStats);
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics(
VmaAllocator allocator,
VmaPool pool,
- VmaPoolStats* pPoolStats)
+ VmaDetailedStatistics* pPoolStats)
{
VMA_ASSERT(allocator && pool && pPoolStats);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- allocator->GetPoolStats(pool, pPoolStats);
+ allocator->CalculatePoolStatistics(pool, pPoolStats);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(VmaAllocator allocator, VmaPool pool)
@@ -16990,8 +16229,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory(
false, // requiresDedicatedAllocation
false, // prefersDedicatedAllocation
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_UNKNOWN,
1, // allocationCount
@@ -17029,8 +16268,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryPages(
false, // requiresDedicatedAllocation
false, // prefersDedicatedAllocation
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_UNKNOWN,
allocationCount,
@@ -17072,8 +16311,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForBuffer(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
buffer, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_BUFFER,
1, // allocationCount
@@ -17111,8 +16350,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForImage(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
image, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,
1, // allocationCount
@@ -17319,123 +16558,64 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(
return allocator->CheckCorruption(memoryTypeBits);
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragment(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation(
VmaAllocator allocator,
- const VmaAllocation* pAllocations,
- size_t allocationCount,
- VkBool32* pAllocationsChanged,
- const VmaDefragmentationInfo *pDefragmentationInfo,
- VmaDefragmentationStats* pDefragmentationStats)
-{
- // Deprecated interface, reimplemented using new one.
-
- VmaDefragmentationInfo2 info2 = {};
- info2.allocationCount = (uint32_t)allocationCount;
- info2.pAllocations = pAllocations;
- info2.pAllocationsChanged = pAllocationsChanged;
- if(pDefragmentationInfo != VMA_NULL)
- {
- info2.maxCpuAllocationsToMove = pDefragmentationInfo->maxAllocationsToMove;
- info2.maxCpuBytesToMove = pDefragmentationInfo->maxBytesToMove;
- }
- else
- {
- info2.maxCpuAllocationsToMove = UINT32_MAX;
- info2.maxCpuBytesToMove = VK_WHOLE_SIZE;
- }
- // info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.
-
- VmaDefragmentationContext ctx;
- VkResult res = vmaDefragmentationBegin(allocator, &info2, pDefragmentationStats, &ctx);
- if(res == VK_NOT_READY)
- {
- res = vmaDefragmentationEnd( allocator, ctx);
- }
- return res;
-}
-
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationBegin(
- VmaAllocator allocator,
- const VmaDefragmentationInfo2* pInfo,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext *pContext)
+ const VmaDefragmentationInfo* pInfo,
+ VmaDefragmentationContext* pContext)
{
VMA_ASSERT(allocator && pInfo && pContext);
- // Degenerate case: Nothing to defragment.
- if(pInfo->allocationCount == 0 && pInfo->poolCount == 0)
- {
- return VK_SUCCESS;
- }
-
- VMA_ASSERT(pInfo->allocationCount == 0 || pInfo->pAllocations != VMA_NULL);
- VMA_ASSERT(pInfo->poolCount == 0 || pInfo->pPools != VMA_NULL);
- VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo->allocationCount, pInfo->pAllocations));
- VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo->poolCount, pInfo->pPools));
-
- VMA_DEBUG_LOG("vmaDefragmentationBegin");
+ VMA_DEBUG_LOG("vmaBeginDefragmentation");
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- VkResult res = allocator->DefragmentationBegin(*pInfo, pStats, pContext);
-
- return res;
+ *pContext = vma_new(allocator, VmaDefragmentationContext_T)(allocator, *pInfo);
+ return VK_SUCCESS;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationEnd(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentation(
VmaAllocator allocator,
- VmaDefragmentationContext context)
+ VmaDefragmentationContext context,
+ VmaDefragmentationStats* pStats)
{
- VMA_ASSERT(allocator);
+ VMA_ASSERT(allocator && context);
- VMA_DEBUG_LOG("vmaDefragmentationEnd");
+ VMA_DEBUG_LOG("vmaEndDefragmentation");
- if(context != VK_NULL_HANDLE)
- {
- VMA_DEBUG_GLOBAL_MUTEX_LOCK
- return allocator->DefragmentationEnd(context);
- }
- else
- {
- return VK_SUCCESS;
- }
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
+
+ if (pStats)
+ context->GetStats(*pStats);
+ vma_delete(allocator, context);
+ return VK_SUCCESS;
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass(
- VmaAllocator allocator,
- VmaDefragmentationContext context,
- VmaDefragmentationPassInfo* pInfo
- )
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo)
{
- VMA_ASSERT(allocator);
- VMA_ASSERT(pInfo);
+ VMA_ASSERT(context && pPassInfo);
VMA_DEBUG_LOG("vmaBeginDefragmentationPass");
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- if(context == VK_NULL_HANDLE)
- {
- pInfo->moveCount = 0;
- return VK_SUCCESS;
- }
-
- return allocator->DefragmentationPassBegin(pInfo, context);
+ return context->DefragmentPassBegin(*pPassInfo);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass(
- VmaAllocator allocator,
- VmaDefragmentationContext context)
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo)
{
- VMA_ASSERT(allocator);
+ VMA_ASSERT(context && pPassInfo);
VMA_DEBUG_LOG("vmaEndDefragmentationPass");
- VMA_DEBUG_GLOBAL_MUTEX_LOCK
- if(context == VK_NULL_HANDLE)
- return VK_SUCCESS;
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
- return allocator->DefragmentationPassEnd(context);
+ return context->DefragmentPassEnd(*pPassInfo);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory(
@@ -17547,8 +16727,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
*pBuffer, // dedicatedBuffer
- pBufferCreateInfo->usage, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ pBufferCreateInfo->usage, // dedicatedBufferImageUsage
*pAllocationCreateInfo,
VMA_SUBALLOCATION_TYPE_BUFFER,
1, // allocationCount
@@ -17642,8 +16822,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBufferWithAlignment(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
*pBuffer, // dedicatedBuffer
- pBufferCreateInfo->usage, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ pBufferCreateInfo->usage, // dedicatedBufferImageUsage
*pAllocationCreateInfo,
VMA_SUBALLOCATION_TYPE_BUFFER,
1, // allocationCount
@@ -17763,8 +16943,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
*pImage, // dedicatedImage
+ pImageCreateInfo->usage, // dedicatedBufferImageUsage
*pAllocationCreateInfo,
suballocType,
1, // allocationCount
@@ -17917,13 +17097,22 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock
virtualBlock->SetAllocationUserData(allocation, pUserData);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStats(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VmaStatInfo* VMA_NOT_NULL pStatInfo)
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaStatistics* VMA_NOT_NULL pStats)
{
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStatInfo != VMA_NULL);
- VMA_DEBUG_LOG("vmaCalculateVirtualBlockStats");
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL);
+ VMA_DEBUG_LOG("vmaGetVirtualBlockStatistics");
VMA_DEBUG_GLOBAL_MUTEX_LOCK;
- virtualBlock->CalculateStats(*pStatInfo);
+ virtualBlock->GetStatistics(*pStats);
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaDetailedStatistics* VMA_NOT_NULL pStats)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL);
+ VMA_DEBUG_LOG("vmaCalculateVirtualBlockStatistics");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->CalculateDetailedStatistics(*pStats);
}
#if VMA_STATS_STRING_ENABLED
@@ -18054,7 +17243,7 @@ bufferInfo.size = 65536;
bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
VmaAllocationCreateInfo allocInfo = {};
-allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
+allocInfo.usage = VMA_MEMORY_USAGE_AUTO;
VkBuffer buffer;
VmaAllocation allocation;
@@ -18078,8 +17267,8 @@ appropriate members of VmaAllocationCreateInfo structure, as described below.
You can also combine multiple methods.
-# If you just want to find memory type index that meets your requirements, you
- can use function: vmaFindMemoryTypeIndex(), vmaFindMemoryTypeIndexForBufferInfo(),
- vmaFindMemoryTypeIndexForImageInfo().
+ can use function: vmaFindMemoryTypeIndexForBufferInfo(),
+ vmaFindMemoryTypeIndexForImageInfo(), vmaFindMemoryTypeIndex().
-# If you want to allocate a region of device memory without association with any
specific image or buffer, you can use function vmaAllocateMemory(). Usage of
this function is not recommended and usually not needed.
@@ -18090,9 +17279,10 @@ You can also combine multiple methods.
vmaAllocateMemoryForBuffer(), vmaAllocateMemoryForImage().
For binding you should use functions: vmaBindBufferMemory(), vmaBindImageMemory()
or their extended versions: vmaBindBufferMemory2(), vmaBindImageMemory2().
--# If you want to create a buffer or an image, allocate memory for it and bind
+-# **This is the easiest and recommended way to use this library:**
+ If you want to create a buffer or an image, allocate memory for it and bind
them together, all in one call, you can use function vmaCreateBuffer(),
- vmaCreateImage(). This is the easiest and recommended way to use this library.
+ vmaCreateImage().
When using 3. or 4., the library internally queries Vulkan for memory types
supported for that buffer or image (function `vkGetBufferMemoryRequirements()`)
@@ -18110,11 +17300,12 @@ It is valid, although not very useful.
The easiest way to specify memory requirements is to fill member
VmaAllocationCreateInfo::usage using one of the values of enum #VmaMemoryUsage.
It defines high level, common usage types.
-For more details, see description of this enum.
+Since version 3 of the library, it is recommended to use #VMA_MEMORY_USAGE_AUTO to let it select best memory type for your resource automatically.
For example, if you want to create a uniform buffer that will be filled using
-transfer only once or infrequently and used for rendering every frame, you can
-do it using following code:
+transfer only once or infrequently and then used for rendering every frame as a uniform buffer, you can
+do it using following code. The buffer will most likely end up in a memory type with
+`VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT` to be fast to access by the GPU device.
\code
VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
@@ -18122,13 +17313,56 @@ bufferInfo.size = 65536;
bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
VmaAllocationCreateInfo allocInfo = {};
-allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
+allocInfo.usage = VMA_MEMORY_USAGE_AUTO;
VkBuffer buffer;
VmaAllocation allocation;
vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
\endcode
+If you have a preference for putting the resource in GPU (device) memory or CPU (host) memory
+on systems with discrete graphics card that have the memories separate, you can use
+#VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST.
+
+When using `VMA_MEMORY_USAGE_AUTO*` while you want to map the allocated memory,
+you also need to specify one of the host access flags:
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+This will help the library decide about preferred memory type to ensure it has `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`
+so you can map it.
+
+For example, a staging buffer that will be filled via mapped pointer and then
+used as a source of transfer to the buffer decribed previously can be created like this.
+It will likely and up in a memory type that is `HOST_VISIBLE` and `HOST_COHERENT`
+but not `HOST_CACHED` (meaning uncached, write-combined) and not `DEVICE_LOCAL` (meaning system RAM).
+
+\code
+VkBufferCreateInfo stagingBufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+stagingBufferInfo.size = 65536;
+stagingBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+VmaAllocationCreateInfo stagingAllocInfo = {};
+stagingAllocInfo.usage = VMA_MEMORY_USAGE_AUTO;
+stagingAllocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT;
+
+VkBuffer stagingBuffer;
+VmaAllocation stagingAllocation;
+vmaCreateBuffer(allocator, &stagingBufferInfo, &stagingAllocInfo, &stagingBuffer, &stagingAllocation, nullptr);
+\endcode
+
+For more examples of creating different kinds of resources, see chapter \ref usage_patterns.
+
+Usage values `VMA_MEMORY_USAGE_AUTO*` are legal to use only when the library knows
+about the resource being created by having `VkBufferCreateInfo` / `VkImageCreateInfo` passed,
+so they work with functions like: vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo() etc.
+If you allocate raw memory using function vmaAllocateMemory(), you have to use other means of selecting
+memory type, as decribed below.
+
+\note
+Old usage values (`VMA_MEMORY_USAGE_GPU_ONLY`, `VMA_MEMORY_USAGE_CPU_ONLY`,
+`VMA_MEMORY_USAGE_CPU_TO_GPU`, `VMA_MEMORY_USAGE_GPU_TO_CPU`, `VMA_MEMORY_USAGE_CPU_COPY`)
+are still available and work same way as in previous versions of the library
+for backward compatibility, but they are not recommended.
+
\section choosing_memory_type_required_preferred_flags Required and preferred flags
You can specify more detailed requirements by filling members
@@ -18142,7 +17376,7 @@ use following code:
VmaAllocationCreateInfo allocInfo = {};
allocInfo.requiredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
allocInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
-allocInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
+allocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT;
VkBuffer buffer;
VmaAllocation allocation;
@@ -18152,8 +17386,8 @@ vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullpt
A memory type is chosen that has all the required flags and as many preferred
flags set as possible.
-If you use VmaAllocationCreateInfo::usage, it is just internally converted to
-a set of required and preferred flags.
+Value passed in VmaAllocationCreateInfo::usage is internally converted to a set of required and preferred flags,
+plus some extra "magic" (heuristics).
\section choosing_memory_type_explicit_memory_types Explicit memory types
@@ -18220,6 +17454,13 @@ Mapping the same `VkDeviceMemory` block multiple times is illegal - only one map
This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan.
Because of this, Vulkan Memory Allocator provides following facilities:
+\note If you want to be able to map an allocation, you need to specify one of the flags
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+in VmaAllocationCreateInfo::flags. These flags are required for an allocation to be mappable
+when using #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` enum values.
+For other usage values they are ignored and every such allocation made in `HOST_VISIBLE` memory type is mappable,
+but they can still be used for consistency.
+
\section memory_mapping_mapping_functions Mapping functions
The library provides following functions for mapping of a specific #VmaAllocation: vmaMapMemory(), vmaUnmapMemory().
@@ -18232,16 +17473,15 @@ Example:
\code
// Having these objects initialized:
-
struct ConstantBuffer
{
...
};
-ConstantBuffer constantBufferData;
+ConstantBuffer constantBufferData = ...
-VmaAllocator allocator;
-VkBuffer constantBuffer;
-VmaAllocation constantBufferAllocation;
+VmaAllocator allocator = ...
+VkBuffer constantBuffer = ...
+VmaAllocation constantBufferAllocation = ...
// You can map and fill your buffer using following code:
@@ -18278,8 +17518,9 @@ bufCreateInfo.size = sizeof(ConstantBuffer);
bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_CPU_ONLY;
-allocCreateInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
VkBuffer buf;
VmaAllocation alloc;
@@ -18290,18 +17531,12 @@ vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allo
memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));
\endcode
-There are some exceptions though, when you should consider mapping memory only for a short period of time:
-
-- When operating system is Windows 7 or 8.x (Windows 10 is not affected because it uses WDDM2),
- device is discrete AMD GPU,
- and memory type is the special 256 MiB pool of `DEVICE_LOCAL + HOST_VISIBLE` memory
- (selected when you use #VMA_MEMORY_USAGE_CPU_TO_GPU),
- then whenever a memory block allocated from this memory type stays mapped
- for the time of any call to `vkQueueSubmit()` or `vkQueuePresentKHR()`, this
- block is migrated by WDDM to system RAM, which degrades performance. It doesn't
- matter if that particular memory block is actually used by the command buffer
- being submitted.
-- Keeping many large memory blocks mapped may impact performance or stability of some debugging tools.
+\note #VMA_ALLOCATION_CREATE_MAPPED_BIT by itself doesn't guarantee that the allocation will end up
+in a mappable memory type.
+For this, you need to also specify #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+#VMA_ALLOCATION_CREATE_MAPPED_BIT only guarantees that if the memory is `HOST_VISIBLE`, the allocation will be mapped on creation.
+For an example of how to make use of this fact, see section \ref usage_patterns_advanced_data_uploading.
\section memory_mapping_cache_control Cache flush and invalidate
@@ -18322,86 +17557,9 @@ In any memory type that is `HOST_VISIBLE` but not `HOST_COHERENT`, all allocatio
within blocks are aligned to this value, so their offsets are always multiply of
`nonCoherentAtomSize` and two different allocations never share same "line" of this size.
-Please note that memory allocated with #VMA_MEMORY_USAGE_CPU_ONLY is guaranteed to be `HOST_COHERENT`.
-
-Also, Windows drivers from all 3 **PC** GPU vendors (AMD, Intel, NVIDIA)
+Also, Windows drivers from all 3 PC GPU vendors (AMD, Intel, NVIDIA)
currently provide `HOST_COHERENT` flag on all memory types that are
-`HOST_VISIBLE`, so on this platform you may not need to bother.
-
-\section memory_mapping_finding_if_memory_mappable Finding out if memory is mappable
-
-It may happen that your allocation ends up in memory that is `HOST_VISIBLE` (available for mapping)
-despite it wasn't explicitly requested.
-For example, application may work on integrated graphics with unified memory (like Intel) or
-allocation from video memory might have failed, so the library chose system memory as fallback.
-
-You can detect this case and map such allocation to access its memory on CPU directly,
-instead of launching a transfer operation.
-In order to do that: call vmaGetAllocationMemoryProperties()
-and look for `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` flag.
-
-\code
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = sizeof(ConstantBuffer);
-bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-
-VkBuffer buf;
-VmaAllocation alloc;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, nullptr);
-
-VkMemoryPropertyFlags memFlags;
-vmaGetAllocationMemoryProperties(allocator, alloc, &memFlags);
-if((memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)
-{
- // Allocation ended up in mappable memory. You can map it and access it directly.
- void* mappedData;
- vmaMapMemory(allocator, alloc, &mappedData);
- memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
- vmaUnmapMemory(allocator, alloc);
-}
-else
-{
- // Allocation ended up in non-mappable memory.
- // You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.
-}
-\endcode
-
-You can even use #VMA_ALLOCATION_CREATE_MAPPED_BIT flag while creating allocations
-that are not necessarily `HOST_VISIBLE` (e.g. using #VMA_MEMORY_USAGE_GPU_ONLY).
-If the allocation ends up in memory type that is `HOST_VISIBLE`, it will be persistently mapped and you can use it directly.
-If not, the flag is just ignored.
-Example:
-
-\code
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = sizeof(ConstantBuffer);
-bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
-
-VkBuffer buf;
-VmaAllocation alloc;
-VmaAllocationInfo allocInfo;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-
-if(allocInfo.pMappedData != nullptr)
-{
- // Allocation ended up in mappable memory.
- // It is persistently mapped. You can access it directly.
- memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));
-}
-else
-{
- // Allocation ended up in non-mappable memory.
- // You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.
-}
-\endcode
+`HOST_VISIBLE`, so on PC you may not need to bother.
\page staying_within_budget Staying within budget
@@ -18426,8 +17584,8 @@ To query for current memory usage and available budget, use function vmaGetHeapB
Returned structure #VmaBudget contains quantities expressed in bytes, per Vulkan memory heap.
Please note that this function returns different information and works faster than
-vmaCalculateStats(). vmaGetHeapBudgets() can be called every frame or even before every
-allocation, while vmaCalculateStats() is intended to be used rarely,
+vmaCalculateStatistics(). vmaGetHeapBudgets() can be called every frame or even before every
+allocation, while vmaCalculateStatistics() is intended to be used rarely,
only to obtain statistical information, e.g. for debugging purposes.
It is recommended to use <b>VK_EXT_memory_budget</b> device extension to obtain information
@@ -18457,20 +17615,27 @@ budget, by default the library still tries to create it, leaving it to the Vulka
implementation whether the allocation succeeds or fails. You can change this behavior
by using #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag. With it, the allocation is
not made if it would exceed the budget or if the budget is already exceeded.
-The allocation then fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+VMA then tries to make the allocation from the next eligible Vulkan memory type.
+The all of them fail, the call then fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
Example usage pattern may be to pass the #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag
when creating resources that are not essential for the application (e.g. the texture
of a specific object) and not to pass it when creating critically important resources
(e.g. render targets).
+On AMD graphics cards there is a custom vendor extension available: <b>VK_AMD_memory_overallocation_behavior</b>
+that allows to control the behavior of the Vulkan implementation in out-of-memory cases -
+whether it should fail with an error code or still allow the allocation.
+Usage of this extension involves only passing extra structure on Vulkan device creation,
+so it is out of scope of this library.
+
Finally, you can also use #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT flag to make sure
a new allocation is created only when it fits inside one of the existing memory blocks.
If it would require to allocate a new block, if fails instead with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
This also ensures that the function call is very fast because it never goes to Vulkan
to obtain a new block.
-Please note that creating \ref custom_memory_pools with VmaPoolCreateInfo::minBlockCount
-set to more than 0 will try to allocate memory blocks without checking whether they
+\note Creating \ref custom_memory_pools with VmaPoolCreateInfo::minBlockCount
+set to more than 0 will currently try to allocate memory blocks without checking whether they
fit within budget.
@@ -18544,7 +17709,7 @@ finalMemReq.memoryTypeBits = img1MemReq.memoryTypeBits & img2MemReq.memoryTypeBi
// Validate if(finalMemReq.memoryTypeBits != 0)
VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
+allocCreateInfo.preferredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
VmaAllocation alloc;
res = vmaAllocateMemory(allocator, &finalMemReq, &allocCreateInfo, &alloc, nullptr);
@@ -18573,7 +17738,7 @@ See chapter 11.8. "Memory Aliasing" of Vulkan specification or `VK_IMAGE_CREATE_
- You can create more complex layout where different images and buffers are bound
at different offsets inside one large allocation. For example, one can imagine
a big texture used in some render passes, aliasing with a set of many small buffers
-used between in some further passes. To bind a resource at non-zero offset of an allocation,
+used between in some further passes. To bind a resource at non-zero offset in an allocation,
use vmaBindBufferMemory2() / vmaBindImageMemory2().
- Before allocating memory for the resources you want to alias, check `memoryTypeBits`
returned in memory requirements of each resource to make sure the bits overlap.
@@ -18598,6 +17763,7 @@ It can be useful if you want to:
- Reserve minimum or fixed amount of Vulkan memory always preallocated for that pool.
- Use extra parameters for a set of your allocations that are available in #VmaPoolCreateInfo but not in
#VmaAllocationCreateInfo - e.g., custom minimum alignment, custom `pNext` chain.
+- Perform defragmentation on a specific subset of your allocations.
To use custom memory pools:
@@ -18644,6 +17810,14 @@ It is supported only when VmaPoolCreateInfo::blockSize = 0.
To use this feature, set VmaAllocationCreateInfo::pool to the pointer to your custom pool and
VmaAllocationCreateInfo::flags to #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+\note Excessive use of custom pools is a common mistake when using this library.
+Custom pools may be useful for special purposes - when you want to
+keep certain type of resources separate e.g. to reserve minimum amount of memory
+for them or limit maximum amount of memory they can occupy. For most
+resources this is not needed and so it is not recommended to create #VmaPool
+objects and allocations out of them. Allocating from the default pool is sufficient.
+
+
\section custom_memory_pools_MemTypeIndex Choosing memory type index
When creating a pool, you must explicitly specify memory type index.
@@ -18654,11 +17828,11 @@ that you are going to create in that pool.
\code
VkBufferCreateInfo exampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-exampleBufCreateInfo.size = 1024; // Whatever.
-exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; // Change if needed.
+exampleBufCreateInfo.size = 1024; // Doesn't matter
+exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; // Change if needed.
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
uint32_t memTypeIndex;
vmaFindMemoryTypeIndexForBufferInfo(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex);
@@ -18759,39 +17933,6 @@ you can achieve behavior of a ring buffer / queue.
Ring buffer is available only in pools with one memory block -
VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined.
-\section buddy_algorithm Buddy allocation algorithm
-
-There is another allocation algorithm that can be used with custom pools, called
-"buddy". Its internal data structure is based on a binary tree of blocks, each having
-size that is a power of two and a half of its parent's size. When you want to
-allocate memory of certain size, a free node in the tree is located. If it is too
-large, it is recursively split into two halves (called "buddies"). However, if
-requested allocation size is not a power of two, the size of the allocation is
-aligned up to the nearest power of two and the remaining space is wasted. When
-two buddy nodes become free, they are merged back into one larger node.
-
-![Buddy allocator](../gfx/Buddy_allocator.png)
-
-The advantage of buddy allocation algorithm over default algorithm is faster
-allocation and deallocation, as well as smaller external fragmentation. The
-disadvantage is more wasted space (internal fragmentation).
-For more information, please search the Internet for "Buddy memory allocation" -
-sources that describe this concept in general.
-
-To use buddy allocation algorithm with a custom pool, add flag
-#VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT to VmaPoolCreateInfo::flags while creating
-#VmaPool object.
-
-Several limitations apply to pools that use buddy algorithm:
-
-- It is recommended to use VmaPoolCreateInfo::blockSize that is a power of two.
- Otherwise, only largest power of two smaller than the size is used for
- allocations. The remaining space always stays unused.
-- [Margins](@ref debugging_memory_usage_margins) and
- [corruption detection](@ref debugging_memory_usage_corruption_detection)
- don't work in such pools.
-- [Defragmentation](@ref defragmentation) doesn't work with allocations made from
- such pool.
\page defragmentation Defragmentation
@@ -18801,236 +17942,114 @@ to find a continuous range of free memory for a new allocation despite there is
enough free space, just scattered across many small free ranges between existing
allocations.
-To mitigate this problem, you can use defragmentation feature:
-structure #VmaDefragmentationInfo2, function vmaDefragmentationBegin(), vmaDefragmentationEnd().
-Given set of allocations,
-this function can move them to compact used memory, ensure more continuous free
-space and possibly also free some `VkDeviceMemory` blocks.
-
-What the defragmentation does is:
-
-- Updates #VmaAllocation objects to point to new `VkDeviceMemory` and offset.
- After allocation has been moved, its VmaAllocationInfo::deviceMemory and/or
- VmaAllocationInfo::offset changes. You must query them again using
- vmaGetAllocationInfo() if you need them.
-- Moves actual data in memory.
-
-What it doesn't do, so you need to do it yourself:
-
-- Recreate buffers and images that were bound to allocations that were defragmented and
- bind them with their new places in memory.
- You must use `vkDestroyBuffer()`, `vkDestroyImage()`,
- `vkCreateBuffer()`, `vkCreateImage()`, vmaBindBufferMemory(), vmaBindImageMemory()
- for that purpose and NOT vmaDestroyBuffer(),
- vmaDestroyImage(), vmaCreateBuffer(), vmaCreateImage(), because you don't need to
- destroy or create allocation objects!
-- Recreate views and update descriptors that point to these buffers and images.
-
-\section defragmentation_cpu Defragmenting CPU memory
-
-Following example demonstrates how you can run defragmentation on CPU.
-Only allocations created in memory types that are `HOST_VISIBLE` can be defragmented.
-Others are ignored.
-
-The way it works is:
-
-- It temporarily maps entire memory blocks when necessary.
-- It moves data using `memmove()` function.
-
-\code
-// Given following variables already initialized:
-VkDevice device;
-VmaAllocator allocator;
-std::vector<VkBuffer> buffers;
-std::vector<VmaAllocation> allocations;
-
-
-const uint32_t allocCount = (uint32_t)allocations.size();
-std::vector<VkBool32> allocationsChanged(allocCount);
-
-VmaDefragmentationInfo2 defragInfo = {};
-defragInfo.allocationCount = allocCount;
-defragInfo.pAllocations = allocations.data();
-defragInfo.pAllocationsChanged = allocationsChanged.data();
-defragInfo.maxCpuBytesToMove = VK_WHOLE_SIZE; // No limit.
-defragInfo.maxCpuAllocationsToMove = UINT32_MAX; // No limit.
-
-VmaDefragmentationContext defragCtx;
-vmaDefragmentationBegin(allocator, &defragInfo, nullptr, &defragCtx);
-vmaDefragmentationEnd(allocator, defragCtx);
-
-for(uint32_t i = 0; i < allocCount; ++i)
-{
- if(allocationsChanged[i])
- {
- // Destroy buffer that is immutably bound to memory region which is no longer valid.
- vkDestroyBuffer(device, buffers[i], nullptr);
-
- // Create new buffer with same parameters.
- VkBufferCreateInfo bufferInfo = ...;
- vkCreateBuffer(device, &bufferInfo, nullptr, &buffers[i]);
-
- // You can make dummy call to vkGetBufferMemoryRequirements here to silence validation layer warning.
-
- // Bind new buffer to new memory region. Data contained in it is already moved.
- VmaAllocationInfo allocInfo;
- vmaGetAllocationInfo(allocator, allocations[i], &allocInfo);
- vmaBindBufferMemory(allocator, allocations[i], buffers[i]);
- }
-}
-\endcode
-
-Setting VmaDefragmentationInfo2::pAllocationsChanged is optional.
-This output array tells whether particular allocation in VmaDefragmentationInfo2::pAllocations at the same index
-has been modified during defragmentation.
-You can pass null, but you then need to query every allocation passed to defragmentation
-for new parameters using vmaGetAllocationInfo() if you might need to recreate and rebind a buffer or image associated with it.
-
-If you use [Custom memory pools](@ref choosing_memory_type_custom_memory_pools),
-you can fill VmaDefragmentationInfo2::poolCount and VmaDefragmentationInfo2::pPools
-instead of VmaDefragmentationInfo2::allocationCount and VmaDefragmentationInfo2::pAllocations
-to defragment all allocations in given pools.
-You cannot use VmaDefragmentationInfo2::pAllocationsChanged in that case.
-You can also combine both methods.
-
-\section defragmentation_gpu Defragmenting GPU memory
-
-It is also possible to defragment allocations created in memory types that are not `HOST_VISIBLE`.
-To do that, you need to pass a command buffer that meets requirements as described in
-VmaDefragmentationInfo2::commandBuffer. The way it works is:
-
-- It creates temporary buffers and binds them to entire memory blocks when necessary.
-- It issues `vkCmdCopyBuffer()` to passed command buffer.
+To mitigate this problem, you can use defragmentation feature.
+It doesn't happen automatically though and needs your cooperation,
+because VMA is a low level library that only allocates memory.
+It cannot recreate buffers and images in a new place as it doesn't remember the contents of `VkBufferCreateInfo` / `VkImageCreateInfo` structures.
+It cannot copy their contents as it doesn't record any commands to a command buffer.
Example:
\code
-// Given following variables already initialized:
-VkDevice device;
-VmaAllocator allocator;
-VkCommandBuffer commandBuffer;
-std::vector<VkBuffer> buffers;
-std::vector<VmaAllocation> allocations;
-
-
-const uint32_t allocCount = (uint32_t)allocations.size();
-std::vector<VkBool32> allocationsChanged(allocCount);
-
-VkCommandBufferBeginInfo cmdBufBeginInfo = ...;
-vkBeginCommandBuffer(commandBuffer, &cmdBufBeginInfo);
-
-VmaDefragmentationInfo2 defragInfo = {};
-defragInfo.allocationCount = allocCount;
-defragInfo.pAllocations = allocations.data();
-defragInfo.pAllocationsChanged = allocationsChanged.data();
-defragInfo.maxGpuBytesToMove = VK_WHOLE_SIZE; // Notice it is "GPU" this time.
-defragInfo.maxGpuAllocationsToMove = UINT32_MAX; // Notice it is "GPU" this time.
-defragInfo.commandBuffer = commandBuffer;
+VmaDefragmentationInfo defragInfo = {};
+defragInfo.pool = myPool;
+defragInfo.flags = VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT;
VmaDefragmentationContext defragCtx;
-vmaDefragmentationBegin(allocator, &defragInfo, nullptr, &defragCtx);
-
-vkEndCommandBuffer(commandBuffer);
+VkResult res = vmaBeginDefragmentation(allocator, &defragInfo, &defragCtx);
+// Check res...
-// Submit commandBuffer.
-// Wait for a fence that ensures commandBuffer execution finished.
-
-vmaDefragmentationEnd(allocator, defragCtx);
-
-for(uint32_t i = 0; i < allocCount; ++i)
+for(;;)
{
- if(allocationsChanged[i])
+ VmaDefragmentationPassMoveInfo pass;
+ res = vmaBeginDefragmentationPass(allocator, defragCtx, &pass);
+ if(res == VK_SUCCESS)
+ break;
+ else if(res == VK_INCOMPLETE)
{
- // Destroy buffer that is immutably bound to memory region which is no longer valid.
- vkDestroyBuffer(device, buffers[i], nullptr);
-
- // Create new buffer with same parameters.
- VkBufferCreateInfo bufferInfo = ...;
- vkCreateBuffer(device, &bufferInfo, nullptr, &buffers[i]);
-
- // You can make dummy call to vkGetBufferMemoryRequirements here to silence validation layer warning.
-
- // Bind new buffer to new memory region. Data contained in it is already moved.
- VmaAllocationInfo allocInfo;
- vmaGetAllocationInfo(allocator, allocations[i], &allocInfo);
- vmaBindBufferMemory(allocator, allocations[i], buffers[i]);
+ for(uint32_t i = 0; i < pass.moveCount; ++i)
+ {
+ //- Inspect pass.pMoves[i].srcAllocation, identify what buffer or image it represents.
+ //- Recreate this buffer or image at pass.pMoves[i].dstMemory, pass.pMoves[i].dstOffset.
+ //- Issue a vkCmdCopyBuffer/vkCmdCopyImage to copy its content to the new place.
+ }
+ //- Make sure the copy commands finished executing.
+ //- Update appropriate descriptors to point to the new places.
+ res = vmaEndDefragmentationPass(allocator, defragCtx, &pass);
+ if(res == VK_SUCCESS)
+ break;
+ else if(res != VK_INCOMPLETE)
+ // Handle error...
}
+ else
+ // Handle error...
}
-\endcode
-
-You can combine these two methods by specifying non-zero `maxGpu*` as well as `maxCpu*` parameters.
-The library automatically chooses best method to defragment each memory pool.
-
-You may try not to block your entire program to wait until defragmentation finishes,
-but do it in the background, as long as you carefully fullfill requirements described
-in function vmaDefragmentationBegin().
-\section defragmentation_additional_notes Additional notes
-
-It is only legal to defragment allocations bound to:
-
-- buffers
-- images created with `VK_IMAGE_CREATE_ALIAS_BIT`, `VK_IMAGE_TILING_LINEAR`, and
- being currently in `VK_IMAGE_LAYOUT_GENERAL` or `VK_IMAGE_LAYOUT_PREINITIALIZED`.
-
-Defragmentation of images created with `VK_IMAGE_TILING_OPTIMAL` or in any other
-layout may give undefined results.
-
-If you defragment allocations bound to images, new images to be bound to new
-memory region after defragmentation should be created with `VK_IMAGE_LAYOUT_PREINITIALIZED`
-and then transitioned to their original layout from before defragmentation if
-needed using an image memory barrier.
+vmaEndDefragmentation(allocator, defragCtx, nullptr);
+\endcode
-While using defragmentation, you may experience validation layer warnings, which you just need to ignore.
-See [Validation layer warnings](@ref general_considerations_validation_layer_warnings).
+You can defragment a specific custom pool by setting VmaDefragmentationInfo::pool
+(like in the example above) or all the default pools by setting this member to null.
-Please don't expect memory to be fully compacted after defragmentation.
-Algorithms inside are based on some heuristics that try to maximize number of Vulkan
-memory blocks to make totally empty to release them, as well as to maximize continuous
-empty space inside remaining blocks, while minimizing the number and size of allocations that
-need to be moved. Some fragmentation may still remain - this is normal.
+Unlike in previous iterations of the defragmentation API, there is no list of "movable" allocations passed as a parameter.
+Defragmentation algorithm tries to move all suitable allocations.
+You can, however, refuse to move some of them inside a defragmentation pass, by setting
+`pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE.
+However, this is not recommended and may result in suboptimal packing of the allocations after defragmentation.
+If you cannot ensure any allocation can be moved, it is better to keep movable allocations separate in a custom pool.
-\section defragmentation_custom_algorithm Writing custom defragmentation algorithm
+You can also decide to destroy an allocation instead of moving it.
+You should then set `pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY.
-If you want to implement your own, custom defragmentation algorithm,
-there is infrastructure prepared for that,
-but it is not exposed through the library API - you need to hack its source code.
-Here are steps needed to do this:
+You can perform the defragmentation incrementally to limit the number of allocations and bytes to be moved
+in each pass, e.g. to call it in sync with render frames and not to experience too big hitches.
+See members: VmaDefragmentationInfo::maxBytesPerPass, VmaDefragmentationInfo::maxAllocationsPerPass.
--# Main thing you need to do is to define your own class derived from base abstract
- class `VmaDefragmentationAlgorithm` and implement your version of its pure virtual methods.
- See definition and comments of this class for details.
--# Your code needs to interact with device memory block metadata.
- If you need more access to its data than it is provided by its public interface,
- declare your new class as a friend class e.g. in class `VmaBlockMetadata_Generic`.
--# If you want to create a flag that would enable your algorithm or pass some additional
- flags to configure it, add them to `VmaDefragmentationFlagBits` and use them in
- VmaDefragmentationInfo2::flags.
--# Modify function `VmaBlockVectorDefragmentationContext::Begin` to create object
- of your new class whenever needed.
+It is also safe to perform the defragmentation asynchronously to render frames and other Vulkan and VMA
+usage, possibly from multiple threads, with the exception that allocations
+returned in VmaDefragmentationPassMoveInfo::pMoves shouldn't be destroyed until the defragmentation pass is ended.
\page statistics Statistics
-This library contains functions that return information about its internal state,
+This library contains several functions that return information about its internal state,
especially the amount of memory allocated from Vulkan.
-Please keep in mind that these functions need to traverse all internal data structures
-to gather these information, so they may be quite time-consuming.
-Don't call them too often.
\section statistics_numeric_statistics Numeric statistics
-You can query for overall statistics of the allocator using function vmaCalculateStats().
-Information are returned using structure #VmaStats.
-It contains #VmaStatInfo - number of allocated blocks, number of allocations
-(occupied ranges in these blocks), number of unused (free) ranges in these blocks,
-number of bytes used and unused (but still allocated from Vulkan) and other information.
-They are summed across memory heaps, memory types and total for whole allocator.
+If you need to obtain basic statistics about memory usage per heap, together with current budget,
+you can call function vmaGetHeapBudgets() and inspect structure #VmaBudget.
+This is useful to keep track of memory usage and stay withing budget
+(see also \ref staying_within_budget).
+Example:
-You can query for statistics of a custom pool using function vmaGetPoolStats().
-Information are returned using structure #VmaPoolStats.
+\code
+uint32_t heapIndex = ...
+
+VmaBudget budgets[VK_MAX_MEMORY_HEAPS];
+vmaGetHeapBudgets(allocator, budgets);
+
+printf("My heap currently has %u allocations taking %llu B,\n",
+ budgets[heapIndex].statistics.allocationCount,
+ budgets[heapIndex].statistics.allocationBytes);
+printf("allocated out of %u Vulkan device memory blocks taking %llu B,\n",
+ budgets[heapIndex].statistics.blockCount,
+ budgets[heapIndex].statistics.blockBytes);
+printf("Vulkan reports total usage %llu B with budget %llu B.\n",
+ budgets[heapIndex].usage,
+ budgets[heapIndex].budget);
+\endcode
+
+You can query for more detailed statistics per memory heap, type, and totals,
+including minimum and maximum allocation size and unused range size,
+by calling function vmaCalculateStatistics() and inspecting structure #VmaTotalStatistics.
+This function is slower though, as it has to traverse all the internal data structures,
+so it should be used only for debugging purposes.
-You can query for information about specific allocation using function vmaGetAllocationInfo().
+You can query for statistics of a custom pool using function vmaGetPoolStatistics()
+or vmaCalculatePoolStatistics().
+
+You can query for information about a specific allocation using function vmaGetAllocationInfo().
It fill structure #VmaAllocationInfo.
\section statistics_json_dump JSON dump
@@ -19047,7 +18066,7 @@ The format of this JSON string is not part of official documentation of the libr
but it will not change in backward-incompatible way without increasing library major version number
and appropriate mention in changelog.
-The JSON string contains all the data that can be obtained using vmaCalculateStats().
+The JSON string contains all the data that can be obtained using vmaCalculateStatistics().
It can also contain detailed map of allocated memory blocks and their regions -
free and occupied by allocations.
This allows e.g. to visualize the memory or assess fragmentation.
@@ -19064,18 +18083,17 @@ some handle, index, key, ordinal number or any other value that would associate
the allocation with your custom metadata.
\code
-VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-// Fill bufferInfo...
+VkBufferCreateInfo bufCreateInfo = ...
MyBufferMetadata* pMetadata = CreateBufferMetadata();
VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
allocCreateInfo.pUserData = pMetadata;
VkBuffer buffer;
VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocCreateInfo, &buffer, &allocation, nullptr);
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buffer, &allocation, nullptr);
\endcode
The pointer may be later retrieved as VmaAllocationInfo::pUserData:
@@ -19089,7 +18107,7 @@ MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.pUserData;
It can also be changed using function vmaSetAllocationUserData().
Values of (non-zero) allocations' `pUserData` are printed in JSON report created by
-vmaBuildStatsString(), in hexadecimal form.
+vmaBuildStatsString() in hexadecimal form.
\section allocation_names Allocation names
@@ -19097,19 +18115,18 @@ There is alternative mode available where `pUserData` pointer is used to point t
a null-terminated string, giving a name to the allocation. To use this mode,
set #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT flag in VmaAllocationCreateInfo::flags.
Then `pUserData` passed as VmaAllocationCreateInfo::pUserData or argument to
-vmaSetAllocationUserData() must be either null or pointer to a null-terminated string.
+vmaSetAllocationUserData() must be either null or a pointer to a null-terminated string.
The library creates internal copy of the string, so the pointer you pass doesn't need
to be valid for whole lifetime of the allocation. You can free it after the call.
\code
-VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
-// Fill imageInfo...
+VkImageCreateInfo imageInfo = ...
std::string imageName = "Texture: ";
imageName += fileName;
VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
allocCreateInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT;
allocCreateInfo.pUserData = imageName.c_str();
@@ -19265,15 +18282,17 @@ It might be more convenient, but you need to make sure to use this new unit cons
\section virtual_allocator_statistics Statistics
-You can obtain statistics of a virtual block using vmaCalculateVirtualBlockStats().
-The function fills structure #VmaStatInfo - same as used by the normal Vulkan memory allocator.
+You can obtain statistics of a virtual block using vmaGetVirtualBlockStatistics()
+(to get brief statistics that are fast to calculate)
+or vmaCalculateVirtualBlockStatistics() (to get more detailed statistics, slower to calculate).
+The functions fill structures #VmaStatistics, #VmaDetailedStatistics respectively - same as used by the normal Vulkan memory allocator.
Example:
\code
-VmaStatInfo statInfo;
-vmaCalculateVirtualBlockStats(block, &statInfo);
+VmaStatistics stats;
+vmaGetVirtualBlockStatistics(block, &stats);
printf("My virtual block has %llu bytes used by %u virtual allocations\n",
- statInfo.usedBytes, statInfo.allocationCount);
+ stats.allocationBytes, stats.allocationCount);
\endcode
You can also request a full list of allocations and free regions as a string in JSON format by calling
@@ -19353,7 +18372,6 @@ allocations, which have their own memory block of specific size.
It is thus not applied to allocations made using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT flag
or those automatically decided to put into dedicated allocations, e.g. due to its
large size or recommended by VK_KHR_dedicated_allocation extension.
-Margins are also not active in custom pools created with #VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT flag.
Margins appear in [JSON dump](@ref statistics_json_dump) as part of free space.
@@ -19439,33 +18457,14 @@ Contrary to Direct3D 12, Vulkan doesn't have a concept of alignment of the entir
\page usage_patterns Recommended usage patterns
+Vulkan gives great flexibility in memory allocation.
+This chapter shows the most common patterns.
+
See also slides from talk:
[Sawicki, Adam. Advanced Graphics Techniques Tutorial: Memory management in Vulkan and DX12. Game Developers Conference, 2018](https://www.gdcvault.com/play/1025458/Advanced-Graphics-Techniques-Tutorial-New)
-\section usage_patterns_common_mistakes Common mistakes
-
-<b>Use of CPU_TO_GPU instead of CPU_ONLY memory</b>
-
-#VMA_MEMORY_USAGE_CPU_TO_GPU is recommended only for resources that will be
-mapped and written by the CPU, as well as read directly by the GPU - like some
-buffers or textures updated every frame (dynamic). If you create a staging copy
-of a resource to be written by CPU and then used as a source of transfer to
-another resource placed in the GPU memory, that staging resource should be
-created with #VMA_MEMORY_USAGE_CPU_ONLY. Please read the descriptions of these
-enums carefully for details.
-
-<b>Unnecessary use of custom pools</b>
-
-\ref custom_memory_pools may be useful for special purposes - when you want to
-keep certain type of resources separate e.g. to reserve minimum amount of memory
-for them or limit maximum amount of memory they can occupy. For most
-resources this is not needed and so it is not recommended to create #VmaPool
-objects and allocations out of them. Allocating from the default pool is sufficient.
-
-\section usage_patterns_simple Simple patterns
-
-\subsection usage_patterns_simple_render_targets Render targets
+\section usage_patterns_gpu_only GPU-only resource
<b>When:</b>
Any resources that you frequently write and read on GPU,
@@ -19473,123 +18472,216 @@ e.g. images used as color attachments (aka "render targets"), depth-stencil atta
images/buffers used as storage image/buffer (aka "Unordered Access View (UAV)").
<b>What to do:</b>
-Create them in video memory that is fastest to access from GPU using
-#VMA_MEMORY_USAGE_GPU_ONLY.
+Let the library select the optimal memory type, which will likely have `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
-Consider using [VK_KHR_dedicated_allocation](@ref vk_khr_dedicated_allocation) extension
-and/or manually creating them as dedicated allocations using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT,
-especially if they are large or if you plan to destroy and recreate them e.g. when
-display resolution changes.
+\code
+VkImageCreateInfo imgCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
+imgCreateInfo.imageType = VK_IMAGE_TYPE_2D;
+imgCreateInfo.extent.width = 3840;
+imgCreateInfo.extent.height = 2160;
+imgCreateInfo.extent.depth = 1;
+imgCreateInfo.mipLevels = 1;
+imgCreateInfo.arrayLayers = 1;
+imgCreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
+imgCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+imgCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+imgCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+imgCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
+
+VkImage img;
+VmaAllocation alloc;
+vmaCreateImage(allocator, &imgCreateInfo, &allocCreateInfo, &img, &alloc, nullptr);
+\endcode
+
+<b>Also consider:</b>
+Consider creating them as dedicated allocations using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT,
+especially if they are large or if you plan to destroy and recreate them with different sizes
+e.g. when display resolution changes.
Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later.
-\subsection usage_patterns_simple_immutable_resources Immutable resources
+
+\section usage_patterns_staging_copy_upload Staging copy for upload
<b>When:</b>
-Any resources that you fill on CPU only once (aka "immutable") or infrequently
-and then read frequently on GPU,
-e.g. textures, vertex and index buffers, constant buffers that don't change often.
+A "staging" buffer than you want to map and fill from CPU code, then use as a source od transfer
+to some GPU resource.
<b>What to do:</b>
-Create them in video memory that is fastest to access from GPU using
-#VMA_MEMORY_USAGE_GPU_ONLY.
+Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT.
+Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`.
-To initialize content of such resource, create a CPU-side (aka "staging") copy of it
-in system memory - #VMA_MEMORY_USAGE_CPU_ONLY, map it, fill it,
-and submit a transfer from it to the GPU resource.
-You can keep the staging copy if you need it for another upload transfer in the future.
-If you don't, you can destroy it or reuse this buffer for uploading different resource
-after the transfer finishes.
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
-Prefer to create just buffers in system memory rather than images, even for uploading textures.
-Use `vkCmdCopyBufferToImage()`.
-Dont use images with `VK_IMAGE_TILING_LINEAR`.
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-\subsection usage_patterns_dynamic_resources Dynamic resources
+...
-<b>When:</b>
-Any resources that change frequently (aka "dynamic"), e.g. every frame or every draw call,
-written on CPU, read on GPU.
+memcpy(allocInfo.pMappedData, myData, myDataSize);
+\endcode
-<b>What to do:</b>
-Create them using #VMA_MEMORY_USAGE_CPU_TO_GPU.
-You can map it and write to it directly on CPU, as well as read from it on GPU.
+<b>Also consider:</b>
+You can map the allocation using vmaMapMemory() or you can create it as persistenly mapped
+using #VMA_ALLOCATION_CREATE_MAPPED_BIT, as in the example above.
-This is a more complex situation. Different solutions are possible,
-and the best one depends on specific GPU type, but you can use this simple approach for the start.
-Prefer to write to such resource sequentially (e.g. using `memcpy`).
-Don't perform random access or any reads from it on CPU, as it may be very slow.
-Also note that textures written directly from the host through a mapped pointer need to be in LINEAR not OPTIMAL layout.
-\subsection usage_patterns_readback Readback
+\section usage_patterns_readback Readback
<b>When:</b>
-Resources that contain data written by GPU that you want to read back on CPU,
+Buffers for data written by or transferred from the GPU that you want to read back on the CPU,
e.g. results of some computations.
<b>What to do:</b>
-Create them using #VMA_MEMORY_USAGE_GPU_TO_CPU.
-You can write to them directly on GPU, as well as map and read them on CPU.
-
-\section usage_patterns_advanced Advanced patterns
+Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`
+and `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`.
-\subsection usage_patterns_integrated_graphics Detecting integrated graphics
-
-You can support integrated graphics (like Intel HD Graphics, AMD APU) better
-by detecting it in Vulkan.
-To do it, call `vkGetPhysicalDeviceProperties()`, inspect
-`VkPhysicalDeviceProperties::deviceType` and look for `VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU`.
-When you find it, you can assume that memory is unified and all memory types are comparably fast
-to access from GPU, regardless of `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-You can then sum up sizes of all available memory heaps and treat them as useful for
-your GPU resources, instead of only `DEVICE_LOCAL` ones.
-You can also prefer to create your resources in memory types that are `HOST_VISIBLE` to map them
-directly instead of submitting explicit transfer (see below).
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
-\subsection usage_patterns_direct_vs_transfer Direct access versus transfer
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-For resources that you frequently write on CPU and read on GPU, many solutions are possible:
+...
--# Create one copy in video memory using #VMA_MEMORY_USAGE_GPU_ONLY,
- second copy in system memory using #VMA_MEMORY_USAGE_CPU_ONLY and submit explicit transfer each time.
--# Create just a single copy using #VMA_MEMORY_USAGE_CPU_TO_GPU, map it and fill it on CPU,
- read it directly on GPU.
--# Create just a single copy using #VMA_MEMORY_USAGE_CPU_ONLY, map it and fill it on CPU,
- read it directly on GPU.
+const float* downloadedData = (const float*)allocInfo.pMappedData;
+\endcode
-Which solution is the most efficient depends on your resource and especially on the GPU.
-It is best to measure it and then make the decision.
-Some general recommendations:
-- On integrated graphics use (2) or (3) to avoid unnecessary time and memory overhead
- related to using a second copy and making transfer.
-- For small resources (e.g. constant buffers) use (2).
- Discrete AMD cards have special 256 MiB pool of video memory that is directly mappable.
- Even if the resource ends up in system memory, its data may be cached on GPU after first
- fetch over PCIe bus.
-- For larger resources (e.g. textures), decide between (1) and (2).
- You may want to differentiate NVIDIA and AMD, e.g. by looking for memory type that is
- both `DEVICE_LOCAL` and `HOST_VISIBLE`. When you find it, use (2), otherwise use (1).
+\section usage_patterns_advanced_data_uploading Advanced data uploading
+
+For resources that you frequently write on CPU via mapped pointer and
+freqnently read on GPU e.g. as a uniform buffer (also called "dynamic"), multiple options are possible:
+
+-# Easiest solution is to have one copy of the resource in `HOST_VISIBLE` memory,
+ even if it means system RAM (not `DEVICE_LOCAL`) on systems with a discrete graphics card,
+ and make the device reach out to that resource directly.
+ - Reads performed by the device will then go through PCI Express bus.
+ The performace of this access may be limited, but it may be fine depending on the size
+ of this resource (whether it is small enough to quickly end up in GPU cache) and the sparsity
+ of access.
+-# On systems with unified memory (e.g. AMD APU or Intel integrated graphics, mobile chips),
+ a memory type may be available that is both `HOST_VISIBLE` (available for mapping) and `DEVICE_LOCAL`
+ (fast to access from the GPU). Then, it is likely the best choice for such type of resource.
+-# Systems with a discrete graphics card and separate video memory may or may not expose
+ a memory type that is both `HOST_VISIBLE` and `DEVICE_LOCAL`, also known as Base Address Register (BAR).
+ If they do, it represents a piece of VRAM (or entire VRAM, if ReBAR is enabled in the motherboard BIOS)
+ that is available to CPU for mapping.
+ - Writes performed by the host to that memory go through PCI Express bus.
+ The performance of these writes may be limited, but it may be fine, especially on PCIe 4.0,
+ as long as rules of using uncached and write-combined memory are followed - only sequential writes and no reads.
+-# Finally, you may need or prefer to create a separate copy of the resource in `DEVICE_LOCAL` memory,
+ a separate "staging" copy in `HOST_VISIBLE` memory and perform an explicit transfer command between them.
+
+Thankfully, VMA offers an aid to create and use such resources in the the way optimal
+for the current Vulkan device. To help the library make the best choice,
+use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT together with
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT.
+It will then prefer a memory type that is both `DEVICE_LOCAL` and `HOST_VISIBLE` (integrated memory or BAR),
+but if no such memory type is available or allocation from it fails
+(PC graphics cards have only 256 MB of BAR by default, unless ReBAR is supported and enabled in BIOS),
+it will fall back to `DEVICE_LOCAL` memory for fast GPU access.
+It is then up to you to detect that the allocation ended up in a memory type that is not `HOST_VISIBLE`,
+so you need to create another "staging" allocation and perform explicit transfers.
-Similarly, for resources that you frequently write on GPU and read on CPU, multiple
-solutions are possible:
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
--# Create one copy in video memory using #VMA_MEMORY_USAGE_GPU_ONLY,
- second copy in system memory using #VMA_MEMORY_USAGE_GPU_TO_CPU and submit explicit tranfer each time.
--# Create just single copy using #VMA_MEMORY_USAGE_GPU_TO_CPU, write to it directly on GPU,
- map it and read it on CPU.
+VkMemoryPropertyFlags memPropFlags;
+vmaGetAllocationMemoryProperties(allocator, alloc, &memPropFlags);
-You should take some measurements to decide which option is faster in case of your specific
-resource.
+if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
+{
+ // Allocation ended up in a mappable memory and is already mapped - write to it directly.
-Note that textures accessed directly from the host through a mapped pointer need to be in LINEAR layout,
-which may slow down their usage on the device.
-Textures accessed only by the device and transfer operations can use OPTIMAL layout.
+ // [Executed in runtime]:
+ memcpy(allocInfo.pMappedData, myData, myDataSize);
+}
+else
+{
+ // Allocation ended up in a non-mappable memory - need to transfer.
+ VkBufferCreateInfo stagingBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+ stagingBufCreateInfo.size = 65536;
+ stagingBufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+ VmaAllocationCreateInfo stagingAllocCreateInfo = {};
+ stagingAllocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+ stagingAllocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+ VkBuffer stagingBuf;
+ VmaAllocation stagingAlloc;
+ VmaAllocationInfo stagingAllocInfo;
+ vmaCreateBuffer(allocator, &stagingBufCreateInfo, &stagingAllocCreateInfo,
+ &stagingBuf, &stagingAlloc, stagingAllocInfo);
+
+ // [Executed in runtime]:
+ memcpy(stagingAllocInfo.pMappedData, myData, myDataSize);
+ VkBufferCopy bufCopy = {
+ 0, // srcOffset
+ 0, // dstOffset,
+ myDataSize); // size
+ vkCmdCopyBuffer(cmdBuf, stagingBuf, buf, 1, &bufCopy);
+}
+\endcode
-If you don't want to specialize your code for specific types of GPUs, you can still make
-an simple optimization for cases when your resource ends up in mappable memory to use it
-directly in this case instead of creating CPU-side staging copy.
-For details see [Finding out if memory is mappable](@ref memory_mapping_finding_if_memory_mappable).
+\section usage_patterns_other_use_cases Other use cases
+
+Here are some other, less obvious use cases and their recommended settings:
+
+- An image that is used only as transfer source and destination, but it should stay on the device,
+ as it is used to temporarily store a copy of some texture, e.g. from the current to the next frame,
+ for temporal antialiasing or other temporal effects.
+ - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO
+- An image that is used only as transfer source and destination, but it should be placed
+ in the system RAM despite it doesn't need to be mapped, because it serves as a "swap" copy to evict
+ least recently used textures from VRAM.
+ - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_HOST,
+ as VMA needs a hint here to differentiate from the previous case.
+- A buffer that you want to map and write from the CPU, directly read from the GPU
+ (e.g. as a uniform or vertex buffer), but you have a clear preference to place it in device or
+ host memory due to its large size.
+ - Use `VkBufferCreateInfo::usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST
+ - Use VmaAllocationCreateInfo::flags = #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT
\page configuration Configuration
@@ -19628,6 +18720,8 @@ by using a helper library like [volk](https://github.com/zeux/volk).
Third, VMA tries to fetch remaining pointers that are still null by calling
`vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` on its own.
+You need to only fill in VmaVulkanFunctions::vkGetInstanceProcAddr and VmaVulkanFunctions::vkGetDeviceProcAddr.
+Other pointers will be fetched automatically.
If you want to disable this feature, set configuration macro: `#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0`.
Finally, all the function pointers required by the library (considering selected
@@ -19652,7 +18746,7 @@ VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.
\section heap_memory_limit Device heap memory limit
When device memory of certain heap runs out of free space, new allocations may
-fail (returning error code) or they may succeed, silently pushing some existing
+fail (returning error code) or they may succeed, silently pushing some existing_
memory blocks from GPU VRAM to system RAM (which degrades performance). This
behavior is implementation-dependent - it depends on GPU vendor and graphics
driver.
@@ -19673,10 +18767,14 @@ VK_KHR_dedicated_allocation is a Vulkan extension which can be used to improve
performance on some GPUs. It augments Vulkan API with possibility to query
driver whether it prefers particular buffer or image to have its own, dedicated
allocation (separate `VkDeviceMemory` block) for better efficiency - to be able
-to do some internal optimizations.
+to do some internal optimizations. The extension is supported by this library.
+It will be used automatically when enabled.
+
+It has been promoted to core Vulkan 1.1, so if you use eligible Vulkan version
+and inform VMA about it by setting VmaAllocatorCreateInfo::vulkanApiVersion,
+you are all set.
-The extension is supported by this library. It will be used automatically when
-enabled. To enable it:
+Otherwise, if you want to use it as an extension:
1 . When creating Vulkan device, check if following 2 device extensions are
supported (call `vkEnumerateDeviceExtensionProperties()`).
@@ -19688,7 +18786,7 @@ If yes, enable them (fill `VkDeviceCreateInfo::ppEnabledExtensionNames`).
If you enabled these extensions:
2 . Use #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag when creating
-your #VmaAllocator`to inform the library that you enabled required extensions
+your #VmaAllocator to inform the library that you enabled required extensions
and you want the library to use them.
\code
@@ -19703,7 +18801,7 @@ buffer using vmaCreateBuffer() or image using vmaCreateImage().
When using the extension together with Vulkan Validation Layer, you will receive
warnings like this:
- vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer.
+_vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer._
It is OK, you should just ignore it. It happens because you use function
`vkGetBufferMemoryRequirements2KHR()` instead of standard
@@ -19760,7 +18858,7 @@ out of the special `DEVICE_COHERENT` and `DEVICE_UNCACHED` memory types on eligi
devices. There are multiple ways to do it, for example:
- You can request or prefer to allocate out of such memory types by adding
- `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` to VmaAllocationCreateInfo::requiredFlags
+ `VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` to VmaAllocationCreateInfo::requiredFlags
or VmaAllocationCreateInfo::preferredFlags. Those flags can be freely mixed with
other ways of \ref choosing_memory_type, like setting VmaAllocationCreateInfo::usage.
- If you manually found memory type index to use for this purpose, force allocation
@@ -19778,7 +18876,7 @@ accompanying this library.
Device extension VK_KHR_buffer_device_address
allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code.
-It is promoted to core Vulkan 1.2.
+It has been promoted to core Vulkan 1.2.
If you want to use this feature in connection with VMA, follow these steps:
@@ -19839,7 +18937,7 @@ accompanying this library.
you must not call vmaGetAllocationInfo() and vmaMapMemory() from different
threads at the same time if you pass the same #VmaAllocation object to these
functions.
-- #VmaVirtualBlock is also not safe to be used from multiple threads simultaneously.
+- #VmaVirtualBlock is not safe to be used from multiple threads simultaneously.
\section general_considerations_validation_layer_warnings Validation layer warnings
@@ -19863,7 +18961,7 @@ The library uses following algorithm for allocation, in order:
-# Try to find free range of memory in existing blocks.
-# If failed, try to create a new block of `VkDeviceMemory`, with preferred block size.
--# If failed, try to create such block with size/2, size/4, size/8.
+-# If failed, try to create such block with size / 2, size / 4, size / 8.
-# If failed, try to allocate separate `VkDeviceMemory` for this allocation,
just like when you use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
-# If failed, choose other memory type that meets the requirements specified in
@@ -19874,28 +18972,29 @@ The library uses following algorithm for allocation, in order:
Features deliberately excluded from the scope of this library:
-- **Data transfer.** Uploading (streaming) and downloading data of buffers and images
- between CPU and GPU memory and related synchronization is responsibility of the user.
- Defining some "texture" object that would automatically stream its data from a
- staging copy in CPU memory to GPU memory would rather be a feature of another,
- higher-level library implemented on top of VMA.
-- **Recreation of buffers and images.** Although the library has functions for
- buffer and image creation (vmaCreateBuffer(), vmaCreateImage()), you need to
- recreate these objects yourself after defragmentation. That is because the big
- structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in
- #VmaAllocation object.
-- **Handling CPU memory allocation failures.** When dynamically creating small C++
- objects in CPU memory (not Vulkan memory), allocation failures are not checked
- and handled gracefully, because that would complicate code significantly and
- is usually not needed in desktop PC applications anyway.
- Success of an allocation is just checked with an assert.
-- **Code free of any compiler warnings.** Maintaining the library to compile and
- work correctly on so many different platforms is hard enough. Being free of
- any warnings, on any version of any compiler, is simply not feasible.
- There are many preprocessor macros that make some variables unused, function parameters unreferenced,
- or conditional expressions constant in some configurations.
- The code of this library should not be bigger or more complicated just to silence these warnings.
- It is recommended to disable such warnings instead.
-- This is a C++ library with C interface. **Bindings or ports to any other programming languages** are welcome as external projects but
- are not going to be included into this repository.
+-# **Data transfer.** Uploading (streaming) and downloading data of buffers and images
+ between CPU and GPU memory and related synchronization is responsibility of the user.
+ Defining some "texture" object that would automatically stream its data from a
+ staging copy in CPU memory to GPU memory would rather be a feature of another,
+ higher-level library implemented on top of VMA.
+ VMA doesn't record any commands to a `VkCommandBuffer`. It just allocates memory.
+-# **Recreation of buffers and images.** Although the library has functions for
+ buffer and image creation: vmaCreateBuffer(), vmaCreateImage(), you need to
+ recreate these objects yourself after defragmentation. That is because the big
+ structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in
+ #VmaAllocation object.
+-# **Handling CPU memory allocation failures.** When dynamically creating small C++
+ objects in CPU memory (not Vulkan memory), allocation failures are not checked
+ and handled gracefully, because that would complicate code significantly and
+ is usually not needed in desktop PC applications anyway.
+ Success of an allocation is just checked with an assert.
+-# **Code free of any compiler warnings.** Maintaining the library to compile and
+ work correctly on so many different platforms is hard enough. Being free of
+ any warnings, on any version of any compiler, is simply not feasible.
+ There are many preprocessor macros that make some variables unused, function parameters unreferenced,
+ or conditional expressions constant in some configurations.
+ The code of this library should not be bigger or more complicated just to silence these warnings.
+ It is recommended to disable such warnings instead.
+-# This is a C++ library with C interface. **Bindings or ports to any other programming languages** are welcome as external projects but
+ are not going to be included into this repository.
*/